@devbro/neko-sql 0.1.29 → 0.1.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{Blueprint-DBRunQ7n.d.mts → Blueprint-D3WHeqRS.d.mts} +73 -0
- package/dist/Blueprint.d.mts +1 -1
- package/dist/Connection.d.mts +1 -1
- package/dist/Expression.d.mts +1 -1
- package/dist/Migration.d.mts +1 -1
- package/dist/Query.d.mts +1 -1
- package/dist/QueryGrammar.d.mts +1 -1
- package/dist/Schema.d.mts +1 -1
- package/dist/Schema.mjs +75 -13
- package/dist/Schema.mjs.map +1 -1
- package/dist/SchemaGrammar.d.mts +1 -1
- package/dist/databases/index.d.mts +1 -1
- package/dist/databases/postgresql/PostgresqlConnection.d.mts +1 -1
- package/dist/databases/postgresql/PostgresqlQueryGrammar.d.mts +1 -1
- package/dist/databases/postgresql/PostgresqlSchemaGrammar.d.mts +1 -1
- package/dist/databases/postgresql/index.d.mts +1 -1
- package/dist/index.d.mts +1 -1
- package/dist/index.js +106 -43
- package/dist/index.js.map +1 -1
- package/dist/types.d.mts +1 -1
- package/package.json +3 -6
|
@@ -25,15 +25,88 @@ declare class SchemaGrammar {
|
|
|
25
25
|
protected compileIndex(tableName: string, index: IndexConstraint): CompiledSql;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Schema builder for creating and managing database tables.
|
|
30
|
+
* Provides methods for table creation, alteration, and inspection.
|
|
31
|
+
*/
|
|
28
32
|
declare class Schema {
|
|
29
33
|
private readonly connection;
|
|
30
34
|
private readonly grammar;
|
|
35
|
+
/**
|
|
36
|
+
* Creates a new Schema instance.
|
|
37
|
+
*
|
|
38
|
+
* @param connection - The database connection to use for schema operations
|
|
39
|
+
* @param grammar - The schema grammar for generating SQL statements
|
|
40
|
+
*/
|
|
31
41
|
constructor(connection: Connection | null, grammar: SchemaGrammar);
|
|
42
|
+
/**
|
|
43
|
+
* Creates a new table in the database.
|
|
44
|
+
*
|
|
45
|
+
* @param tableName - The name of the table to create
|
|
46
|
+
* @param structMethod - A callback function that receives a Blueprint to define table structure
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* await schema.createTable('users', (table) => {
|
|
50
|
+
* table.increments('id');
|
|
51
|
+
* table.string('name');
|
|
52
|
+
* table.string('email').unique();
|
|
53
|
+
* table.timestamps();
|
|
54
|
+
* });
|
|
55
|
+
*/
|
|
32
56
|
createTable(tableName: string, structMethod: (blueprint: Blueprint) => void): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Modifies an existing table structure.
|
|
59
|
+
*
|
|
60
|
+
* @param tableName - The name of the table to alter
|
|
61
|
+
* @param structMethod - A callback function that receives a Blueprint to define modifications
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* await schema.alterTable('users', (table) => {
|
|
65
|
+
* table.string('phone').nullable();
|
|
66
|
+
* table.dropColumn('old_field');
|
|
67
|
+
* });
|
|
68
|
+
*/
|
|
33
69
|
alterTable(tableName: string, structMethod: (blueprint: Blueprint) => void): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Drops (deletes) a table from the database.
|
|
72
|
+
*
|
|
73
|
+
* @param tableName - The name of the table to drop
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* await schema.dropTable('old_users');
|
|
77
|
+
*/
|
|
34
78
|
dropTable(tableName: string): Promise<void>;
|
|
79
|
+
/**
|
|
80
|
+
* Drops a table from the database if it exists.
|
|
81
|
+
* Safe to call even if the table doesn't exist.
|
|
82
|
+
*
|
|
83
|
+
* @param tableName - The name of the table to drop
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* await schema.dropTableIfExists('temp_table');
|
|
87
|
+
*/
|
|
35
88
|
dropTableIfExists(tableName: string): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Retrieves a list of all tables in the database.
|
|
91
|
+
*
|
|
92
|
+
* @returns A promise that resolves to an array of table information
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* const allTables = await schema.tables();
|
|
96
|
+
* console.log(allTables);
|
|
97
|
+
*/
|
|
36
98
|
tables(): Promise<any>;
|
|
99
|
+
/**
|
|
100
|
+
* Checks if a table exists in the database.
|
|
101
|
+
*
|
|
102
|
+
* @param table_name - The name of the table to check
|
|
103
|
+
* @returns A promise that resolves to true if the table exists, false otherwise
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* if (await schema.tableExists('users')) {
|
|
107
|
+
* console.log('Users table exists');
|
|
108
|
+
* }
|
|
109
|
+
*/
|
|
37
110
|
tableExists(table_name: string): Promise<boolean>;
|
|
38
111
|
}
|
|
39
112
|
|
package/dist/Blueprint.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { B as Blueprint, a as Column, C as ColumnPropertiesType, F as ForeignKeyConstraint, I as IndexConstraint } from './Blueprint-
|
|
1
|
+
export { B as Blueprint, a as Column, C as ColumnPropertiesType, F as ForeignKeyConstraint, I as IndexConstraint } from './Blueprint-D3WHeqRS.mjs';
|
|
2
2
|
import '@devbro/neko-helper';
|
package/dist/Connection.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { b as Connection, c as connection_events } from './Blueprint-
|
|
1
|
+
export { b as Connection, c as connection_events } from './Blueprint-D3WHeqRS.mjs';
|
|
2
2
|
import '@devbro/neko-helper';
|
package/dist/Expression.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { E as Expression } from './Blueprint-
|
|
1
|
+
export { E as Expression } from './Blueprint-D3WHeqRS.mjs';
|
|
2
2
|
import '@devbro/neko-helper';
|
package/dist/Migration.d.mts
CHANGED
package/dist/Query.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { d as Query, Q as QueryParts } from './Blueprint-
|
|
1
|
+
export { d as Query, Q as QueryParts } from './Blueprint-D3WHeqRS.mjs';
|
|
2
2
|
import '@devbro/neko-helper';
|
package/dist/QueryGrammar.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { e as QueryGrammar } from './Blueprint-
|
|
1
|
+
export { e as QueryGrammar } from './Blueprint-D3WHeqRS.mjs';
|
|
2
2
|
import '@devbro/neko-helper';
|
package/dist/Schema.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { S as Schema } from './Blueprint-
|
|
1
|
+
export { S as Schema } from './Blueprint-D3WHeqRS.mjs';
|
|
2
2
|
import '@devbro/neko-helper';
|
package/dist/Schema.mjs
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
3
|
import { Blueprint } from "./Blueprint.mjs";
|
|
4
|
-
import { SchemaGrammar } from "./SchemaGrammar.mjs";
|
|
5
4
|
class Schema {
|
|
5
|
+
/**
|
|
6
|
+
* Creates a new Schema instance.
|
|
7
|
+
*
|
|
8
|
+
* @param connection - The database connection to use for schema operations
|
|
9
|
+
* @param grammar - The schema grammar for generating SQL statements
|
|
10
|
+
*/
|
|
6
11
|
constructor(connection, grammar) {
|
|
7
12
|
this.connection = connection;
|
|
8
13
|
this.grammar = grammar;
|
|
@@ -10,37 +15,94 @@ class Schema {
|
|
|
10
15
|
static {
|
|
11
16
|
__name(this, "Schema");
|
|
12
17
|
}
|
|
18
|
+
/**
|
|
19
|
+
* Creates a new table in the database.
|
|
20
|
+
*
|
|
21
|
+
* @param tableName - The name of the table to create
|
|
22
|
+
* @param structMethod - A callback function that receives a Blueprint to define table structure
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* await schema.createTable('users', (table) => {
|
|
26
|
+
* table.increments('id');
|
|
27
|
+
* table.string('name');
|
|
28
|
+
* table.string('email').unique();
|
|
29
|
+
* table.timestamps();
|
|
30
|
+
* });
|
|
31
|
+
*/
|
|
13
32
|
async createTable(tableName, structMethod) {
|
|
14
33
|
const blueprint = new Blueprint();
|
|
15
34
|
blueprint.setTableName(tableName, false);
|
|
16
35
|
structMethod(blueprint);
|
|
17
|
-
const
|
|
18
|
-
const sql = grammar.toSql(blueprint);
|
|
36
|
+
const sql = this.grammar.toSql(blueprint);
|
|
19
37
|
await this.connection?.runQuery({ sql, parts: [], bindings: [] });
|
|
20
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* Modifies an existing table structure.
|
|
41
|
+
*
|
|
42
|
+
* @param tableName - The name of the table to alter
|
|
43
|
+
* @param structMethod - A callback function that receives a Blueprint to define modifications
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* await schema.alterTable('users', (table) => {
|
|
47
|
+
* table.string('phone').nullable();
|
|
48
|
+
* table.dropColumn('old_field');
|
|
49
|
+
* });
|
|
50
|
+
*/
|
|
21
51
|
async alterTable(tableName, structMethod) {
|
|
22
52
|
const blueprint = new Blueprint();
|
|
23
53
|
blueprint.setTableName(tableName, true);
|
|
24
54
|
structMethod(blueprint);
|
|
25
|
-
const
|
|
26
|
-
const sql = grammar.toSql(blueprint);
|
|
55
|
+
const sql = this.grammar.toSql(blueprint);
|
|
27
56
|
await this.connection?.runQuery({ sql, parts: [], bindings: [] });
|
|
28
57
|
}
|
|
58
|
+
/**
|
|
59
|
+
* Drops (deletes) a table from the database.
|
|
60
|
+
*
|
|
61
|
+
* @param tableName - The name of the table to drop
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* await schema.dropTable('old_users');
|
|
65
|
+
*/
|
|
29
66
|
async dropTable(tableName) {
|
|
30
|
-
|
|
31
|
-
await this.connection?.runQuery(grammar.compileDropTable(tableName));
|
|
67
|
+
await this.connection?.runQuery(this.grammar.compileDropTable(tableName));
|
|
32
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Drops a table from the database if it exists.
|
|
71
|
+
* Safe to call even if the table doesn't exist.
|
|
72
|
+
*
|
|
73
|
+
* @param tableName - The name of the table to drop
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* await schema.dropTableIfExists('temp_table');
|
|
77
|
+
*/
|
|
33
78
|
async dropTableIfExists(tableName) {
|
|
34
|
-
|
|
35
|
-
await this.connection?.runQuery(grammar.compileDropTableIfExists(tableName));
|
|
79
|
+
await this.connection?.runQuery(this.grammar.compileDropTableIfExists(tableName));
|
|
36
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Retrieves a list of all tables in the database.
|
|
83
|
+
*
|
|
84
|
+
* @returns A promise that resolves to an array of table information
|
|
85
|
+
*
|
|
86
|
+
* @example
|
|
87
|
+
* const allTables = await schema.tables();
|
|
88
|
+
* console.log(allTables);
|
|
89
|
+
*/
|
|
37
90
|
async tables() {
|
|
38
|
-
|
|
39
|
-
return await this.connection?.runQuery(grammar.compileTables());
|
|
91
|
+
return await this.connection?.runQuery(this.grammar.compileTables());
|
|
40
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Checks if a table exists in the database.
|
|
95
|
+
*
|
|
96
|
+
* @param table_name - The name of the table to check
|
|
97
|
+
* @returns A promise that resolves to true if the table exists, false otherwise
|
|
98
|
+
*
|
|
99
|
+
* @example
|
|
100
|
+
* if (await schema.tableExists('users')) {
|
|
101
|
+
* console.log('Users table exists');
|
|
102
|
+
* }
|
|
103
|
+
*/
|
|
41
104
|
async tableExists(table_name) {
|
|
42
|
-
|
|
43
|
-
return (await this.connection?.runQuery(grammar.compileTableExists(table_name)))[0]["exists"];
|
|
105
|
+
return (await this.connection?.runQuery(this.grammar.compileTableExists(table_name)))[0]["exists"];
|
|
44
106
|
}
|
|
45
107
|
}
|
|
46
108
|
export {
|
package/dist/Schema.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Schema.mts"],"sourcesContent":["import { Blueprint } from './Blueprint.mjs';\nimport { Connection } from './Connection.mjs';\nimport { SchemaGrammar } from './SchemaGrammar.mjs';\n\nexport class Schema {\n constructor(\n private readonly connection: Connection | null,\n private readonly grammar: SchemaGrammar\n ) {}\n\n async createTable(tableName: string, structMethod: (blueprint: Blueprint) => void) {\n const blueprint = new Blueprint();\n blueprint.setTableName(tableName, false);\n structMethod(blueprint);\n\n const
|
|
1
|
+
{"version":3,"sources":["../src/Schema.mts"],"sourcesContent":["import { Blueprint } from './Blueprint.mjs';\nimport { Connection } from './Connection.mjs';\nimport { SchemaGrammar } from './SchemaGrammar.mjs';\n\n/**\n * Schema builder for creating and managing database tables.\n * Provides methods for table creation, alteration, and inspection.\n */\nexport class Schema {\n /**\n * Creates a new Schema instance.\n *\n * @param connection - The database connection to use for schema operations\n * @param grammar - The schema grammar for generating SQL statements\n */\n constructor(\n private readonly connection: Connection | null,\n private readonly grammar: SchemaGrammar\n ) {}\n\n /**\n * Creates a new table in the database.\n *\n * @param tableName - The name of the table to create\n * @param structMethod - A callback function that receives a Blueprint to define table structure\n *\n * @example\n * await schema.createTable('users', (table) => {\n * table.increments('id');\n * table.string('name');\n * table.string('email').unique();\n * table.timestamps();\n * });\n */\n async createTable(tableName: string, structMethod: (blueprint: Blueprint) => void) {\n const blueprint = new Blueprint();\n blueprint.setTableName(tableName, false);\n structMethod(blueprint);\n\n const sql = this.grammar.toSql(blueprint);\n await this.connection?.runQuery({ sql, parts: [], bindings: [] });\n }\n\n /**\n * Modifies an existing table structure.\n *\n * @param tableName - The name of the table to alter\n * @param structMethod - A callback function that receives a Blueprint to define modifications\n *\n * @example\n * await schema.alterTable('users', (table) => {\n * table.string('phone').nullable();\n * table.dropColumn('old_field');\n * });\n */\n async alterTable(tableName: string, structMethod: (blueprint: Blueprint) => void) {\n const blueprint = new Blueprint();\n blueprint.setTableName(tableName, true);\n structMethod(blueprint);\n\n const sql = this.grammar.toSql(blueprint);\n await this.connection?.runQuery({ sql, parts: [], bindings: [] });\n }\n\n /**\n * Drops (deletes) a table from the database.\n *\n * @param tableName - The name of the table to drop\n *\n * @example\n * await schema.dropTable('old_users');\n */\n async dropTable(tableName: string) {\n await this.connection?.runQuery(this.grammar.compileDropTable(tableName));\n }\n\n /**\n * Drops a table from the database if it exists.\n * Safe to call even if the table doesn't exist.\n *\n * @param tableName - The name of the table to drop\n *\n * @example\n * await schema.dropTableIfExists('temp_table');\n */\n async dropTableIfExists(tableName: string) {\n await this.connection?.runQuery(this.grammar.compileDropTableIfExists(tableName));\n }\n\n /**\n * Retrieves a list of all tables in the database.\n *\n * @returns A promise that resolves to an array of table information\n *\n * @example\n * const allTables = await schema.tables();\n * console.log(allTables);\n */\n async tables() {\n return await this.connection?.runQuery(this.grammar.compileTables());\n }\n\n /**\n * Checks if a table exists in the database.\n *\n * @param table_name - The name of the table to check\n * @returns A promise that resolves to true if the table exists, false otherwise\n *\n * @example\n * if (await schema.tableExists('users')) {\n * console.log('Users table exists');\n * }\n */\n async tableExists(table_name: string): Promise<boolean> {\n return (await this.connection?.runQuery(this.grammar.compileTableExists(table_name)))[0][\n 'exists'\n ];\n }\n}\n"],"mappings":";;AAAA,SAAS,iBAAiB;AAQnB,MAAM,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOlB,YACmB,YACA,SACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAlBL,OAQoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0BlB,MAAM,YAAY,WAAmB,cAA8C;AACjF,UAAM,YAAY,IAAI,UAAU;AAChC,cAAU,aAAa,WAAW,KAAK;AACvC,iBAAa,SAAS;AAEtB,UAAM,MAAM,KAAK,QAAQ,MAAM,SAAS;AACxC,UAAM,KAAK,YAAY,SAAS,EAAE,KAAK,OAAO,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,WAAW,WAAmB,cAA8C;AAChF,UAAM,YAAY,IAAI,UAAU;AAChC,cAAU,aAAa,WAAW,IAAI;AACtC,iBAAa,SAAS;AAEtB,UAAM,MAAM,KAAK,QAAQ,MAAM,SAAS;AACxC,UAAM,KAAK,YAAY,SAAS,EAAE,KAAK,OAAO,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC;AAAA,EAClE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,UAAU,WAAmB;AACjC,UAAM,KAAK,YAAY,SAAS,KAAK,QAAQ,iBAAiB,SAAS,CAAC;AAAA,EAC1E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,kBAAkB,WAAmB;AACzC,UAAM,KAAK,YAAY,SAAS,KAAK,QAAQ,yBAAyB,SAAS,CAAC;AAAA,EAClF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,SAAS;AACb,WAAO,MAAM,KAAK,YAAY,SAAS,KAAK,QAAQ,cAAc,CAAC;AAAA,EACrE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,YAAY,YAAsC;AACtD,YAAQ,MAAM,KAAK,YAAY,SAAS,KAAK,QAAQ,mBAAmB,UAAU,CAAC,GAAG,CAAC,EACrF,QACF;AAAA,EACF;AACF;","names":[]}
|
package/dist/SchemaGrammar.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { f as SchemaGrammar } from './Blueprint-
|
|
1
|
+
export { f as SchemaGrammar } from './Blueprint-D3WHeqRS.mjs';
|
|
2
2
|
import '@devbro/neko-helper';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { PostgresqlConnection } from './postgresql/PostgresqlConnection.mjs';
|
|
2
2
|
export { PostgresqlQueryGrammar } from './postgresql/PostgresqlQueryGrammar.mjs';
|
|
3
3
|
export { PostgresqlSchemaGrammar } from './postgresql/PostgresqlSchemaGrammar.mjs';
|
|
4
|
-
import '../Blueprint-
|
|
4
|
+
import '../Blueprint-D3WHeqRS.mjs';
|
|
5
5
|
import '@devbro/neko-helper';
|
|
6
6
|
import 'pg';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PostgresqlQueryGrammar } from './PostgresqlQueryGrammar.mjs';
|
|
2
2
|
import { PostgresqlSchemaGrammar } from './PostgresqlSchemaGrammar.mjs';
|
|
3
|
-
import { b as Connection, c as connection_events, m as CompiledSql, d as Query, S as Schema } from '../../Blueprint-
|
|
3
|
+
import { b as Connection, c as connection_events, m as CompiledSql, d as Query, S as Schema } from '../../Blueprint-D3WHeqRS.mjs';
|
|
4
4
|
import { PoolClient, Pool, PoolConfig } from 'pg';
|
|
5
5
|
import '@devbro/neko-helper';
|
|
6
6
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { e as QueryGrammar, d as Query, m as CompiledSql, P as Parameter } from '../../Blueprint-
|
|
1
|
+
import { e as QueryGrammar, d as Query, m as CompiledSql, P as Parameter } from '../../Blueprint-D3WHeqRS.mjs';
|
|
2
2
|
import '@devbro/neko-helper';
|
|
3
3
|
|
|
4
4
|
declare class PostgresqlQueryGrammar extends QueryGrammar {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { PostgresqlConnection } from './PostgresqlConnection.mjs';
|
|
2
2
|
export { PostgresqlQueryGrammar } from './PostgresqlQueryGrammar.mjs';
|
|
3
3
|
export { PostgresqlSchemaGrammar } from './PostgresqlSchemaGrammar.mjs';
|
|
4
|
-
import '../../Blueprint-
|
|
4
|
+
import '../../Blueprint-D3WHeqRS.mjs';
|
|
5
5
|
import '@devbro/neko-helper';
|
|
6
6
|
import 'pg';
|
package/dist/index.d.mts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { PostgresqlConnection } from './databases/postgresql/PostgresqlConnection.mjs';
|
|
2
2
|
export { PostgresqlQueryGrammar } from './databases/postgresql/PostgresqlQueryGrammar.mjs';
|
|
3
3
|
export { PostgresqlSchemaGrammar } from './databases/postgresql/PostgresqlSchemaGrammar.mjs';
|
|
4
|
-
export { B as Blueprint, a as Column, C as ColumnPropertiesType, m as CompiledSql, b as Connection, F as ForeignKeyConstraint, I as IndexConstraint, J as JoinCondition, P as Parameter, d as Query, e as QueryGrammar, Q as QueryParts, S as Schema, f as SchemaGrammar, c as connection_events, n as havingType, o as joinType, s as selectType, w as whereBasic, i as whereNested, k as whereNull, g as whereOp, h as whereOpColumn, j as whereRaw, l as whereType } from './Blueprint-
|
|
4
|
+
export { B as Blueprint, a as Column, C as ColumnPropertiesType, m as CompiledSql, b as Connection, F as ForeignKeyConstraint, I as IndexConstraint, J as JoinCondition, P as Parameter, d as Query, e as QueryGrammar, Q as QueryParts, S as Schema, f as SchemaGrammar, c as connection_events, n as havingType, o as joinType, s as selectType, w as whereBasic, i as whereNested, k as whereNull, g as whereOp, h as whereOpColumn, j as whereRaw, l as whereType } from './Blueprint-D3WHeqRS.mjs';
|
|
5
5
|
export { Migration } from './Migration.mjs';
|
|
6
6
|
import 'pg';
|
|
7
7
|
import '@devbro/neko-helper';
|
package/dist/index.js
CHANGED
|
@@ -863,6 +863,112 @@ var Blueprint = class {
|
|
|
863
863
|
}
|
|
864
864
|
};
|
|
865
865
|
|
|
866
|
+
// src/Schema.mts
|
|
867
|
+
var Schema = class {
|
|
868
|
+
/**
|
|
869
|
+
* Creates a new Schema instance.
|
|
870
|
+
*
|
|
871
|
+
* @param connection - The database connection to use for schema operations
|
|
872
|
+
* @param grammar - The schema grammar for generating SQL statements
|
|
873
|
+
*/
|
|
874
|
+
constructor(connection, grammar) {
|
|
875
|
+
this.connection = connection;
|
|
876
|
+
this.grammar = grammar;
|
|
877
|
+
}
|
|
878
|
+
static {
|
|
879
|
+
__name(this, "Schema");
|
|
880
|
+
}
|
|
881
|
+
/**
|
|
882
|
+
* Creates a new table in the database.
|
|
883
|
+
*
|
|
884
|
+
* @param tableName - The name of the table to create
|
|
885
|
+
* @param structMethod - A callback function that receives a Blueprint to define table structure
|
|
886
|
+
*
|
|
887
|
+
* @example
|
|
888
|
+
* await schema.createTable('users', (table) => {
|
|
889
|
+
* table.increments('id');
|
|
890
|
+
* table.string('name');
|
|
891
|
+
* table.string('email').unique();
|
|
892
|
+
* table.timestamps();
|
|
893
|
+
* });
|
|
894
|
+
*/
|
|
895
|
+
async createTable(tableName, structMethod) {
|
|
896
|
+
const blueprint = new Blueprint();
|
|
897
|
+
blueprint.setTableName(tableName, false);
|
|
898
|
+
structMethod(blueprint);
|
|
899
|
+
const sql = this.grammar.toSql(blueprint);
|
|
900
|
+
await this.connection?.runQuery({ sql, parts: [], bindings: [] });
|
|
901
|
+
}
|
|
902
|
+
/**
|
|
903
|
+
* Modifies an existing table structure.
|
|
904
|
+
*
|
|
905
|
+
* @param tableName - The name of the table to alter
|
|
906
|
+
* @param structMethod - A callback function that receives a Blueprint to define modifications
|
|
907
|
+
*
|
|
908
|
+
* @example
|
|
909
|
+
* await schema.alterTable('users', (table) => {
|
|
910
|
+
* table.string('phone').nullable();
|
|
911
|
+
* table.dropColumn('old_field');
|
|
912
|
+
* });
|
|
913
|
+
*/
|
|
914
|
+
async alterTable(tableName, structMethod) {
|
|
915
|
+
const blueprint = new Blueprint();
|
|
916
|
+
blueprint.setTableName(tableName, true);
|
|
917
|
+
structMethod(blueprint);
|
|
918
|
+
const sql = this.grammar.toSql(blueprint);
|
|
919
|
+
await this.connection?.runQuery({ sql, parts: [], bindings: [] });
|
|
920
|
+
}
|
|
921
|
+
/**
|
|
922
|
+
* Drops (deletes) a table from the database.
|
|
923
|
+
*
|
|
924
|
+
* @param tableName - The name of the table to drop
|
|
925
|
+
*
|
|
926
|
+
* @example
|
|
927
|
+
* await schema.dropTable('old_users');
|
|
928
|
+
*/
|
|
929
|
+
async dropTable(tableName) {
|
|
930
|
+
await this.connection?.runQuery(this.grammar.compileDropTable(tableName));
|
|
931
|
+
}
|
|
932
|
+
/**
|
|
933
|
+
* Drops a table from the database if it exists.
|
|
934
|
+
* Safe to call even if the table doesn't exist.
|
|
935
|
+
*
|
|
936
|
+
* @param tableName - The name of the table to drop
|
|
937
|
+
*
|
|
938
|
+
* @example
|
|
939
|
+
* await schema.dropTableIfExists('temp_table');
|
|
940
|
+
*/
|
|
941
|
+
async dropTableIfExists(tableName) {
|
|
942
|
+
await this.connection?.runQuery(this.grammar.compileDropTableIfExists(tableName));
|
|
943
|
+
}
|
|
944
|
+
/**
|
|
945
|
+
* Retrieves a list of all tables in the database.
|
|
946
|
+
*
|
|
947
|
+
* @returns A promise that resolves to an array of table information
|
|
948
|
+
*
|
|
949
|
+
* @example
|
|
950
|
+
* const allTables = await schema.tables();
|
|
951
|
+
* console.log(allTables);
|
|
952
|
+
*/
|
|
953
|
+
async tables() {
|
|
954
|
+
return await this.connection?.runQuery(this.grammar.compileTables());
|
|
955
|
+
}
|
|
956
|
+
/**
|
|
957
|
+
* Checks if a table exists in the database.
|
|
958
|
+
*
|
|
959
|
+
* @param table_name - The name of the table to check
|
|
960
|
+
* @returns A promise that resolves to true if the table exists, false otherwise
|
|
961
|
+
*
|
|
962
|
+
* @example
|
|
963
|
+
* if (await schema.tableExists('users')) {
|
|
964
|
+
* console.log('Users table exists');
|
|
965
|
+
* }
|
|
966
|
+
*/
|
|
967
|
+
async tableExists(table_name) {
|
|
968
|
+
return (await this.connection?.runQuery(this.grammar.compileTableExists(table_name)))[0]["exists"];
|
|
969
|
+
}
|
|
970
|
+
};
|
|
971
|
+
|
|
866
972
|
// src/SchemaGrammar.mts
|
|
867
973
|
var SchemaGrammar = class {
|
|
868
974
|
static {
|
|
@@ -1070,49 +1176,6 @@ var SchemaGrammar = class {
|
|
|
1070
1176
|
}
|
|
1071
1177
|
};
|
|
1072
1178
|
|
|
1073
|
-
// src/Schema.mts
|
|
1074
|
-
var Schema = class {
|
|
1075
|
-
constructor(connection, grammar) {
|
|
1076
|
-
this.connection = connection;
|
|
1077
|
-
this.grammar = grammar;
|
|
1078
|
-
}
|
|
1079
|
-
static {
|
|
1080
|
-
__name(this, "Schema");
|
|
1081
|
-
}
|
|
1082
|
-
async createTable(tableName, structMethod) {
|
|
1083
|
-
const blueprint = new Blueprint();
|
|
1084
|
-
blueprint.setTableName(tableName, false);
|
|
1085
|
-
structMethod(blueprint);
|
|
1086
|
-
const grammar = new SchemaGrammar();
|
|
1087
|
-
const sql = grammar.toSql(blueprint);
|
|
1088
|
-
await this.connection?.runQuery({ sql, parts: [], bindings: [] });
|
|
1089
|
-
}
|
|
1090
|
-
async alterTable(tableName, structMethod) {
|
|
1091
|
-
const blueprint = new Blueprint();
|
|
1092
|
-
blueprint.setTableName(tableName, true);
|
|
1093
|
-
structMethod(blueprint);
|
|
1094
|
-
const grammar = new SchemaGrammar();
|
|
1095
|
-
const sql = grammar.toSql(blueprint);
|
|
1096
|
-
await this.connection?.runQuery({ sql, parts: [], bindings: [] });
|
|
1097
|
-
}
|
|
1098
|
-
async dropTable(tableName) {
|
|
1099
|
-
const grammar = new SchemaGrammar();
|
|
1100
|
-
await this.connection?.runQuery(grammar.compileDropTable(tableName));
|
|
1101
|
-
}
|
|
1102
|
-
async dropTableIfExists(tableName) {
|
|
1103
|
-
const grammar = new SchemaGrammar();
|
|
1104
|
-
await this.connection?.runQuery(grammar.compileDropTableIfExists(tableName));
|
|
1105
|
-
}
|
|
1106
|
-
async tables() {
|
|
1107
|
-
const grammar = new SchemaGrammar();
|
|
1108
|
-
return await this.connection?.runQuery(grammar.compileTables());
|
|
1109
|
-
}
|
|
1110
|
-
async tableExists(table_name) {
|
|
1111
|
-
const grammar = new SchemaGrammar();
|
|
1112
|
-
return (await this.connection?.runQuery(grammar.compileTableExists(table_name)))[0]["exists"];
|
|
1113
|
-
}
|
|
1114
|
-
};
|
|
1115
|
-
|
|
1116
1179
|
// src/databases/postgresql/PostgresqlSchemaGrammar.mts
|
|
1117
1180
|
var PostgresqlSchemaGrammar = class extends SchemaGrammar {
|
|
1118
1181
|
static {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/Connection.mts","../src/databases/postgresql/PostgresqlConnection.mts","../src/Query.mts","../src/QueryGrammar.mts","../src/databases/postgresql/PostgresqlQueryGrammar.mts","../src/Expression.mts","../src/Blueprint.mts","../src/SchemaGrammar.mts","../src/Schema.mts","../src/databases/postgresql/PostgresqlSchemaGrammar.mts","../src/Migration.mts"],"sourcesContent":["export * from './databases/index.mjs';\nexport * from './Blueprint.mjs';\nexport * from './Connection.mjs';\nexport * from './Query.mjs';\nexport * from './QueryGrammar.mjs';\nexport * from './Schema.mjs';\nexport * from './SchemaGrammar.mjs';\nexport * from './types.mjs';\nexport * from './Migration.mjs';\n","import { Schema } from './Schema.mjs';\nimport { Query } from './Query.mjs';\nimport { CompiledSql } from './types.mjs';\nimport { QueryGrammar } from './QueryGrammar.mjs';\nimport { SchemaGrammar } from './SchemaGrammar.mjs';\nimport { EventEmittor } from '@devbro/neko-helper';\n\nexport type connection_events = 'connect' | 'disconnect' | 'query' | 'error';\nexport abstract class Connection implements EventEmittor<connection_events[]> {\n abstract on(event: connection_events, listener: (...args: any[]) => void): this;\n abstract off(event: connection_events, listener: (...args: any[]) => void): this;\n abstract emit(event: connection_events, ...args: any[]): Promise<boolean>;\n\n abstract isConnected(): boolean;\n abstract connect(): Promise<boolean>;\n abstract runQuery(sql: CompiledSql | string): Promise<any>;\n abstract runCursor(sql: CompiledSql): Promise<any>;\n abstract disconnect(): Promise<boolean>;\n abstract getQuery(): Query;\n abstract getSchema(): Schema;\n abstract beginTransaction(): Promise<void>;\n abstract commit(): Promise<void>;\n abstract rollback(): Promise<void>;\n abstract getQueryGrammar(): QueryGrammar;\n abstract getSchemaGrammar(): SchemaGrammar;\n abstract createDatabase(name: string): Promise<void>;\n abstract dropDatabase(name: string): Promise<void>;\n abstract listDatabases(): Promise<string[]>;\n abstract existsDatabase(name: string): Promise<boolean>;\n}\n","import { connection_events, Connection as ConnectionAbs } from '../../Connection.mjs';\nimport { Client, PoolClient, PoolConfig } from 'pg';\nimport { Pool } from 'pg';\nimport { CompiledSql } from '../../types.mjs';\nimport { Query } from '../../Query.mjs';\nimport { PostgresqlQueryGrammar } from './PostgresqlQueryGrammar.mjs';\nimport { Schema } from '../../Schema.mjs';\nimport { PostgresqlSchemaGrammar } from './PostgresqlSchemaGrammar.mjs';\nimport Cursor from 'pg-cursor';\nimport { EventManager } from '@devbro/neko-helper';\n\nexport class PostgresqlConnection extends ConnectionAbs {\n private eventManager = new EventManager();\n\n on(event: connection_events, listener: (...args: any[]) => void): this {\n this.eventManager.on(event, listener);\n return this;\n }\n off(event: connection_events, listener: (...args: any[]) => void): this {\n this.eventManager.off(event, listener);\n return this;\n }\n emit(event: connection_events, ...args: any[]): Promise<boolean> {\n return this.eventManager.emit(event, ...args);\n }\n\n connection: PoolClient | undefined;\n static pool: Pool;\n\n static defaults: PoolConfig = {\n port: 5432,\n ssl: false,\n max: 20,\n idleTimeoutMillis: 1, // wait X milli seconds before closing an idle/released connection\n connectionTimeoutMillis: 30000, // wait up to 30 seconds to obtain a new connection\n maxUses: 7500,\n };\n\n constructor(params: PoolConfig) {\n super();\n if (!PostgresqlConnection.pool) {\n PostgresqlConnection.pool = new Pool({ ...PostgresqlConnection.defaults, ...params });\n }\n }\n async connect(): Promise<boolean> {\n this.eventManager.emit('connect');\n this.connection = await PostgresqlConnection.pool.connect();\n return true;\n }\n async runQuery(sql: CompiledSql | string): Promise<any> {\n if( typeof sql === 'string') {\n sql = { sql: sql, bindings: [], parts: [sql] };\n }\n let counter = 1;\n let sql2 = sql.sql;\n if (sql.parts && sql.parts.length > 0) {\n sql2 = sql.parts.map((v) => (v === '?' ? '$' + counter++ : v)).join(' ');\n }\n\n this.eventManager.emit('query', { sql: sql2, bindings: sql.bindings });\n\n if (!this.isConnected()) {\n await this.connect();\n }\n const result = await this.connection!.query(sql2, sql.bindings);\n return result?.rows;\n }\n\n async runCursor(sql: CompiledSql): Promise<any> {\n return this.connection?.query(new Cursor(sql.sql, sql.bindings));\n }\n\n async disconnect(): Promise<boolean> {\n if (this.connection === undefined) {\n return true;\n }\n await this.connection?.release();\n this.connection = undefined;\n this.eventManager.emit('disconnect');\n return true;\n }\n\n getQuery(): Query {\n return new Query(this, new PostgresqlQueryGrammar());\n }\n\n getSchema(): Schema {\n return new Schema(this, new PostgresqlSchemaGrammar());\n }\n\n getQueryGrammar(): PostgresqlQueryGrammar {\n return new PostgresqlQueryGrammar();\n }\n getSchemaGrammar(): PostgresqlSchemaGrammar {\n return new PostgresqlSchemaGrammar();\n }\n\n async beginTransaction(): Promise<void> {\n await this.runQuery({ sql: 'BEGIN', bindings: [], parts: ['BEGIN'] });\n }\n\n async commit(): Promise<void> {\n await this.runQuery({ sql: 'COMMIT', bindings: [], parts: ['COMMIT'] });\n }\n\n async rollback(): Promise<void> {\n await this.runQuery({ sql: 'ROLLBACK', bindings: [], parts: ['ROLLBACK'] });\n }\n\n static async destroy(): Promise<void> {\n PostgresqlConnection.pool.end();\n return;\n }\n\n isConnected(): boolean {\n return this.connection !== undefined;\n }\n\n /**\n * Validates and escapes a PostgreSQL identifier (database name, table name, etc.)\n * Uses a whitelist approach to ensure only safe characters are allowed\n */\n private validateAndEscapeIdentifier(name: string): string {\n // PostgreSQL identifiers can contain: letters, digits, underscores, and dollar signs\n // They must start with a letter or underscore\n const validIdentifierPattern = /^[a-zA-Z_][a-zA-Z0-9_$]*$/;\n\n if (!validIdentifierPattern.test(name)) {\n throw new Error(\n `Invalid identifier: \"${name}\". Identifiers must start with a letter or underscore and contain only letters, digits, underscores, and dollar signs.`\n );\n }\n\n // PostgreSQL reserved keywords that should be quoted\n const reservedKeywords = new Set([\n 'user',\n 'table',\n 'database',\n 'order',\n 'group',\n 'select',\n 'insert',\n 'update',\n 'delete',\n ]);\n\n // Quote the identifier if it's a reserved keyword or contains uppercase letters\n if (reservedKeywords.has(name.toLowerCase()) || name !== name.toLowerCase()) {\n // Escape any double quotes in the name\n const escapedName = name.replace(/\"/g, '\"\"');\n return `\"${escapedName}\"`;\n }\n\n return name;\n }\n\n async createDatabase(name: string): Promise<void> {\n if (this.isConnected()) {\n throw new Error('Cannot create database while connected.');\n }\n\n let conn = new Client({\n ...PostgresqlConnection.pool.options,\n database: 'postgres',\n });\n await conn.connect();\n const safeName = this.validateAndEscapeIdentifier(name);\n await conn.query(`CREATE DATABASE ${safeName}`);\n await conn.end();\n }\n\n async dropDatabase(name: string): Promise<void> {\n if (this.isConnected()) {\n throw new Error('Cannot drop database while connected.');\n }\n\n let conn = new Client({\n ...PostgresqlConnection.pool.options,\n database: 'postgres', // connect to default 'postgres' database to drop others\n });\n await conn.connect();\n const safeName = this.validateAndEscapeIdentifier(name);\n await conn.query(`DROP DATABASE ${safeName}`);\n await conn.end();\n }\n\n async listDatabases(): Promise<string[]> {\n if (!this.isConnected()) {\n await this.connect();\n }\n const result = await this.connection!.query(\n 'SELECT datname FROM pg_database WHERE datistemplate = false ORDER BY datname'\n );\n return result.rows.map((row: any) => row.datname);\n }\n\n async existsDatabase(name: string): Promise<boolean> {\n if (!this.isConnected()) {\n await this.connect();\n }\n const result = await this.connection!.query('SELECT 1 FROM pg_database WHERE datname = $1', [\n name,\n ]);\n return result.rows.length > 0;\n }\n}\n","import { Connection } from './Connection.mjs';\nimport { QueryGrammar } from './QueryGrammar.mjs';\nimport {\n CompiledSql,\n JoinCondition,\n Parameter,\n selectType,\n whereType,\n havingType,\n joinType,\n} from './types.mjs';\n\nexport type QueryParts = {\n select: selectType[];\n table: string;\n join: joinType[];\n where: whereType[];\n groupBy: string[];\n having: havingType[];\n orderBy: string[];\n limit: number | null;\n offset: number | null;\n alias: string | null;\n};\n\nexport class Query {\n allowedOperations: string[] = ['=', '>', '<', '!=', 'like', 'ilike', 'in'];\n parts: QueryParts = {\n select: ['*'],\n table: '',\n join: [],\n where: [],\n groupBy: [],\n having: [],\n orderBy: [],\n limit: null,\n offset: null,\n alias: null,\n };\n\n constructor(\n public readonly connection: Connection | null,\n public readonly grammar: QueryGrammar\n ) {}\n\n table(tableName: string): this {\n this.parts.table = tableName;\n return this;\n }\n\n whereNested(\n func: (q: Query) => void,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ) {\n const subQuery = new Query(this.connection, this.grammar);\n func(subQuery);\n this.parts.where.push({\n type: 'nested',\n query: subQuery,\n joinCondition,\n negateCondition,\n });\n return this;\n }\n\n whereOp(\n column: string,\n operation: (typeof this.allowedOperations)[number],\n value: Parameter,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.where.push({\n type: 'operation',\n column,\n operation,\n value,\n joinCondition,\n negateCondition,\n });\n return this;\n }\n\n whereRaw(\n sql: string,\n bindings: Parameter[],\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.where.push({ type: 'raw', sql, bindings, joinCondition, negateCondition });\n return this;\n }\n\n whereColumn(\n column1: string,\n operation: (typeof this.allowedOperations)[number],\n column2: string,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.where.push({\n type: 'operationColumn',\n column1,\n operation,\n column2,\n joinCondition,\n negateCondition,\n });\n return this;\n }\n\n whereNull(\n column: string,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.where.push({ type: 'null', column, joinCondition, negateCondition });\n return this;\n }\n\n clearWhere(): this {\n this.parts.where = [];\n return this;\n }\n\n select(selects: selectType[]): this {\n this.parts.select = [...selects];\n return this;\n }\n\n groupBy(columns: string[]): this {\n this.parts.groupBy = [...columns];\n return this;\n }\n\n havingOp(\n column: string,\n operation: (typeof this.allowedOperations)[number],\n value: Parameter,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.having.push({\n type: 'operation',\n column,\n operation,\n value,\n joinCondition,\n negateCondition,\n });\n return this;\n }\n\n havingRaw(\n sql: string,\n bindings: Parameter[],\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.having.push({ type: 'raw', sql, bindings, joinCondition, negateCondition });\n return this;\n }\n\n orderBy(column: string, direction: 'asc' | 'desc' = 'asc'): this {\n this.parts.orderBy.push(`${column} ${direction}`);\n return this;\n }\n\n limit(limit: number): this {\n this.parts.limit = limit;\n return this;\n }\n\n offset(offset: number): this {\n this.parts.offset = offset;\n return this;\n }\n\n toSql(): CompiledSql {\n return this.grammar.toSql(this);\n }\n\n async get() {\n let sql = this.toSql();\n return await this.connection?.runQuery(sql);\n }\n\n async first() {\n let rc = await this.connection?.runQuery(this.toSql());\n if (rc && Array.isArray(rc) && rc.length > 0) {\n return rc[0];\n }\n return undefined;\n }\n\n async count(): Promise<number> {\n const csql: CompiledSql = this.grammar.compileCount(this);\n const result = await this.connection?.runQuery(csql);\n if (result && Array.isArray(result) && result.length > 0) {\n return parseInt(result[0]['count'], 10);\n }\n return 0;\n }\n\n async getCursor() {\n return await this.connection?.runCursor(this.toSql());\n }\n\n getConnection(): Connection | null {\n return this.connection;\n }\n\n async insert(data: Record<string, Parameter>) {\n const csql: CompiledSql = this.grammar.compileInsert(this, data);\n return await this.connection?.runQuery(csql);\n }\n\n async insertGetId(\n data: Record<string, Parameter>,\n options: { primaryKey: string[] } = { primaryKey: ['id'] }\n ) {\n const csql: CompiledSql = this.grammar.compileInsertGetId(this, data, options);\n return await this.connection?.runQuery(csql);\n }\n\n async update(data: Record<string, Parameter>) {\n const csql: CompiledSql = this.grammar.compileUpdate(this, data);\n return await this.connection?.runQuery(csql);\n }\n\n async upsert(data: Record<string, Parameter>, uniqueColumns: string[], updateColumns: string[]) {\n const csql: CompiledSql = this.grammar.compileUpsert(this, data, uniqueColumns, updateColumns);\n return await this.connection?.runQuery(csql);\n }\n\n async delete() {\n const csql: CompiledSql = this.grammar.compileDelete(this);\n return await this.connection?.runQuery(csql);\n }\n\n join(\n table: string | Query,\n type: joinType['type'],\n conditions: (whereType | { column1: string; column2: string })[]\n ): this {\n let conditions_corrected: whereType[] = [];\n for (const cond of conditions) {\n conditions_corrected.push({\n joinCondition: 'and',\n negateCondition: false,\n type: 'operationColumn',\n // @ts-ignore\n operation: '=',\n ...cond,\n });\n }\n this.parts.join.push({ type, table, conditions: conditions_corrected });\n return this;\n }\n\n innerJoin(\n table: Parameters<typeof this.join>[0],\n conditions: (whereType | { column1: string; column2: string })[]\n ): this {\n return this.join(table, 'inner', conditions);\n }\n\n leftJoin(\n table: Parameters<typeof this.join>[0],\n conditions: (whereType | { column1: string; column2: string })[]\n ): this {\n return this.join(table, 'left', conditions);\n }\n\n rightJoin(\n table: Parameters<typeof this.join>[0],\n conditions: (whereType | { column1: string; column2: string })[]\n ): this {\n return this.join(table, 'right', conditions);\n }\n\n fullJoin(\n table: Parameters<typeof this.join>[0],\n conditions: (whereType | { column1: string; column2: string })[]\n ): this {\n return this.join(table, 'full', conditions);\n }\n\n crossJoin(\n table: Parameters<typeof this.join>[0],\n conditions: (whereType | { column1: string; column2: string })[]\n ): this {\n return this.join(table, 'cross', conditions);\n }\n\n alias(alias: string): this {\n this.parts.alias = alias;\n return this;\n }\n}\n","import { Query } from './Query.mjs';\nimport {\n Parameter,\n CompiledSql,\n selectType,\n whereNull,\n whereOp,\n whereType,\n whereRaw,\n havingType,\n whereOpColumn,\n joinType,\n whereNested,\n} from './types.mjs';\n// @ts-ignore - no type definitions available for sql-tokenizer\nimport { sqlTokenizer } from 'sql-tokenizer';\nimport { Arr } from '@devbro/neko-helper';\n\nfunction toUpperFirst(str: string) {\n return str.substring(0, 1).toUpperCase() + str.substring(1);\n}\nexport abstract class QueryGrammar {\n sqlParts: string[] = [\n 'select',\n 'table',\n 'join',\n 'where',\n 'groupBy',\n 'having',\n 'orderBy',\n 'limit',\n 'offset',\n ];\n\n toSql(query: Query): CompiledSql {\n let rc = this.toSqlParts(query);\n rc.sql = this.joinArray(rc.parts);\n return rc;\n }\n\n toSqlParts(query: Query): CompiledSql {\n let parts: string[] = [];\n let bindings: Parameter[] = [];\n\n for (const part of this.sqlParts) {\n // @ts-ignore\n const funcName: keyof this = 'compile' + toUpperFirst(part);\n // @ts-ignore\n const r = this[funcName](query.parts[part]);\n bindings = [...bindings, ...r.bindings];\n parts = [...parts, ...r.parts];\n }\n\n return {\n sql: '',\n bindings,\n parts,\n };\n }\n\n compileCount(query: Query): CompiledSql {\n let sql = '';\n let bindings: Parameter[] = [];\n let parts: (string | number)[] = [];\n\n for (const part of this.sqlParts) {\n // @ts-ignore\n let parts2 = query.parts[part];\n if (part === 'select') {\n parts2 = ['count(*) as count'];\n }\n // @ts-ignore\n const funcName: keyof this = 'compile' + toUpperFirst(part);\n // @ts-ignore\n const r = this[funcName](parts2);\n bindings = [...bindings, ...r.bindings];\n parts = [...parts, ...r.parts];\n }\n return { sql, parts, bindings };\n }\n\n compileSelect(selects: selectType[]): CompiledSql {\n const parts = ['select'];\n selects.map((v) => {\n parts.push(v);\n parts.push(',');\n });\n parts.pop();\n\n return { sql: this.joinArray(parts), parts, bindings: [] };\n }\n\n joinArray(arr: (string | number)[]): string {\n let rc = '';\n let last: string | number = '';\n for (const a of arr) {\n if (a === ',') {\n rc += a;\n } else if (last === '(' || last === ' ' || a === ')') {\n rc += a;\n } else if (a === '') {\n rc += '';\n } else {\n rc += ' ' + a;\n }\n last = a;\n }\n\n return rc.trim();\n }\n\n compileTable(tableName: string): CompiledSql {\n let parts = [];\n if (tableName.length) {\n parts.push('from');\n parts.push(tableName);\n }\n\n return { sql: parts.join(' '), parts, bindings: [] };\n }\n\n compileJoin(joins: joinType[]): CompiledSql {\n let sql = '';\n let bindings: Parameter[] = [];\n let parts: (string | number)[] = [];\n\n for (const j of joins) {\n let table = '';\n let table_bindings: any[] = [];\n\n parts.push(j.type);\n parts.push('join');\n if (typeof j.table === 'string') {\n parts.push(j.table);\n } else {\n const subQuery = j.table;\n const { parts: parts2, bindings } = subQuery.toSql();\n parts = [...parts, '(', ...parts2, ')', 'as', subQuery.parts.alias || 'subquery'];\n table_bindings = bindings;\n }\n\n parts.push('on');\n\n const where = this.compileWhere(j.conditions);\n const where_parts = where.parts;\n where_parts.shift();\n parts.push('(');\n parts = [...parts, ...where_parts];\n parts.push(')');\n\n bindings = [...bindings, ...table_bindings, ...where.bindings];\n }\n\n return { sql, parts, bindings };\n }\n\n compileWhere(wheres: whereType[]): CompiledSql {\n let sql = '';\n let bindings: Parameter[] = [];\n let parts: (string | number)[] = [];\n\n for (const w of wheres) {\n sql += ' ' + w.joinCondition + ' ';\n parts.push(w.joinCondition);\n if (w.negateCondition) {\n sql += 'not ';\n parts.push('not');\n }\n const funcName = 'compileWhere' + toUpperFirst(w.type);\n // @ts-ignore\n const wh = this[funcName](w);\n sql += wh.sql;\n parts = parts.concat(wh.parts);\n bindings = [...bindings, ...wh.bindings];\n }\n\n if (sql.startsWith(' and ')) {\n sql = 'where ' + sql.substring(' and '.length);\n } else if (sql.startsWith(' or ')) {\n sql = 'where ' + sql.substring(' or '.length);\n }\n\n if (parts.length > 0) {\n parts[0] = 'where';\n }\n return { sql, parts, bindings };\n }\n\n compileWhereNested(w: whereNested): CompiledSql {\n const subQuery = w.query;\n let parts: (string | number)[] = [];\n const { sql, parts: parts2, bindings } = subQuery.grammar.compileWhere(subQuery.parts.where);\n let sql2 = sql.replace(/^where /, '');\n parts2.shift();\n parts.push('(');\n parts = parts.concat(parts2);\n parts.push(')');\n return {\n sql: `(${sql2})`,\n parts,\n bindings,\n };\n }\n\n compileWhereOperation(w: whereOp): CompiledSql {\n if (w.operation.toLowerCase() === 'in' && Array.isArray(w.value)) {\n return {\n sql: `${w.column} = ANY( ? )`,\n parts: [w.column, ' = ANY(', '?', ')'],\n bindings: [w.value],\n };\n }\n\n return {\n sql: `${w.column} ${w.operation} ?`,\n parts: [w.column, w.operation, '?'],\n bindings: [w.value],\n };\n }\n\n compileWhereOperationColumn(w: whereOpColumn): CompiledSql {\n return {\n sql: `${w.column1} ${w.operation} ${w.column2}`,\n parts: [w.column1, w.operation, w.column2],\n bindings: [],\n };\n }\n\n compileWhereRaw(w: whereRaw): CompiledSql {\n const tokenize = sqlTokenizer();\n\n return {\n sql: w.sql,\n parts: tokenize(w.sql).filter((t: string) => t !== ' '),\n bindings: w.bindings,\n };\n }\n\n compileOrderBy(orderBy: string[]): CompiledSql {\n let rc = '';\n let parts: (string | number)[] = [];\n if (orderBy.length) {\n rc = 'order by ' + orderBy.join(', ');\n parts.push('order by');\n parts = parts.concat(Arr.intersperse(orderBy, ','));\n }\n\n return { sql: rc, parts, bindings: [] };\n }\n\n compileLimit(limit: number | null): CompiledSql {\n let rc = '';\n let parts: (string | number)[] = [];\n if (limit !== null) {\n rc = 'limit ' + limit;\n parts.push('limit');\n parts.push(limit);\n }\n\n return { sql: rc, parts, bindings: [] };\n }\n\n compileOffset(offset: number | null): CompiledSql {\n let rc = '';\n let parts: (string | number)[] = [];\n if (offset !== null) {\n rc = 'offset ' + offset;\n parts.push('offset');\n parts.push(offset);\n }\n\n return { sql: rc, parts, bindings: [] };\n }\n\n compileWhereNull(w: whereNull): CompiledSql {\n return {\n sql: `${w.column} is null`,\n parts: [w.column, 'is', 'null'],\n bindings: [],\n };\n }\n\n compileInsert(query: Query, data: Record<string, Parameter>): CompiledSql {\n let parts = ['insert', 'into', query.parts.table, '('];\n const columns: string[] = [];\n const bindings: Parameter[] = [];\n const values: string[] = [];\n\n for (const [k, v] of Object.entries(data)) {\n parts.push(k);\n parts.push(',');\n }\n parts.pop();\n parts = parts.concat([')', 'values', '(']);\n\n for (const [k, v] of Object.entries(data)) {\n parts.push('?');\n bindings.push(v);\n parts.push(',');\n }\n parts.pop();\n parts.push(')');\n\n return { sql: parts.join(' '), parts, bindings };\n }\n\n abstract compileInsertGetId(\n query: Query,\n data: Record<string, Parameter>,\n options: { primaryKey: string[] }\n ): CompiledSql;\n\n compileUpdate(query: Query, data: Record<string, Parameter>): CompiledSql {\n const bindings: Parameter[] = [];\n let parts: (string | number)[] = ['update', query.parts.table, 'set'];\n\n const setParts = [];\n for (const [k, v] of Object.entries(data)) {\n parts = parts.concat([k, '=', '?', ',']);\n setParts.push(`${k} = ?`);\n bindings.push(v);\n }\n parts.pop();\n\n const where_csql = this.compileWhere(query.parts.where);\n parts = parts.concat(where_csql.parts);\n bindings.push(...where_csql.bindings);\n\n return { sql: parts.join(' '), parts, bindings };\n }\n\n compileDelete(query: Query): CompiledSql {\n let sql = 'delete from ' + query.parts.table;\n let parts: (string | number)[] = ['delete', 'from', query.parts.table];\n const where_csql = this.compileWhere(query.parts.where);\n sql += ' ' + where_csql.sql;\n parts = parts.concat(where_csql.parts);\n return { sql, parts, bindings: where_csql.bindings };\n }\n\n compileUpsert(\n query: Query,\n data: Record<string, Parameter>,\n conflictFields: string[],\n updateFields: string[]\n ): CompiledSql {\n let parts: (string | number)[] = [];\n const bindings: Parameter[] = [];\n\n let isql = this.compileInsert(query, data);\n parts = isql.parts;\n bindings.push(...isql.bindings);\n\n parts = parts.concat(['on', 'conflict', '(', ...conflictFields, ')', 'do', 'update', 'set']);\n const setParts = [];\n for (const f of updateFields) {\n setParts.push(`${f} = excluded.${f}`);\n setParts.push(`,`);\n }\n setParts.pop();\n parts = parts.concat(setParts);\n\n const where_csql = this.compileWhere(query.parts.where);\n parts = parts.concat(where_csql.parts);\n bindings.push(...where_csql.bindings);\n\n return { sql: parts.join(' '), parts, bindings };\n }\n\n compileGroupBy(groupBy: string[]): CompiledSql {\n let rc = '';\n let parts: (string | number)[] = [];\n if (groupBy.length) {\n rc = 'group by ' + groupBy.join(', ');\n parts.push('group by');\n parts = parts.concat(groupBy);\n }\n\n return { sql: rc, parts, bindings: [] };\n }\n\n compileHaving(having: havingType[]): CompiledSql {\n let sql = '';\n let bindings: Parameter[] = [];\n let parts: (string | number)[] = [];\n\n for (const w of having) {\n sql += ' ' + w.joinCondition + ' ';\n parts.push(w.joinCondition);\n if (w.negateCondition) {\n sql += 'not ';\n parts.push('not');\n }\n const funcName = 'compileHaving' + toUpperFirst(w.type);\n // @ts-ignore\n const wh = this[funcName](w);\n parts = parts.concat(wh.parts);\n sql += wh.sql;\n bindings = [...bindings, ...wh.bindings];\n }\n\n if (parts.length > 0) {\n parts[0] = 'having';\n }\n\n return { sql: parts.join(' '), parts, bindings };\n }\n\n compileHavingOperation(w: whereOp): CompiledSql {\n return {\n sql: `${w.column} ${w.operation} ?`,\n parts: [w.column, w.operation, '?'],\n bindings: [w.value],\n };\n }\n\n compileHavingRaw(w: whereRaw): CompiledSql {\n return {\n sql: w.sql,\n parts: w.sql.split(' '),\n bindings: w.bindings,\n };\n }\n}\n","import { Query } from '../../Query.mjs';\nimport { QueryGrammar } from '../../QueryGrammar.mjs';\nimport { CompiledSql, Parameter } from '../../types.mjs';\nimport { Arr } from '@devbro/neko-helper';\nexport class PostgresqlQueryGrammar extends QueryGrammar {\n constructor() {\n super();\n }\n\n toSql(query: Query): CompiledSql {\n return super.toSql(query);\n }\n\n compileInsert(query: Query, data: Record<string, any>): CompiledSql {\n return super.compileInsert(query, data);\n }\n\n compileInsertGetId(\n query: Query,\n data: Record<string, any>,\n options: { primaryKey: string[] } = { primaryKey: ['id'] }\n ): CompiledSql {\n const rc = super.compileInsert(query, data);\n rc.sql += ` RETURNING ${options.primaryKey.join(', ')}`;\n rc.parts = rc.parts.concat(['RETURNING', ...Arr.intersperse(options.primaryKey, ',')]);\n return rc;\n }\n\n compileUpdate(query: Query, data: Record<string, any>): CompiledSql {\n return super.compileUpdate(query, data);\n }\n\n compileDelete(query: Query): CompiledSql {\n return super.compileDelete(query);\n }\n\n compileUpsert(\n query: Query,\n data: Record<string, Parameter>,\n conflictFields: string[],\n updateFields: string[]\n ): CompiledSql {\n return super.compileUpsert(query, data, conflictFields, updateFields);\n }\n\n compileCount(query: Query): CompiledSql {\n return super.compileCount(query);\n }\n}\n","import { CompiledSql } from './types.mjs';\n// @ts-ignore - no type definitions available for sql-tokenizer\nimport { sqlTokenizer } from 'sql-tokenizer';\n\nexport class Expression {\n constructor(\n private sql = '',\n private bindings = []\n ) {}\n\n toCompiledSql(): CompiledSql {\n let parts = [];\n try {\n const tokenize = sqlTokenizer();\n parts = tokenize(this.sql);\n } catch (error) {\n console.error('Error tokenizing SQL:', error);\n parts = [this.sql];\n }\n return { sql: this.sql, bindings: this.bindings, parts };\n }\n}\n","import { Expression } from './Expression.mjs';\nimport { Parameter } from './types.mjs';\n\nexport type ColumnPropertiesType = {\n type:\n | 'string'\n | 'integer'\n | 'float'\n | 'double'\n | 'boolean'\n | 'char'\n | 'text'\n | 'date'\n | 'timestamp'\n | 'timestampz'\n | 'serial'\n | 'json'\n | 'jsonb'\n | 'raw';\n length: number;\n nullable: boolean;\n unique: boolean;\n default: Parameter;\n};\nexport class Column {\n columnName: string = '';\n properties: ColumnPropertiesType = {\n type: 'string',\n length: 255,\n nullable: false,\n unique: false,\n default: null,\n };\n\n constructor(columnName: string, type: ColumnPropertiesType['type']) {\n this.columnName = columnName;\n this.properties.type = type;\n }\n\n length(length: number) {\n this.properties.length = length;\n return this;\n }\n\n nullable(nullable: boolean = true) {\n this.properties.nullable = nullable;\n return this;\n }\n\n unique(unique: boolean = true) {\n this.properties.unique = unique;\n return this;\n }\n\n default(value: ColumnPropertiesType['default']) {\n this.properties.default = value;\n return this;\n }\n}\n\n// Index constraint for creating database indexes\nexport class IndexConstraint {\n columns: string[];\n indexName: string | undefined = undefined;\n unique: boolean = false;\n _type: 'gin' | 'btree' | 'hash' | 'gist' | 'spgist' | 'brin' | undefined = undefined;\n\n constructor(columns: string | string[]) {\n this.columns = Array.isArray(columns) ? columns : [columns];\n }\n\n name(indexName: string) {\n this.indexName = indexName;\n return this;\n }\n\n setUnique(unique: boolean = true) {\n this.unique = unique;\n return this;\n }\n\n type(type: typeof this._type) {\n this._type = type;\n return this;\n }\n}\n\n// references('id').on('roles').onDelete('cascade').onUpdate('cascade');\nexport class ForeignKeyConstraint {\n column: string;\n reference_table: { table: string; column: string };\n onUpdateAction: 'cascade' | 'set null' | 'restrict' | 'no action' = 'restrict';\n onDeleteAction: 'cascade' | 'set null' | 'restrict' | 'no action' = 'restrict';\n\n constructor(column: string) {\n this.column = column;\n this.reference_table = { table: '', column: '' };\n }\n\n on(table: string) {\n this.reference_table.table = table;\n return this;\n }\n\n references(column: string) {\n this.reference_table.column = column;\n return this;\n }\n\n onDelete(action: typeof this.onDeleteAction) {\n this.onDeleteAction = action;\n return this;\n }\n\n onUpdate(action: typeof this.onUpdateAction) {\n this.onUpdateAction = action;\n return this;\n }\n}\n\nexport class Blueprint {\n tableName: string = '';\n columns: Column[] = [];\n drop_coumns: string[] = [];\n foreignKeys: ForeignKeyConstraint[] = [];\n indexes: IndexConstraint[] = [];\n existingTable: boolean = false;\n primaryKeys: string[] = [];\n constructor() {}\n setTableName(tableName: string, existingTable: boolean = false) {\n this.tableName = tableName;\n this.existingTable = existingTable;\n }\n\n boolean(columnName: string) {\n const rc = new Column(columnName, 'boolean');\n this.columns.push(rc);\n return rc;\n }\n\n char(columnName: string) {\n const rc = new Column(columnName, 'char');\n this.columns.push(rc);\n return rc;\n }\n\n string(columnName: string, length: number = 255) {\n const rc = new Column(columnName, 'string');\n rc.length(length);\n this.columns.push(rc);\n return rc;\n }\n\n raw(sql: string) {\n const rc = new Column(sql, 'raw');\n this.columns.push(rc);\n return rc;\n }\n\n text(columnName: string) {\n const rc = new Column(columnName, 'text');\n this.columns.push(rc);\n return rc;\n }\n\n json(columnName: string) {\n const rc = new Column(columnName, 'json');\n this.columns.push(rc);\n return rc;\n }\n\n jsonb(columnName: string) {\n const rc = new Column(columnName, 'jsonb');\n this.columns.push(rc);\n return rc;\n }\n\n integer(columnName: string) {\n const rc = new Column(columnName, 'integer');\n this.columns.push(rc);\n return rc;\n }\n\n float(columnName: string) {\n const rc = new Column(columnName, 'float');\n this.columns.push(rc);\n return rc;\n }\n\n double(columnName: string) {\n const rc = new Column(columnName, 'double');\n this.columns.push(rc);\n return rc;\n }\n\n id() {\n const rc = new Column('id', 'serial');\n this.columns.push(rc);\n this.primaryKeys.push('id');\n return rc;\n }\n\n timestamps() {\n this.columns.push(\n new Column('created_at', 'timestampz').default(new Expression('CURRENT_TIMESTAMP'))\n );\n this.columns.push(\n new Column('updated_at', 'timestampz').default(new Expression('CURRENT_TIMESTAMP'))\n );\n }\n\n date(columnName: string) {\n const rc = new Column(columnName, 'date');\n this.columns.push(rc);\n return rc;\n }\n\n timestamp(columnName: string) {\n const rc = new Column(columnName, 'timestamp');\n this.columns.push(rc);\n return rc;\n }\n\n timestampTz(columnName: string) {\n const rc = new Column(columnName, 'timestampz');\n this.columns.push(rc);\n return rc;\n }\n\n datetime(columnName: string) {\n return this.timestamp(columnName);\n }\n\n datetimeTz(columnName: string) {\n return this.timestampTz(columnName);\n }\n\n primary(keys: string[]) {\n this.primaryKeys = keys;\n }\n\n foreign(columnName: string) {\n const rc = new ForeignKeyConstraint(columnName);\n this.foreignKeys.push(rc);\n return rc;\n }\n\n dropColumn(columnName: string) {\n this.drop_coumns.push(columnName);\n }\n\n index(columns: string | string[], indexName?: string) {\n const indexConstraint = new IndexConstraint(columns);\n if (indexName) {\n indexConstraint.name(indexName);\n }\n this.indexes.push(indexConstraint);\n return indexConstraint;\n }\n\n unique(columns: string | string[], indexName?: string) {\n const indexConstraint = new IndexConstraint(columns).setUnique(true);\n if (indexName) {\n indexConstraint.name(indexName);\n }\n this.indexes.push(indexConstraint);\n return indexConstraint;\n }\n}\n","import { Blueprint, Column, ForeignKeyConstraint, IndexConstraint } from './Blueprint.mjs';\nimport { Expression } from './Expression.mjs';\nimport { CompiledSql, Parameter } from './types.mjs';\n\nexport class SchemaGrammar {\n toSql(blueprint: Blueprint): string {\n if (!blueprint.existingTable) {\n return this.compileCreateTable(blueprint).sql;\n } else if (blueprint.existingTable) {\n return this.compileAlterTable(blueprint).sql;\n }\n\n throw new Error('bad blueprint to compile: ' + blueprint.tableName);\n }\n\n compileCreateTable(blueprint: Blueprint): CompiledSql {\n let sql = 'create table ' + blueprint.tableName + ' (';\n const columns = blueprint.columns\n .map((v: Column) => {\n return this.compileColumn(v);\n })\n .join(', ');\n\n const primaryKeys = this.compilePrimaryKeys(blueprint.primaryKeys);\n let foreignKeys: string[] = [];\n if (blueprint.foreignKeys.length > 0) {\n foreignKeys = blueprint.foreignKeys.map((v: ForeignKeyConstraint) => {\n return this.compileForeignKey(v);\n });\n }\n sql += [columns, primaryKeys, ...foreignKeys].join(',') + ')';\n\n const compiledSql = { sql, parts: [], bindings: [] };\n\n // If there are indexes to create, we need to return multiple statements\n if (blueprint.indexes.length > 0) {\n const indexSqls = blueprint.indexes.map((index: IndexConstraint) => {\n return this.compileIndex(blueprint.tableName, index);\n });\n return {\n sql: [compiledSql.sql, ...indexSqls.map((idx) => idx.sql)].join('; '),\n parts: [],\n bindings: compiledSql.bindings,\n };\n }\n\n return compiledSql;\n }\n\n compileAlterTable(blueprint: Blueprint): CompiledSql {\n let sql: string[] = ['alter table ' + blueprint.tableName];\n const add_columns = blueprint.columns.map((v: Column) => {\n return 'add column ' + this.compileColumn(v);\n });\n\n const drop_columns = blueprint.drop_coumns.map((v: string) => {\n return 'drop column ' + v;\n });\n\n const alterStatements = [...add_columns, ...drop_columns];\n if (alterStatements.length > 0) {\n sql = sql.concat([alterStatements.join(', ')]);\n }\n\n // Handle case where only indexes are being added without column changes\n let compiledSql: CompiledSql;\n if (alterStatements.length > 0) {\n compiledSql = { sql: sql.join(' '), parts: [], bindings: [] };\n } else {\n // No column changes, just need the base alter table statement for consistency\n compiledSql = { sql: sql.join(' ') + ' ', parts: [], bindings: [] };\n }\n\n // If there are indexes to create in alter table, add them as separate statements\n if (blueprint.indexes.length > 0) {\n const indexSqls = blueprint.indexes.map((index: IndexConstraint) => {\n return this.compileIndex(blueprint.tableName, index);\n });\n return {\n sql: [compiledSql.sql, ...indexSqls.map((idx) => idx.sql)].join('; '),\n parts: [],\n bindings: compiledSql.bindings,\n };\n }\n\n return compiledSql;\n }\n\n compileColumn(column: Column): string {\n const rc = [`${column.columnName}`];\n\n if (column.properties.type === 'string') {\n rc.push('varchar(' + column.properties.length + ')');\n } else if (column.properties.type === 'char') {\n rc.push('char');\n } else if (column.properties.type === 'boolean') {\n rc.push('boolean');\n } else if (column.properties.type === 'integer') {\n rc.push('integer');\n } else if (column.properties.type === 'text') {\n rc.push('text');\n } else if (column.properties.type === 'timestamp') {\n rc.push('timestamp');\n } else if (column.properties.type === 'timestampz') {\n rc.push('timestamp with time zone');\n } else if (column.properties.type === 'serial') {\n rc.push('serial');\n } else if (column.properties.type === 'float') {\n rc.push('float');\n } else if (column.properties.type === 'double') {\n rc.push('double precision');\n } else if (column.properties.type === 'date') {\n rc.push('date');\n } else if (column.properties.type === 'json') {\n rc.push('json');\n } else if (column.properties.type === 'jsonb') {\n rc.push('jsonb');\n } else if (column.properties.type === 'raw') {\n return column.columnName;\n } else {\n throw new Error('Unknown column type: ' + column.properties.type);\n }\n\n if (column.properties.nullable) {\n rc.push('null');\n } else {\n rc.push('not null');\n }\n\n if (column.properties.unique) {\n rc.push('unique');\n }\n\n if (column.properties.default !== null) {\n rc.push('default ' + this.escape(column.properties.default));\n }\n\n return rc.join(' ');\n }\n\n escape(value: Parameter): string {\n if (value === null || value === undefined) {\n return 'null';\n }\n\n if (typeof value === 'number') {\n return value.toString();\n }\n\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false';\n }\n\n if (value instanceof Date) {\n return \"'\" + value.toISOString() + \"'\";\n }\n\n if (value instanceof Expression) {\n return value.toCompiledSql().sql;\n }\n if (Array.isArray(value)) {\n return \"'{\" + value.join(',') + \"}'\";\n }\n\n return \"'\" + value.replace(\"'\", \"\\\\'\") + \"'\";\n }\n\n compilePrimaryKeys(primaryKeys: string[]): string {\n if (!primaryKeys.length) {\n return '';\n }\n\n return 'primary key (' + primaryKeys.join(', ') + ')';\n }\n\n compileTables(schema: string | string[] | undefined = undefined): CompiledSql {\n return {\n sql:\n 'select c.relname as name, n.nspname as schema, pg_total_relation_size(c.oid) as size, ' +\n \"obj_description(c.oid, 'pg_class') as comment from pg_class c, pg_namespace n \" +\n \"where c.relkind in ('r', 'p') and n.oid = c.relnamespace and \" +\n this.compileSchemaWhereClause(schema, 'n.nspname') +\n ' order by n.nspname, c.relname',\n parts: [],\n bindings: [],\n };\n }\n\n compileTableExists(tableName: string, schema: string = ''): CompiledSql {\n return {\n sql:\n 'select exists (select 1 from pg_class c, pg_namespace n where ' +\n 'n.nspname = ' +\n (schema ? this.escape(schema) : 'current_schema()') +\n \" and c.relname = $1 and c.relkind in ('r', 'p') and n.oid = c.relnamespace)\",\n parts: [],\n bindings: [tableName],\n };\n }\n\n compileDropTable(tableName: string): CompiledSql {\n return { sql: `drop table ${this.doubleQuoteString(tableName)}`, parts: [], bindings: [] };\n }\n\n compileDropTableIfExists(tableName: string): CompiledSql {\n return {\n sql: `drop table if exists ${this.doubleQuoteString(tableName)}`,\n parts: [],\n bindings: [],\n };\n }\n\n protected compileSchemaWhereClause(\n schema: string | string[] | undefined,\n column: string\n ): string {\n if (Array.isArray(schema) && schema.length > 0) {\n return `${column} in (${this.quoteString(schema)})`;\n } else if (schema && typeof schema === 'string') {\n return `${column} = ${this.quoteString(schema)}`;\n } else {\n return `${column} <> 'information_schema' and ${column} not like 'pg\\\\_%'`;\n }\n }\n\n protected quoteString(value: string | string[]): string {\n if (Array.isArray(value)) {\n return value.map((v) => `'${v.replace(/'/g, \"\\\\'\")}'`).join(', ');\n }\n return `'${value.replace(/'/g, \"\\\\'\")}'`;\n }\n\n protected doubleQuoteString(value: string | string[]): string {\n if (Array.isArray(value)) {\n return value.map((v) => this.doubleQuoteString(v)).join(', ');\n }\n return `\"${value.replace(/\"/g, '\\\\\"')}\"`;\n }\n\n protected compileForeignKey(foreignKey: ForeignKeyConstraint): string {\n //FOREIGN KEY (PersonID) REFERENCES users(id)\n const rc = [`FOREIGN KEY (${foreignKey.column})`];\n rc.push(`references ${foreignKey.reference_table.table}(${foreignKey.reference_table.column})`);\n\n if (foreignKey.onDeleteAction) {\n rc.push(`on delete ${foreignKey.onDeleteAction}`);\n }\n\n if (foreignKey.onUpdateAction) {\n rc.push(`on update ${foreignKey.onUpdateAction}`);\n }\n\n return rc.join(' ');\n }\n\n protected compileIndex(tableName: string, index: IndexConstraint): CompiledSql {\n const indexName =\n index.indexName ||\n `${tableName}_${index.columns.join('_')}_${index.unique ? 'unique' : 'index'}`;\n const uniqueKeyword = index.unique ? 'unique ' : '';\n const indexType = index._type ? ` using ${index._type}` : '';\n\n const sql = `create ${uniqueKeyword}index ${indexName} on ${tableName}${indexType} (${index.columns.join(', ')})`;\n\n return { sql, parts: [], bindings: [] };\n }\n}\n","import { Blueprint } from './Blueprint.mjs';\nimport { Connection } from './Connection.mjs';\nimport { SchemaGrammar } from './SchemaGrammar.mjs';\n\nexport class Schema {\n constructor(\n private readonly connection: Connection | null,\n private readonly grammar: SchemaGrammar\n ) {}\n\n async createTable(tableName: string, structMethod: (blueprint: Blueprint) => void) {\n const blueprint = new Blueprint();\n blueprint.setTableName(tableName, false);\n structMethod(blueprint);\n\n const grammar = new SchemaGrammar();\n const sql = grammar.toSql(blueprint);\n await this.connection?.runQuery({ sql, parts: [], bindings: [] });\n }\n\n async alterTable(tableName: string, structMethod: (blueprint: Blueprint) => void) {\n const blueprint = new Blueprint();\n blueprint.setTableName(tableName, true);\n structMethod(blueprint);\n\n const grammar = new SchemaGrammar();\n const sql = grammar.toSql(blueprint);\n await this.connection?.runQuery({ sql, parts: [], bindings: [] });\n }\n\n async dropTable(tableName: string) {\n const grammar = new SchemaGrammar();\n await this.connection?.runQuery(grammar.compileDropTable(tableName));\n }\n\n async dropTableIfExists(tableName: string) {\n const grammar = new SchemaGrammar();\n await this.connection?.runQuery(grammar.compileDropTableIfExists(tableName));\n }\n\n async tables() {\n const grammar = new SchemaGrammar();\n return await this.connection?.runQuery(grammar.compileTables());\n }\n\n async tableExists(table_name: string): Promise<boolean> {\n const grammar = new SchemaGrammar();\n return (await this.connection?.runQuery(grammar.compileTableExists(table_name)))[0]['exists'];\n }\n}\n","import { SchemaGrammar } from '../../SchemaGrammar.mjs';\n\nexport class PostgresqlSchemaGrammar extends SchemaGrammar {}\n","import { Schema } from './Schema.mjs';\n\nexport abstract class Migration {\n abstract up(schema: Schema): Promise<void>;\n abstract down(schema: Schema): Promise<void>;\n}\n"],"mappings":"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","names":["import_pg","bindings","import_neko_helper","import_sql_tokenizer","import_neko_helper","Cursor"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/Connection.mts","../src/databases/postgresql/PostgresqlConnection.mts","../src/Query.mts","../src/QueryGrammar.mts","../src/databases/postgresql/PostgresqlQueryGrammar.mts","../src/Expression.mts","../src/Blueprint.mts","../src/Schema.mts","../src/SchemaGrammar.mts","../src/databases/postgresql/PostgresqlSchemaGrammar.mts","../src/Migration.mts"],"sourcesContent":["export * from './databases/index.mjs';\nexport * from './Blueprint.mjs';\nexport * from './Connection.mjs';\nexport * from './Query.mjs';\nexport * from './QueryGrammar.mjs';\nexport * from './Schema.mjs';\nexport * from './SchemaGrammar.mjs';\nexport * from './types.mjs';\nexport * from './Migration.mjs';\n","import { Schema } from './Schema.mjs';\nimport { Query } from './Query.mjs';\nimport { CompiledSql } from './types.mjs';\nimport { QueryGrammar } from './QueryGrammar.mjs';\nimport { SchemaGrammar } from './SchemaGrammar.mjs';\nimport { EventEmittor } from '@devbro/neko-helper';\n\nexport type connection_events = 'connect' | 'disconnect' | 'query' | 'error';\nexport abstract class Connection implements EventEmittor<connection_events[]> {\n abstract on(event: connection_events, listener: (...args: any[]) => void): this;\n abstract off(event: connection_events, listener: (...args: any[]) => void): this;\n abstract emit(event: connection_events, ...args: any[]): Promise<boolean>;\n\n abstract isConnected(): boolean;\n abstract connect(): Promise<boolean>;\n abstract runQuery(sql: CompiledSql | string): Promise<any>;\n abstract runCursor(sql: CompiledSql): Promise<any>;\n abstract disconnect(): Promise<boolean>;\n abstract getQuery(): Query;\n abstract getSchema(): Schema;\n abstract beginTransaction(): Promise<void>;\n abstract commit(): Promise<void>;\n abstract rollback(): Promise<void>;\n abstract getQueryGrammar(): QueryGrammar;\n abstract getSchemaGrammar(): SchemaGrammar;\n abstract createDatabase(name: string): Promise<void>;\n abstract dropDatabase(name: string): Promise<void>;\n abstract listDatabases(): Promise<string[]>;\n abstract existsDatabase(name: string): Promise<boolean>;\n}\n","import { connection_events, Connection as ConnectionAbs } from '../../Connection.mjs';\nimport { Client, PoolClient, PoolConfig } from 'pg';\nimport { Pool } from 'pg';\nimport { CompiledSql } from '../../types.mjs';\nimport { Query } from '../../Query.mjs';\nimport { PostgresqlQueryGrammar } from './PostgresqlQueryGrammar.mjs';\nimport { Schema } from '../../Schema.mjs';\nimport { PostgresqlSchemaGrammar } from './PostgresqlSchemaGrammar.mjs';\nimport Cursor from 'pg-cursor';\nimport { EventManager } from '@devbro/neko-helper';\n\nexport class PostgresqlConnection extends ConnectionAbs {\n private eventManager = new EventManager();\n\n on(event: connection_events, listener: (...args: any[]) => void): this {\n this.eventManager.on(event, listener);\n return this;\n }\n off(event: connection_events, listener: (...args: any[]) => void): this {\n this.eventManager.off(event, listener);\n return this;\n }\n emit(event: connection_events, ...args: any[]): Promise<boolean> {\n return this.eventManager.emit(event, ...args);\n }\n\n connection: PoolClient | undefined;\n static pool: Pool;\n\n static defaults: PoolConfig = {\n port: 5432,\n ssl: false,\n max: 20,\n idleTimeoutMillis: 1, // wait X milli seconds before closing an idle/released connection\n connectionTimeoutMillis: 30000, // wait up to 30 seconds to obtain a new connection\n maxUses: 7500,\n };\n\n constructor(params: PoolConfig) {\n super();\n if (!PostgresqlConnection.pool) {\n PostgresqlConnection.pool = new Pool({ ...PostgresqlConnection.defaults, ...params });\n }\n }\n async connect(): Promise<boolean> {\n this.eventManager.emit('connect');\n this.connection = await PostgresqlConnection.pool.connect();\n return true;\n }\n async runQuery(sql: CompiledSql | string): Promise<any> {\n if( typeof sql === 'string') {\n sql = { sql: sql, bindings: [], parts: [sql] };\n }\n let counter = 1;\n let sql2 = sql.sql;\n if (sql.parts && sql.parts.length > 0) {\n sql2 = sql.parts.map((v) => (v === '?' ? '$' + counter++ : v)).join(' ');\n }\n\n this.eventManager.emit('query', { sql: sql2, bindings: sql.bindings });\n\n if (!this.isConnected()) {\n await this.connect();\n }\n const result = await this.connection!.query(sql2, sql.bindings);\n return result?.rows;\n }\n\n async runCursor(sql: CompiledSql): Promise<any> {\n return this.connection?.query(new Cursor(sql.sql, sql.bindings));\n }\n\n async disconnect(): Promise<boolean> {\n if (this.connection === undefined) {\n return true;\n }\n await this.connection?.release();\n this.connection = undefined;\n this.eventManager.emit('disconnect');\n return true;\n }\n\n getQuery(): Query {\n return new Query(this, new PostgresqlQueryGrammar());\n }\n\n getSchema(): Schema {\n return new Schema(this, new PostgresqlSchemaGrammar());\n }\n\n getQueryGrammar(): PostgresqlQueryGrammar {\n return new PostgresqlQueryGrammar();\n }\n getSchemaGrammar(): PostgresqlSchemaGrammar {\n return new PostgresqlSchemaGrammar();\n }\n\n async beginTransaction(): Promise<void> {\n await this.runQuery({ sql: 'BEGIN', bindings: [], parts: ['BEGIN'] });\n }\n\n async commit(): Promise<void> {\n await this.runQuery({ sql: 'COMMIT', bindings: [], parts: ['COMMIT'] });\n }\n\n async rollback(): Promise<void> {\n await this.runQuery({ sql: 'ROLLBACK', bindings: [], parts: ['ROLLBACK'] });\n }\n\n static async destroy(): Promise<void> {\n PostgresqlConnection.pool.end();\n return;\n }\n\n isConnected(): boolean {\n return this.connection !== undefined;\n }\n\n /**\n * Validates and escapes a PostgreSQL identifier (database name, table name, etc.)\n * Uses a whitelist approach to ensure only safe characters are allowed\n */\n private validateAndEscapeIdentifier(name: string): string {\n // PostgreSQL identifiers can contain: letters, digits, underscores, and dollar signs\n // They must start with a letter or underscore\n const validIdentifierPattern = /^[a-zA-Z_][a-zA-Z0-9_$]*$/;\n\n if (!validIdentifierPattern.test(name)) {\n throw new Error(\n `Invalid identifier: \"${name}\". Identifiers must start with a letter or underscore and contain only letters, digits, underscores, and dollar signs.`\n );\n }\n\n // PostgreSQL reserved keywords that should be quoted\n const reservedKeywords = new Set([\n 'user',\n 'table',\n 'database',\n 'order',\n 'group',\n 'select',\n 'insert',\n 'update',\n 'delete',\n ]);\n\n // Quote the identifier if it's a reserved keyword or contains uppercase letters\n if (reservedKeywords.has(name.toLowerCase()) || name !== name.toLowerCase()) {\n // Escape any double quotes in the name\n const escapedName = name.replace(/\"/g, '\"\"');\n return `\"${escapedName}\"`;\n }\n\n return name;\n }\n\n async createDatabase(name: string): Promise<void> {\n if (this.isConnected()) {\n throw new Error('Cannot create database while connected.');\n }\n\n let conn = new Client({\n ...PostgresqlConnection.pool.options,\n database: 'postgres',\n });\n await conn.connect();\n const safeName = this.validateAndEscapeIdentifier(name);\n await conn.query(`CREATE DATABASE ${safeName}`);\n await conn.end();\n }\n\n async dropDatabase(name: string): Promise<void> {\n if (this.isConnected()) {\n throw new Error('Cannot drop database while connected.');\n }\n\n let conn = new Client({\n ...PostgresqlConnection.pool.options,\n database: 'postgres', // connect to default 'postgres' database to drop others\n });\n await conn.connect();\n const safeName = this.validateAndEscapeIdentifier(name);\n await conn.query(`DROP DATABASE ${safeName}`);\n await conn.end();\n }\n\n async listDatabases(): Promise<string[]> {\n if (!this.isConnected()) {\n await this.connect();\n }\n const result = await this.connection!.query(\n 'SELECT datname FROM pg_database WHERE datistemplate = false ORDER BY datname'\n );\n return result.rows.map((row: any) => row.datname);\n }\n\n async existsDatabase(name: string): Promise<boolean> {\n if (!this.isConnected()) {\n await this.connect();\n }\n const result = await this.connection!.query('SELECT 1 FROM pg_database WHERE datname = $1', [\n name,\n ]);\n return result.rows.length > 0;\n }\n}\n","import { Connection } from './Connection.mjs';\nimport { QueryGrammar } from './QueryGrammar.mjs';\nimport {\n CompiledSql,\n JoinCondition,\n Parameter,\n selectType,\n whereType,\n havingType,\n joinType,\n} from './types.mjs';\n\nexport type QueryParts = {\n select: selectType[];\n table: string;\n join: joinType[];\n where: whereType[];\n groupBy: string[];\n having: havingType[];\n orderBy: string[];\n limit: number | null;\n offset: number | null;\n alias: string | null;\n};\n\nexport class Query {\n allowedOperations: string[] = ['=', '>', '<', '!=', 'like', 'ilike', 'in'];\n parts: QueryParts = {\n select: ['*'],\n table: '',\n join: [],\n where: [],\n groupBy: [],\n having: [],\n orderBy: [],\n limit: null,\n offset: null,\n alias: null,\n };\n\n constructor(\n public readonly connection: Connection | null,\n public readonly grammar: QueryGrammar\n ) {}\n\n table(tableName: string): this {\n this.parts.table = tableName;\n return this;\n }\n\n whereNested(\n func: (q: Query) => void,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ) {\n const subQuery = new Query(this.connection, this.grammar);\n func(subQuery);\n this.parts.where.push({\n type: 'nested',\n query: subQuery,\n joinCondition,\n negateCondition,\n });\n return this;\n }\n\n whereOp(\n column: string,\n operation: (typeof this.allowedOperations)[number],\n value: Parameter,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.where.push({\n type: 'operation',\n column,\n operation,\n value,\n joinCondition,\n negateCondition,\n });\n return this;\n }\n\n whereRaw(\n sql: string,\n bindings: Parameter[],\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.where.push({ type: 'raw', sql, bindings, joinCondition, negateCondition });\n return this;\n }\n\n whereColumn(\n column1: string,\n operation: (typeof this.allowedOperations)[number],\n column2: string,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.where.push({\n type: 'operationColumn',\n column1,\n operation,\n column2,\n joinCondition,\n negateCondition,\n });\n return this;\n }\n\n whereNull(\n column: string,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.where.push({ type: 'null', column, joinCondition, negateCondition });\n return this;\n }\n\n clearWhere(): this {\n this.parts.where = [];\n return this;\n }\n\n select(selects: selectType[]): this {\n this.parts.select = [...selects];\n return this;\n }\n\n groupBy(columns: string[]): this {\n this.parts.groupBy = [...columns];\n return this;\n }\n\n havingOp(\n column: string,\n operation: (typeof this.allowedOperations)[number],\n value: Parameter,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.having.push({\n type: 'operation',\n column,\n operation,\n value,\n joinCondition,\n negateCondition,\n });\n return this;\n }\n\n havingRaw(\n sql: string,\n bindings: Parameter[],\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.having.push({ type: 'raw', sql, bindings, joinCondition, negateCondition });\n return this;\n }\n\n orderBy(column: string, direction: 'asc' | 'desc' = 'asc'): this {\n this.parts.orderBy.push(`${column} ${direction}`);\n return this;\n }\n\n limit(limit: number): this {\n this.parts.limit = limit;\n return this;\n }\n\n offset(offset: number): this {\n this.parts.offset = offset;\n return this;\n }\n\n toSql(): CompiledSql {\n return this.grammar.toSql(this);\n }\n\n async get() {\n let sql = this.toSql();\n return await this.connection?.runQuery(sql);\n }\n\n async first() {\n let rc = await this.connection?.runQuery(this.toSql());\n if (rc && Array.isArray(rc) && rc.length > 0) {\n return rc[0];\n }\n return undefined;\n }\n\n async count(): Promise<number> {\n const csql: CompiledSql = this.grammar.compileCount(this);\n const result = await this.connection?.runQuery(csql);\n if (result && Array.isArray(result) && result.length > 0) {\n return parseInt(result[0]['count'], 10);\n }\n return 0;\n }\n\n async getCursor() {\n return await this.connection?.runCursor(this.toSql());\n }\n\n getConnection(): Connection | null {\n return this.connection;\n }\n\n async insert(data: Record<string, Parameter>) {\n const csql: CompiledSql = this.grammar.compileInsert(this, data);\n return await this.connection?.runQuery(csql);\n }\n\n async insertGetId(\n data: Record<string, Parameter>,\n options: { primaryKey: string[] } = { primaryKey: ['id'] }\n ) {\n const csql: CompiledSql = this.grammar.compileInsertGetId(this, data, options);\n return await this.connection?.runQuery(csql);\n }\n\n async update(data: Record<string, Parameter>) {\n const csql: CompiledSql = this.grammar.compileUpdate(this, data);\n return await this.connection?.runQuery(csql);\n }\n\n async upsert(data: Record<string, Parameter>, uniqueColumns: string[], updateColumns: string[]) {\n const csql: CompiledSql = this.grammar.compileUpsert(this, data, uniqueColumns, updateColumns);\n return await this.connection?.runQuery(csql);\n }\n\n async delete() {\n const csql: CompiledSql = this.grammar.compileDelete(this);\n return await this.connection?.runQuery(csql);\n }\n\n join(\n table: string | Query,\n type: joinType['type'],\n conditions: (whereType | { column1: string; column2: string })[]\n ): this {\n let conditions_corrected: whereType[] = [];\n for (const cond of conditions) {\n conditions_corrected.push({\n joinCondition: 'and',\n negateCondition: false,\n type: 'operationColumn',\n // @ts-ignore\n operation: '=',\n ...cond,\n });\n }\n this.parts.join.push({ type, table, conditions: conditions_corrected });\n return this;\n }\n\n innerJoin(\n table: Parameters<typeof this.join>[0],\n conditions: (whereType | { column1: string; column2: string })[]\n ): this {\n return this.join(table, 'inner', conditions);\n }\n\n leftJoin(\n table: Parameters<typeof this.join>[0],\n conditions: (whereType | { column1: string; column2: string })[]\n ): this {\n return this.join(table, 'left', conditions);\n }\n\n rightJoin(\n table: Parameters<typeof this.join>[0],\n conditions: (whereType | { column1: string; column2: string })[]\n ): this {\n return this.join(table, 'right', conditions);\n }\n\n fullJoin(\n table: Parameters<typeof this.join>[0],\n conditions: (whereType | { column1: string; column2: string })[]\n ): this {\n return this.join(table, 'full', conditions);\n }\n\n crossJoin(\n table: Parameters<typeof this.join>[0],\n conditions: (whereType | { column1: string; column2: string })[]\n ): this {\n return this.join(table, 'cross', conditions);\n }\n\n alias(alias: string): this {\n this.parts.alias = alias;\n return this;\n }\n}\n","import { Query } from './Query.mjs';\nimport {\n Parameter,\n CompiledSql,\n selectType,\n whereNull,\n whereOp,\n whereType,\n whereRaw,\n havingType,\n whereOpColumn,\n joinType,\n whereNested,\n} from './types.mjs';\n// @ts-ignore - no type definitions available for sql-tokenizer\nimport { sqlTokenizer } from 'sql-tokenizer';\nimport { Arr } from '@devbro/neko-helper';\n\nfunction toUpperFirst(str: string) {\n return str.substring(0, 1).toUpperCase() + str.substring(1);\n}\nexport abstract class QueryGrammar {\n sqlParts: string[] = [\n 'select',\n 'table',\n 'join',\n 'where',\n 'groupBy',\n 'having',\n 'orderBy',\n 'limit',\n 'offset',\n ];\n\n toSql(query: Query): CompiledSql {\n let rc = this.toSqlParts(query);\n rc.sql = this.joinArray(rc.parts);\n return rc;\n }\n\n toSqlParts(query: Query): CompiledSql {\n let parts: string[] = [];\n let bindings: Parameter[] = [];\n\n for (const part of this.sqlParts) {\n // @ts-ignore\n const funcName: keyof this = 'compile' + toUpperFirst(part);\n // @ts-ignore\n const r = this[funcName](query.parts[part]);\n bindings = [...bindings, ...r.bindings];\n parts = [...parts, ...r.parts];\n }\n\n return {\n sql: '',\n bindings,\n parts,\n };\n }\n\n compileCount(query: Query): CompiledSql {\n let sql = '';\n let bindings: Parameter[] = [];\n let parts: (string | number)[] = [];\n\n for (const part of this.sqlParts) {\n // @ts-ignore\n let parts2 = query.parts[part];\n if (part === 'select') {\n parts2 = ['count(*) as count'];\n }\n // @ts-ignore\n const funcName: keyof this = 'compile' + toUpperFirst(part);\n // @ts-ignore\n const r = this[funcName](parts2);\n bindings = [...bindings, ...r.bindings];\n parts = [...parts, ...r.parts];\n }\n return { sql, parts, bindings };\n }\n\n compileSelect(selects: selectType[]): CompiledSql {\n const parts = ['select'];\n selects.map((v) => {\n parts.push(v);\n parts.push(',');\n });\n parts.pop();\n\n return { sql: this.joinArray(parts), parts, bindings: [] };\n }\n\n joinArray(arr: (string | number)[]): string {\n let rc = '';\n let last: string | number = '';\n for (const a of arr) {\n if (a === ',') {\n rc += a;\n } else if (last === '(' || last === ' ' || a === ')') {\n rc += a;\n } else if (a === '') {\n rc += '';\n } else {\n rc += ' ' + a;\n }\n last = a;\n }\n\n return rc.trim();\n }\n\n compileTable(tableName: string): CompiledSql {\n let parts = [];\n if (tableName.length) {\n parts.push('from');\n parts.push(tableName);\n }\n\n return { sql: parts.join(' '), parts, bindings: [] };\n }\n\n compileJoin(joins: joinType[]): CompiledSql {\n let sql = '';\n let bindings: Parameter[] = [];\n let parts: (string | number)[] = [];\n\n for (const j of joins) {\n let table = '';\n let table_bindings: any[] = [];\n\n parts.push(j.type);\n parts.push('join');\n if (typeof j.table === 'string') {\n parts.push(j.table);\n } else {\n const subQuery = j.table;\n const { parts: parts2, bindings } = subQuery.toSql();\n parts = [...parts, '(', ...parts2, ')', 'as', subQuery.parts.alias || 'subquery'];\n table_bindings = bindings;\n }\n\n parts.push('on');\n\n const where = this.compileWhere(j.conditions);\n const where_parts = where.parts;\n where_parts.shift();\n parts.push('(');\n parts = [...parts, ...where_parts];\n parts.push(')');\n\n bindings = [...bindings, ...table_bindings, ...where.bindings];\n }\n\n return { sql, parts, bindings };\n }\n\n compileWhere(wheres: whereType[]): CompiledSql {\n let sql = '';\n let bindings: Parameter[] = [];\n let parts: (string | number)[] = [];\n\n for (const w of wheres) {\n sql += ' ' + w.joinCondition + ' ';\n parts.push(w.joinCondition);\n if (w.negateCondition) {\n sql += 'not ';\n parts.push('not');\n }\n const funcName = 'compileWhere' + toUpperFirst(w.type);\n // @ts-ignore\n const wh = this[funcName](w);\n sql += wh.sql;\n parts = parts.concat(wh.parts);\n bindings = [...bindings, ...wh.bindings];\n }\n\n if (sql.startsWith(' and ')) {\n sql = 'where ' + sql.substring(' and '.length);\n } else if (sql.startsWith(' or ')) {\n sql = 'where ' + sql.substring(' or '.length);\n }\n\n if (parts.length > 0) {\n parts[0] = 'where';\n }\n return { sql, parts, bindings };\n }\n\n compileWhereNested(w: whereNested): CompiledSql {\n const subQuery = w.query;\n let parts: (string | number)[] = [];\n const { sql, parts: parts2, bindings } = subQuery.grammar.compileWhere(subQuery.parts.where);\n let sql2 = sql.replace(/^where /, '');\n parts2.shift();\n parts.push('(');\n parts = parts.concat(parts2);\n parts.push(')');\n return {\n sql: `(${sql2})`,\n parts,\n bindings,\n };\n }\n\n compileWhereOperation(w: whereOp): CompiledSql {\n if (w.operation.toLowerCase() === 'in' && Array.isArray(w.value)) {\n return {\n sql: `${w.column} = ANY( ? )`,\n parts: [w.column, ' = ANY(', '?', ')'],\n bindings: [w.value],\n };\n }\n\n return {\n sql: `${w.column} ${w.operation} ?`,\n parts: [w.column, w.operation, '?'],\n bindings: [w.value],\n };\n }\n\n compileWhereOperationColumn(w: whereOpColumn): CompiledSql {\n return {\n sql: `${w.column1} ${w.operation} ${w.column2}`,\n parts: [w.column1, w.operation, w.column2],\n bindings: [],\n };\n }\n\n compileWhereRaw(w: whereRaw): CompiledSql {\n const tokenize = sqlTokenizer();\n\n return {\n sql: w.sql,\n parts: tokenize(w.sql).filter((t: string) => t !== ' '),\n bindings: w.bindings,\n };\n }\n\n compileOrderBy(orderBy: string[]): CompiledSql {\n let rc = '';\n let parts: (string | number)[] = [];\n if (orderBy.length) {\n rc = 'order by ' + orderBy.join(', ');\n parts.push('order by');\n parts = parts.concat(Arr.intersperse(orderBy, ','));\n }\n\n return { sql: rc, parts, bindings: [] };\n }\n\n compileLimit(limit: number | null): CompiledSql {\n let rc = '';\n let parts: (string | number)[] = [];\n if (limit !== null) {\n rc = 'limit ' + limit;\n parts.push('limit');\n parts.push(limit);\n }\n\n return { sql: rc, parts, bindings: [] };\n }\n\n compileOffset(offset: number | null): CompiledSql {\n let rc = '';\n let parts: (string | number)[] = [];\n if (offset !== null) {\n rc = 'offset ' + offset;\n parts.push('offset');\n parts.push(offset);\n }\n\n return { sql: rc, parts, bindings: [] };\n }\n\n compileWhereNull(w: whereNull): CompiledSql {\n return {\n sql: `${w.column} is null`,\n parts: [w.column, 'is', 'null'],\n bindings: [],\n };\n }\n\n compileInsert(query: Query, data: Record<string, Parameter>): CompiledSql {\n let parts = ['insert', 'into', query.parts.table, '('];\n const columns: string[] = [];\n const bindings: Parameter[] = [];\n const values: string[] = [];\n\n for (const [k, v] of Object.entries(data)) {\n parts.push(k);\n parts.push(',');\n }\n parts.pop();\n parts = parts.concat([')', 'values', '(']);\n\n for (const [k, v] of Object.entries(data)) {\n parts.push('?');\n bindings.push(v);\n parts.push(',');\n }\n parts.pop();\n parts.push(')');\n\n return { sql: parts.join(' '), parts, bindings };\n }\n\n abstract compileInsertGetId(\n query: Query,\n data: Record<string, Parameter>,\n options: { primaryKey: string[] }\n ): CompiledSql;\n\n compileUpdate(query: Query, data: Record<string, Parameter>): CompiledSql {\n const bindings: Parameter[] = [];\n let parts: (string | number)[] = ['update', query.parts.table, 'set'];\n\n const setParts = [];\n for (const [k, v] of Object.entries(data)) {\n parts = parts.concat([k, '=', '?', ',']);\n setParts.push(`${k} = ?`);\n bindings.push(v);\n }\n parts.pop();\n\n const where_csql = this.compileWhere(query.parts.where);\n parts = parts.concat(where_csql.parts);\n bindings.push(...where_csql.bindings);\n\n return { sql: parts.join(' '), parts, bindings };\n }\n\n compileDelete(query: Query): CompiledSql {\n let sql = 'delete from ' + query.parts.table;\n let parts: (string | number)[] = ['delete', 'from', query.parts.table];\n const where_csql = this.compileWhere(query.parts.where);\n sql += ' ' + where_csql.sql;\n parts = parts.concat(where_csql.parts);\n return { sql, parts, bindings: where_csql.bindings };\n }\n\n compileUpsert(\n query: Query,\n data: Record<string, Parameter>,\n conflictFields: string[],\n updateFields: string[]\n ): CompiledSql {\n let parts: (string | number)[] = [];\n const bindings: Parameter[] = [];\n\n let isql = this.compileInsert(query, data);\n parts = isql.parts;\n bindings.push(...isql.bindings);\n\n parts = parts.concat(['on', 'conflict', '(', ...conflictFields, ')', 'do', 'update', 'set']);\n const setParts = [];\n for (const f of updateFields) {\n setParts.push(`${f} = excluded.${f}`);\n setParts.push(`,`);\n }\n setParts.pop();\n parts = parts.concat(setParts);\n\n const where_csql = this.compileWhere(query.parts.where);\n parts = parts.concat(where_csql.parts);\n bindings.push(...where_csql.bindings);\n\n return { sql: parts.join(' '), parts, bindings };\n }\n\n compileGroupBy(groupBy: string[]): CompiledSql {\n let rc = '';\n let parts: (string | number)[] = [];\n if (groupBy.length) {\n rc = 'group by ' + groupBy.join(', ');\n parts.push('group by');\n parts = parts.concat(groupBy);\n }\n\n return { sql: rc, parts, bindings: [] };\n }\n\n compileHaving(having: havingType[]): CompiledSql {\n let sql = '';\n let bindings: Parameter[] = [];\n let parts: (string | number)[] = [];\n\n for (const w of having) {\n sql += ' ' + w.joinCondition + ' ';\n parts.push(w.joinCondition);\n if (w.negateCondition) {\n sql += 'not ';\n parts.push('not');\n }\n const funcName = 'compileHaving' + toUpperFirst(w.type);\n // @ts-ignore\n const wh = this[funcName](w);\n parts = parts.concat(wh.parts);\n sql += wh.sql;\n bindings = [...bindings, ...wh.bindings];\n }\n\n if (parts.length > 0) {\n parts[0] = 'having';\n }\n\n return { sql: parts.join(' '), parts, bindings };\n }\n\n compileHavingOperation(w: whereOp): CompiledSql {\n return {\n sql: `${w.column} ${w.operation} ?`,\n parts: [w.column, w.operation, '?'],\n bindings: [w.value],\n };\n }\n\n compileHavingRaw(w: whereRaw): CompiledSql {\n return {\n sql: w.sql,\n parts: w.sql.split(' '),\n bindings: w.bindings,\n };\n }\n}\n","import { Query } from '../../Query.mjs';\nimport { QueryGrammar } from '../../QueryGrammar.mjs';\nimport { CompiledSql, Parameter } from '../../types.mjs';\nimport { Arr } from '@devbro/neko-helper';\nexport class PostgresqlQueryGrammar extends QueryGrammar {\n constructor() {\n super();\n }\n\n toSql(query: Query): CompiledSql {\n return super.toSql(query);\n }\n\n compileInsert(query: Query, data: Record<string, any>): CompiledSql {\n return super.compileInsert(query, data);\n }\n\n compileInsertGetId(\n query: Query,\n data: Record<string, any>,\n options: { primaryKey: string[] } = { primaryKey: ['id'] }\n ): CompiledSql {\n const rc = super.compileInsert(query, data);\n rc.sql += ` RETURNING ${options.primaryKey.join(', ')}`;\n rc.parts = rc.parts.concat(['RETURNING', ...Arr.intersperse(options.primaryKey, ',')]);\n return rc;\n }\n\n compileUpdate(query: Query, data: Record<string, any>): CompiledSql {\n return super.compileUpdate(query, data);\n }\n\n compileDelete(query: Query): CompiledSql {\n return super.compileDelete(query);\n }\n\n compileUpsert(\n query: Query,\n data: Record<string, Parameter>,\n conflictFields: string[],\n updateFields: string[]\n ): CompiledSql {\n return super.compileUpsert(query, data, conflictFields, updateFields);\n }\n\n compileCount(query: Query): CompiledSql {\n return super.compileCount(query);\n }\n}\n","import { CompiledSql } from './types.mjs';\n// @ts-ignore - no type definitions available for sql-tokenizer\nimport { sqlTokenizer } from 'sql-tokenizer';\n\nexport class Expression {\n constructor(\n private sql = '',\n private bindings = []\n ) {}\n\n toCompiledSql(): CompiledSql {\n let parts = [];\n try {\n const tokenize = sqlTokenizer();\n parts = tokenize(this.sql);\n } catch (error) {\n console.error('Error tokenizing SQL:', error);\n parts = [this.sql];\n }\n return { sql: this.sql, bindings: this.bindings, parts };\n }\n}\n","import { Expression } from './Expression.mjs';\nimport { Parameter } from './types.mjs';\n\nexport type ColumnPropertiesType = {\n type:\n | 'string'\n | 'integer'\n | 'float'\n | 'double'\n | 'boolean'\n | 'char'\n | 'text'\n | 'date'\n | 'timestamp'\n | 'timestampz'\n | 'serial'\n | 'json'\n | 'jsonb'\n | 'raw';\n length: number;\n nullable: boolean;\n unique: boolean;\n default: Parameter;\n};\nexport class Column {\n columnName: string = '';\n properties: ColumnPropertiesType = {\n type: 'string',\n length: 255,\n nullable: false,\n unique: false,\n default: null,\n };\n\n constructor(columnName: string, type: ColumnPropertiesType['type']) {\n this.columnName = columnName;\n this.properties.type = type;\n }\n\n length(length: number) {\n this.properties.length = length;\n return this;\n }\n\n nullable(nullable: boolean = true) {\n this.properties.nullable = nullable;\n return this;\n }\n\n unique(unique: boolean = true) {\n this.properties.unique = unique;\n return this;\n }\n\n default(value: ColumnPropertiesType['default']) {\n this.properties.default = value;\n return this;\n }\n}\n\n// Index constraint for creating database indexes\nexport class IndexConstraint {\n columns: string[];\n indexName: string | undefined = undefined;\n unique: boolean = false;\n _type: 'gin' | 'btree' | 'hash' | 'gist' | 'spgist' | 'brin' | undefined = undefined;\n\n constructor(columns: string | string[]) {\n this.columns = Array.isArray(columns) ? columns : [columns];\n }\n\n name(indexName: string) {\n this.indexName = indexName;\n return this;\n }\n\n setUnique(unique: boolean = true) {\n this.unique = unique;\n return this;\n }\n\n type(type: typeof this._type) {\n this._type = type;\n return this;\n }\n}\n\n// references('id').on('roles').onDelete('cascade').onUpdate('cascade');\nexport class ForeignKeyConstraint {\n column: string;\n reference_table: { table: string; column: string };\n onUpdateAction: 'cascade' | 'set null' | 'restrict' | 'no action' = 'restrict';\n onDeleteAction: 'cascade' | 'set null' | 'restrict' | 'no action' = 'restrict';\n\n constructor(column: string) {\n this.column = column;\n this.reference_table = { table: '', column: '' };\n }\n\n on(table: string) {\n this.reference_table.table = table;\n return this;\n }\n\n references(column: string) {\n this.reference_table.column = column;\n return this;\n }\n\n onDelete(action: typeof this.onDeleteAction) {\n this.onDeleteAction = action;\n return this;\n }\n\n onUpdate(action: typeof this.onUpdateAction) {\n this.onUpdateAction = action;\n return this;\n }\n}\n\nexport class Blueprint {\n tableName: string = '';\n columns: Column[] = [];\n drop_coumns: string[] = [];\n foreignKeys: ForeignKeyConstraint[] = [];\n indexes: IndexConstraint[] = [];\n existingTable: boolean = false;\n primaryKeys: string[] = [];\n constructor() {}\n setTableName(tableName: string, existingTable: boolean = false) {\n this.tableName = tableName;\n this.existingTable = existingTable;\n }\n\n boolean(columnName: string) {\n const rc = new Column(columnName, 'boolean');\n this.columns.push(rc);\n return rc;\n }\n\n char(columnName: string) {\n const rc = new Column(columnName, 'char');\n this.columns.push(rc);\n return rc;\n }\n\n string(columnName: string, length: number = 255) {\n const rc = new Column(columnName, 'string');\n rc.length(length);\n this.columns.push(rc);\n return rc;\n }\n\n raw(sql: string) {\n const rc = new Column(sql, 'raw');\n this.columns.push(rc);\n return rc;\n }\n\n text(columnName: string) {\n const rc = new Column(columnName, 'text');\n this.columns.push(rc);\n return rc;\n }\n\n json(columnName: string) {\n const rc = new Column(columnName, 'json');\n this.columns.push(rc);\n return rc;\n }\n\n jsonb(columnName: string) {\n const rc = new Column(columnName, 'jsonb');\n this.columns.push(rc);\n return rc;\n }\n\n integer(columnName: string) {\n const rc = new Column(columnName, 'integer');\n this.columns.push(rc);\n return rc;\n }\n\n float(columnName: string) {\n const rc = new Column(columnName, 'float');\n this.columns.push(rc);\n return rc;\n }\n\n double(columnName: string) {\n const rc = new Column(columnName, 'double');\n this.columns.push(rc);\n return rc;\n }\n\n id() {\n const rc = new Column('id', 'serial');\n this.columns.push(rc);\n this.primaryKeys.push('id');\n return rc;\n }\n\n timestamps() {\n this.columns.push(\n new Column('created_at', 'timestampz').default(new Expression('CURRENT_TIMESTAMP'))\n );\n this.columns.push(\n new Column('updated_at', 'timestampz').default(new Expression('CURRENT_TIMESTAMP'))\n );\n }\n\n date(columnName: string) {\n const rc = new Column(columnName, 'date');\n this.columns.push(rc);\n return rc;\n }\n\n timestamp(columnName: string) {\n const rc = new Column(columnName, 'timestamp');\n this.columns.push(rc);\n return rc;\n }\n\n timestampTz(columnName: string) {\n const rc = new Column(columnName, 'timestampz');\n this.columns.push(rc);\n return rc;\n }\n\n datetime(columnName: string) {\n return this.timestamp(columnName);\n }\n\n datetimeTz(columnName: string) {\n return this.timestampTz(columnName);\n }\n\n primary(keys: string[]) {\n this.primaryKeys = keys;\n }\n\n foreign(columnName: string) {\n const rc = new ForeignKeyConstraint(columnName);\n this.foreignKeys.push(rc);\n return rc;\n }\n\n dropColumn(columnName: string) {\n this.drop_coumns.push(columnName);\n }\n\n index(columns: string | string[], indexName?: string) {\n const indexConstraint = new IndexConstraint(columns);\n if (indexName) {\n indexConstraint.name(indexName);\n }\n this.indexes.push(indexConstraint);\n return indexConstraint;\n }\n\n unique(columns: string | string[], indexName?: string) {\n const indexConstraint = new IndexConstraint(columns).setUnique(true);\n if (indexName) {\n indexConstraint.name(indexName);\n }\n this.indexes.push(indexConstraint);\n return indexConstraint;\n }\n}\n","import { Blueprint } from './Blueprint.mjs';\nimport { Connection } from './Connection.mjs';\nimport { SchemaGrammar } from './SchemaGrammar.mjs';\n\n/**\n * Schema builder for creating and managing database tables.\n * Provides methods for table creation, alteration, and inspection.\n */\nexport class Schema {\n /**\n * Creates a new Schema instance.\n *\n * @param connection - The database connection to use for schema operations\n * @param grammar - The schema grammar for generating SQL statements\n */\n constructor(\n private readonly connection: Connection | null,\n private readonly grammar: SchemaGrammar\n ) {}\n\n /**\n * Creates a new table in the database.\n *\n * @param tableName - The name of the table to create\n * @param structMethod - A callback function that receives a Blueprint to define table structure\n *\n * @example\n * await schema.createTable('users', (table) => {\n * table.increments('id');\n * table.string('name');\n * table.string('email').unique();\n * table.timestamps();\n * });\n */\n async createTable(tableName: string, structMethod: (blueprint: Blueprint) => void) {\n const blueprint = new Blueprint();\n blueprint.setTableName(tableName, false);\n structMethod(blueprint);\n\n const sql = this.grammar.toSql(blueprint);\n await this.connection?.runQuery({ sql, parts: [], bindings: [] });\n }\n\n /**\n * Modifies an existing table structure.\n *\n * @param tableName - The name of the table to alter\n * @param structMethod - A callback function that receives a Blueprint to define modifications\n *\n * @example\n * await schema.alterTable('users', (table) => {\n * table.string('phone').nullable();\n * table.dropColumn('old_field');\n * });\n */\n async alterTable(tableName: string, structMethod: (blueprint: Blueprint) => void) {\n const blueprint = new Blueprint();\n blueprint.setTableName(tableName, true);\n structMethod(blueprint);\n\n const sql = this.grammar.toSql(blueprint);\n await this.connection?.runQuery({ sql, parts: [], bindings: [] });\n }\n\n /**\n * Drops (deletes) a table from the database.\n *\n * @param tableName - The name of the table to drop\n *\n * @example\n * await schema.dropTable('old_users');\n */\n async dropTable(tableName: string) {\n await this.connection?.runQuery(this.grammar.compileDropTable(tableName));\n }\n\n /**\n * Drops a table from the database if it exists.\n * Safe to call even if the table doesn't exist.\n *\n * @param tableName - The name of the table to drop\n *\n * @example\n * await schema.dropTableIfExists('temp_table');\n */\n async dropTableIfExists(tableName: string) {\n await this.connection?.runQuery(this.grammar.compileDropTableIfExists(tableName));\n }\n\n /**\n * Retrieves a list of all tables in the database.\n *\n * @returns A promise that resolves to an array of table information\n *\n * @example\n * const allTables = await schema.tables();\n * console.log(allTables);\n */\n async tables() {\n return await this.connection?.runQuery(this.grammar.compileTables());\n }\n\n /**\n * Checks if a table exists in the database.\n *\n * @param table_name - The name of the table to check\n * @returns A promise that resolves to true if the table exists, false otherwise\n *\n * @example\n * if (await schema.tableExists('users')) {\n * console.log('Users table exists');\n * }\n */\n async tableExists(table_name: string): Promise<boolean> {\n return (await this.connection?.runQuery(this.grammar.compileTableExists(table_name)))[0][\n 'exists'\n ];\n }\n}\n","import { Blueprint, Column, ForeignKeyConstraint, IndexConstraint } from './Blueprint.mjs';\nimport { Expression } from './Expression.mjs';\nimport { CompiledSql, Parameter } from './types.mjs';\n\nexport class SchemaGrammar {\n toSql(blueprint: Blueprint): string {\n if (!blueprint.existingTable) {\n return this.compileCreateTable(blueprint).sql;\n } else if (blueprint.existingTable) {\n return this.compileAlterTable(blueprint).sql;\n }\n\n throw new Error('bad blueprint to compile: ' + blueprint.tableName);\n }\n\n compileCreateTable(blueprint: Blueprint): CompiledSql {\n let sql = 'create table ' + blueprint.tableName + ' (';\n const columns = blueprint.columns\n .map((v: Column) => {\n return this.compileColumn(v);\n })\n .join(', ');\n\n const primaryKeys = this.compilePrimaryKeys(blueprint.primaryKeys);\n let foreignKeys: string[] = [];\n if (blueprint.foreignKeys.length > 0) {\n foreignKeys = blueprint.foreignKeys.map((v: ForeignKeyConstraint) => {\n return this.compileForeignKey(v);\n });\n }\n sql += [columns, primaryKeys, ...foreignKeys].join(',') + ')';\n\n const compiledSql = { sql, parts: [], bindings: [] };\n\n // If there are indexes to create, we need to return multiple statements\n if (blueprint.indexes.length > 0) {\n const indexSqls = blueprint.indexes.map((index: IndexConstraint) => {\n return this.compileIndex(blueprint.tableName, index);\n });\n return {\n sql: [compiledSql.sql, ...indexSqls.map((idx) => idx.sql)].join('; '),\n parts: [],\n bindings: compiledSql.bindings,\n };\n }\n\n return compiledSql;\n }\n\n compileAlterTable(blueprint: Blueprint): CompiledSql {\n let sql: string[] = ['alter table ' + blueprint.tableName];\n const add_columns = blueprint.columns.map((v: Column) => {\n return 'add column ' + this.compileColumn(v);\n });\n\n const drop_columns = blueprint.drop_coumns.map((v: string) => {\n return 'drop column ' + v;\n });\n\n const alterStatements = [...add_columns, ...drop_columns];\n if (alterStatements.length > 0) {\n sql = sql.concat([alterStatements.join(', ')]);\n }\n\n // Handle case where only indexes are being added without column changes\n let compiledSql: CompiledSql;\n if (alterStatements.length > 0) {\n compiledSql = { sql: sql.join(' '), parts: [], bindings: [] };\n } else {\n // No column changes, just need the base alter table statement for consistency\n compiledSql = { sql: sql.join(' ') + ' ', parts: [], bindings: [] };\n }\n\n // If there are indexes to create in alter table, add them as separate statements\n if (blueprint.indexes.length > 0) {\n const indexSqls = blueprint.indexes.map((index: IndexConstraint) => {\n return this.compileIndex(blueprint.tableName, index);\n });\n return {\n sql: [compiledSql.sql, ...indexSqls.map((idx) => idx.sql)].join('; '),\n parts: [],\n bindings: compiledSql.bindings,\n };\n }\n\n return compiledSql;\n }\n\n compileColumn(column: Column): string {\n const rc = [`${column.columnName}`];\n\n if (column.properties.type === 'string') {\n rc.push('varchar(' + column.properties.length + ')');\n } else if (column.properties.type === 'char') {\n rc.push('char');\n } else if (column.properties.type === 'boolean') {\n rc.push('boolean');\n } else if (column.properties.type === 'integer') {\n rc.push('integer');\n } else if (column.properties.type === 'text') {\n rc.push('text');\n } else if (column.properties.type === 'timestamp') {\n rc.push('timestamp');\n } else if (column.properties.type === 'timestampz') {\n rc.push('timestamp with time zone');\n } else if (column.properties.type === 'serial') {\n rc.push('serial');\n } else if (column.properties.type === 'float') {\n rc.push('float');\n } else if (column.properties.type === 'double') {\n rc.push('double precision');\n } else if (column.properties.type === 'date') {\n rc.push('date');\n } else if (column.properties.type === 'json') {\n rc.push('json');\n } else if (column.properties.type === 'jsonb') {\n rc.push('jsonb');\n } else if (column.properties.type === 'raw') {\n return column.columnName;\n } else {\n throw new Error('Unknown column type: ' + column.properties.type);\n }\n\n if (column.properties.nullable) {\n rc.push('null');\n } else {\n rc.push('not null');\n }\n\n if (column.properties.unique) {\n rc.push('unique');\n }\n\n if (column.properties.default !== null) {\n rc.push('default ' + this.escape(column.properties.default));\n }\n\n return rc.join(' ');\n }\n\n escape(value: Parameter): string {\n if (value === null || value === undefined) {\n return 'null';\n }\n\n if (typeof value === 'number') {\n return value.toString();\n }\n\n if (typeof value === 'boolean') {\n return value ? 'true' : 'false';\n }\n\n if (value instanceof Date) {\n return \"'\" + value.toISOString() + \"'\";\n }\n\n if (value instanceof Expression) {\n return value.toCompiledSql().sql;\n }\n if (Array.isArray(value)) {\n return \"'{\" + value.join(',') + \"}'\";\n }\n\n return \"'\" + value.replace(\"'\", \"\\\\'\") + \"'\";\n }\n\n compilePrimaryKeys(primaryKeys: string[]): string {\n if (!primaryKeys.length) {\n return '';\n }\n\n return 'primary key (' + primaryKeys.join(', ') + ')';\n }\n\n compileTables(schema: string | string[] | undefined = undefined): CompiledSql {\n return {\n sql:\n 'select c.relname as name, n.nspname as schema, pg_total_relation_size(c.oid) as size, ' +\n \"obj_description(c.oid, 'pg_class') as comment from pg_class c, pg_namespace n \" +\n \"where c.relkind in ('r', 'p') and n.oid = c.relnamespace and \" +\n this.compileSchemaWhereClause(schema, 'n.nspname') +\n ' order by n.nspname, c.relname',\n parts: [],\n bindings: [],\n };\n }\n\n compileTableExists(tableName: string, schema: string = ''): CompiledSql {\n return {\n sql:\n 'select exists (select 1 from pg_class c, pg_namespace n where ' +\n 'n.nspname = ' +\n (schema ? this.escape(schema) : 'current_schema()') +\n \" and c.relname = $1 and c.relkind in ('r', 'p') and n.oid = c.relnamespace)\",\n parts: [],\n bindings: [tableName],\n };\n }\n\n compileDropTable(tableName: string): CompiledSql {\n return { sql: `drop table ${this.doubleQuoteString(tableName)}`, parts: [], bindings: [] };\n }\n\n compileDropTableIfExists(tableName: string): CompiledSql {\n return {\n sql: `drop table if exists ${this.doubleQuoteString(tableName)}`,\n parts: [],\n bindings: [],\n };\n }\n\n protected compileSchemaWhereClause(\n schema: string | string[] | undefined,\n column: string\n ): string {\n if (Array.isArray(schema) && schema.length > 0) {\n return `${column} in (${this.quoteString(schema)})`;\n } else if (schema && typeof schema === 'string') {\n return `${column} = ${this.quoteString(schema)}`;\n } else {\n return `${column} <> 'information_schema' and ${column} not like 'pg\\\\_%'`;\n }\n }\n\n protected quoteString(value: string | string[]): string {\n if (Array.isArray(value)) {\n return value.map((v) => `'${v.replace(/'/g, \"\\\\'\")}'`).join(', ');\n }\n return `'${value.replace(/'/g, \"\\\\'\")}'`;\n }\n\n protected doubleQuoteString(value: string | string[]): string {\n if (Array.isArray(value)) {\n return value.map((v) => this.doubleQuoteString(v)).join(', ');\n }\n return `\"${value.replace(/\"/g, '\\\\\"')}\"`;\n }\n\n protected compileForeignKey(foreignKey: ForeignKeyConstraint): string {\n //FOREIGN KEY (PersonID) REFERENCES users(id)\n const rc = [`FOREIGN KEY (${foreignKey.column})`];\n rc.push(`references ${foreignKey.reference_table.table}(${foreignKey.reference_table.column})`);\n\n if (foreignKey.onDeleteAction) {\n rc.push(`on delete ${foreignKey.onDeleteAction}`);\n }\n\n if (foreignKey.onUpdateAction) {\n rc.push(`on update ${foreignKey.onUpdateAction}`);\n }\n\n return rc.join(' ');\n }\n\n protected compileIndex(tableName: string, index: IndexConstraint): CompiledSql {\n const indexName =\n index.indexName ||\n `${tableName}_${index.columns.join('_')}_${index.unique ? 'unique' : 'index'}`;\n const uniqueKeyword = index.unique ? 'unique ' : '';\n const indexType = index._type ? ` using ${index._type}` : '';\n\n const sql = `create ${uniqueKeyword}index ${indexName} on ${tableName}${indexType} (${index.columns.join(', ')})`;\n\n return { sql, parts: [], bindings: [] };\n }\n}\n","import { SchemaGrammar } from '../../SchemaGrammar.mjs';\n\nexport class PostgresqlSchemaGrammar extends SchemaGrammar {}\n","import { Schema } from './Schema.mjs';\n\nexport abstract class Migration {\n abstract up(schema: Schema): Promise<void>;\n abstract down(schema: Schema): Promise<void>;\n}\n"],"mappings":"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","names":["import_pg","bindings","import_neko_helper","import_sql_tokenizer","import_neko_helper","Cursor"]}
|
package/dist/types.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { m as CompiledSql, J as JoinCondition, P as Parameter, n as havingType, o as joinType, s as selectType, w as whereBasic, i as whereNested, k as whereNull, g as whereOp, h as whereOpColumn, j as whereRaw, l as whereType } from './Blueprint-
|
|
1
|
+
export { m as CompiledSql, J as JoinCondition, P as Parameter, n as havingType, o as joinType, s as selectType, w as whereBasic, i as whereNested, k as whereNull, g as whereOp, h as whereOpColumn, j as whereRaw, l as whereType } from './Blueprint-D3WHeqRS.mjs';
|
|
2
2
|
import '@devbro/neko-helper';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devbro/neko-sql",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.31",
|
|
4
4
|
"description": "generic sql generator",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -29,24 +29,21 @@
|
|
|
29
29
|
"license": "MIT",
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@faker-js/faker": "^9.5.1",
|
|
32
|
-
"@types/node": "^
|
|
32
|
+
"@types/node": "^22.14.1",
|
|
33
33
|
"@types/pg": "^8.11.2",
|
|
34
34
|
"@types/pg-cursor": "^2.7.2",
|
|
35
35
|
"@typescript-eslint/eslint-plugin": "^7.1.1",
|
|
36
36
|
"@typescript-eslint/parser": "^7.1.1",
|
|
37
37
|
"eslint": "8.57.0",
|
|
38
38
|
"husky": "^9.1.7",
|
|
39
|
-
"pinst": "^3.0.0",
|
|
40
39
|
"prettier": "^3.5.3",
|
|
41
|
-
"ts-node": "^10.9.2",
|
|
42
40
|
"tsup": "^8.0.2",
|
|
43
|
-
"typescript": "^5.
|
|
41
|
+
"typescript": "^5.8.3",
|
|
44
42
|
"vitest": "^3.2.4"
|
|
45
43
|
},
|
|
46
44
|
"dependencies": {
|
|
47
45
|
"pg": "^8.11.3",
|
|
48
46
|
"pg-cursor": "^2.15.0",
|
|
49
|
-
"pg-pool": "^3.7.1",
|
|
50
47
|
"sql-tokenizer": "^1.0.4"
|
|
51
48
|
},
|
|
52
49
|
"directories": {
|