From b8a3abd7c4b3a0fa21bdd1a6444256c984e6e010 Mon Sep 17 00:00:00 2001 From: Mrinank Bhowmick <77621953+Mrinank-Bhowmick@users.noreply.github.com> Date: Fri, 25 Oct 2024 18:15:18 +0000 Subject: [PATCH 1/3] added drizzle --- third-party-tools/drizzle-orm.md | 87 ++++++++++++++++++++++++++++++++ third-party-tools/overview.md | 1 + 2 files changed, 88 insertions(+) create mode 100644 third-party-tools/drizzle-orm.md diff --git a/third-party-tools/drizzle-orm.md b/third-party-tools/drizzle-orm.md new file mode 100644 index 00000000..2b5ef28e --- /dev/null +++ b/third-party-tools/drizzle-orm.md @@ -0,0 +1,87 @@ +--- +title: Drizzle ORM +description: Guide for using Drizzle ORM with QuestDB +--- + +[Drizzle ORM](https://orm.drizzle.team/) is a modern TypeScript ORM designed for SQL databases. It provides a type-safe API for building queries and managing database interactions, making it an excellent choice for developers working with TypeScript and JavaScript. + + +## Prerequisites + +- Node.js +- drizzle-orm +- pg +- A QuestDB instance + +## Installation + +You can install Drizzle ORM and its PostgreSQL driver using npm: + +```bash +npm install drizzle-orm pg +``` + +## Example usage + +```javascript +const { drizzle } = require("drizzle-orm/node-postgres"); +const { Client } = require("pg"); +const { pgTable, integer } = require("drizzle-orm/pg-core"); +const { gt } = require("drizzle-orm"); + +// Define the table schema using pgTable +const someTable = pgTable("some_table", { + x: integer("x"), + y: integer("y"), +}); + +const client = new Client({ + host: "localhost", + port: 8812, + user: "admin", + password: "quest", + database: "qdb", +}); + +async function main() { + await client.connect(); + + // Initialize Drizzle + const db = drizzle(client); + + // Create the table if it doesn't exist + await client.query(` + CREATE TABLE IF NOT EXISTS some_table ( + x INT NOT NULL, + y INT NOT NULL + ); + `); + + // Insert data + await db.insert(someTable).values([ + { x: 11, y: 12 }, + { x: 13, y: 14 }, + ]); + + // Basic select without parameters + const result1 = await db.select().from(someTable); + console.log(result1); + + // Select with parameters + const result2 = await db + .select({ + x: someTable.x, + y: someTable.y, + }) + .from(someTable) + .where(gt(someTable.y, 12)); + console.log(result2); + + await client.end(); +} + +main().catch(console.error); +``` + +## See also +- [Drizzle ORM documentation](https://orm.drizzle.team/docs/rqb) \ No newline at end of file diff --git a/third-party-tools/overview.md b/third-party-tools/overview.md index 4199d034..45f6ea29 100644 --- a/third-party-tools/overview.md +++ b/third-party-tools/overview.md @@ -58,6 +58,7 @@ Improve your interactions with QuestDB using these tools and interfaces: analyze monitoring metrics. - [SQLAlchemy](/docs/third-party-tools/sqlalchemy/): Utilize Python's ORM capabilities for database interactions. +- [Drizzle ORM](/docs/third-party-tools/drizzle-orm): Utilize JavaScript's and TypeScript's ORM for type-safe and flexible database interactions. - [qStudio](/docs/third-party-tools/qstudio/): A free SQL GUI for query execution, table browsing, and result charting. From 1be556da9e5146e01b957b2ea2005d0ce6414f34 Mon Sep 17 00:00:00 2001 From: Mrinank Bhowmick <77621953+Mrinank-Bhowmick@users.noreply.github.com> Date: Tue, 29 Oct 2024 19:13:34 +0000 Subject: [PATCH 2/3] modified example --- third-party-tools/drizzle-orm.md | 71 +++++++++++++++++++++----------- 1 file changed, 46 insertions(+), 25 deletions(-) diff --git a/third-party-tools/drizzle-orm.md b/third-party-tools/drizzle-orm.md index 2b5ef28e..bbc0ae57 100644 --- a/third-party-tools/drizzle-orm.md +++ b/third-party-tools/drizzle-orm.md @@ -11,7 +11,7 @@ description: Guide for using Drizzle ORM with QuestDB - Node.js - drizzle-orm - pg -- A QuestDB instance +- A QuestDB instance ## Installation @@ -26,13 +26,21 @@ npm install drizzle-orm pg ```javascript const { drizzle } = require("drizzle-orm/node-postgres"); const { Client } = require("pg"); -const { pgTable, integer } = require("drizzle-orm/pg-core"); +const { + pgTable, + varchar, + doublePrecision, + timestamp, +} = require("drizzle-orm/pg-core"); const { gt } = require("drizzle-orm"); -// Define the table schema using pgTable -const someTable = pgTable("some_table", { - x: integer("x"), - y: integer("y"), +// Define table schema using pgTable +const tradesTable = pgTable("trades", { + symbol: varchar("symbol"), + side: varchar("side"), + price: doublePrecision("price"), + amount: doublePrecision("amount"), + timestamp: timestamp("timestamp"), }); const client = new Client({ @@ -46,37 +54,50 @@ const client = new Client({ async function main() { await client.connect(); - // Initialize Drizzle + // Initialize Drizzle ORM const db = drizzle(client); // Create the table if it doesn't exist await client.query(` - CREATE TABLE IF NOT EXISTS some_table ( - x INT NOT NULL, - y INT NOT NULL + CREATE TABLE IF NOT EXISTS trades ( + symbol TEXT, + side TEXT, + price DOUBLE PRECISION, + amount DOUBLE PRECISION, + timestamp TIMESTAMP ); `); - // Insert data - await db.insert(someTable).values([ - { x: 11, y: 12 }, - { x: 13, y: 14 }, + // Insert data with a current timestamp + const current_timestamp = new Date(); + await db.insert(tradesTable).values([ + { + symbol: "ETH-USD", + side: "sell", + price: 2615.54, + amount: 0.00044, + timestamp: current_timestamp, + }, + { + symbol: "BTC-USD", + side: "sell", + price: 39269.98, + amount: 0.001, + timestamp: current_timestamp, + }, ]); - // Basic select without parameters - const result1 = await db.select().from(someTable); - console.log(result1); - - // Select with parameters - const result2 = await db + // Query with conditions + const result = await db .select({ - x: someTable.x, - y: someTable.y, + symbol: tradesTable.symbol, + price: tradesTable.price, + timestamp: tradesTable.timestamp, }) - .from(someTable) - .where(gt(someTable.y, 12)); - console.log(result2); + .from(tradesTable) + .where(gt(tradesTable.price, 3000)); + console.log(result); await client.end(); } From d852a06d41a321111a202df0e3b1d1e5a1580175 Mon Sep 17 00:00:00 2001 From: Mrinank Bhowmick <77621953+Mrinank-Bhowmick@users.noreply.github.com> Date: Wed, 6 Nov 2024 13:02:38 +0000 Subject: [PATCH 3/3] updated --- third-party-tools/drizzle-orm.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/third-party-tools/drizzle-orm.md b/third-party-tools/drizzle-orm.md index bbc0ae57..7e0b48e0 100644 --- a/third-party-tools/drizzle-orm.md +++ b/third-party-tools/drizzle-orm.md @@ -60,10 +60,10 @@ async function main() { // Create the table if it doesn't exist await client.query(` CREATE TABLE IF NOT EXISTS trades ( - symbol TEXT, - side TEXT, - price DOUBLE PRECISION, - amount DOUBLE PRECISION, + symbol VARCHAR, + side VARCHAR, + price DOUBLE, + amount DOUBLE, timestamp TIMESTAMP ); `);