@devbro/neko-sql 0.1.16 → 0.1.17
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-mmlqFfF6.d.mts → Blueprint-DiSVtLdl.d.mts} +13 -8
- package/dist/Blueprint.d.mts +1 -1
- package/dist/Connection.d.mts +1 -1
- package/dist/Expression.d.mts +1 -1
- package/dist/Expression.mjs +3 -1
- package/dist/Expression.mjs.map +1 -1
- package/dist/Migration.d.mts +1 -1
- package/dist/Query.d.mts +1 -1
- package/dist/Query.mjs +15 -2
- package/dist/Query.mjs.map +1 -1
- package/dist/QueryGrammar.d.mts +1 -1
- package/dist/QueryGrammar.mjs +149 -72
- package/dist/QueryGrammar.mjs.map +1 -1
- package/dist/Schema.d.mts +1 -1
- package/dist/Schema.mjs +2 -2
- package/dist/Schema.mjs.map +1 -1
- package/dist/SchemaGrammar.d.mts +1 -1
- package/dist/SchemaGrammar.mjs +14 -6
- package/dist/SchemaGrammar.mjs.map +1 -1
- package/dist/databases/index.d.mts +1 -1
- package/dist/databases/postgresql/PostgresqlConnection.d.mts +1 -1
- package/dist/databases/postgresql/PostgresqlConnection.mjs +6 -1
- package/dist/databases/postgresql/PostgresqlConnection.mjs.map +1 -1
- package/dist/databases/postgresql/PostgresqlQueryGrammar.d.mts +1 -3
- package/dist/databases/postgresql/PostgresqlQueryGrammar.mjs +0 -12
- package/dist/databases/postgresql/PostgresqlQueryGrammar.mjs.map +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 +189 -96
- package/dist/index.js.map +1 -1
- package/dist/types.d.mts +1 -1
- package/package.json +5 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/QueryGrammar.mts"],"sourcesContent":["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\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 sql = '';\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 if (!sql) {\n sql = r.sql;\n } else if (r.sql) {\n sql += ' ' + r.sql;\n }\n bindings = [...bindings, ...r.bindings];\n }\n return { sql, bindings };\n }\n\n compileCount(query: Query): CompiledSql {\n let sql = '';\n let bindings: Parameter[] = [];\n\n for (const part of this.sqlParts) {\n // @ts-ignore\n let parts = query.parts[part];\n if (part === 'select') {\n parts = ['count(*) as count'];\n }\n // @ts-ignore\n const funcName: keyof this = 'compile' + toUpperFirst(part);\n // @ts-ignore\n const r = this[funcName](parts);\n if (!sql) {\n sql = r.sql;\n } else if (r.sql) {\n sql += ' ' + r.sql;\n }\n bindings = [...bindings, ...r.bindings];\n }\n return { sql, bindings };\n }\n\n compileSelect(selects: selectType[]): CompiledSql {\n const rc = selects\n .map((v) => {\n return v;\n })\n .join(', ');\n\n return { sql: 'select ' + rc, bindings: [] };\n }\n\n compileTable(tableName: string): CompiledSql {\n let rc = '';\n if (tableName.length) {\n rc = 'from ' + tableName;\n }\n\n return { sql: rc, bindings: [] };\n }\n\n compileJoin(joins: joinType[]): CompiledSql {\n let sql = '';\n let bindings: Parameter[] = [];\n\n for (const j of joins) {\n sql += ' ' + j.type + ' join ' + j.table + ' on ';\n\n const where = this.compileWhere(j.conditions);\n if (where.sql.startsWith('where ')) {\n where.sql = where.sql.substring('where '.length);\n }\n\n sql += '(';\n sql += where.sql;\n sql += ')';\n\n bindings = [...bindings, ...where.bindings];\n }\n\n return { sql, bindings };\n }\n\n compileWhere(wheres: whereType[]): CompiledSql {\n let sql = '';\n let bindings: Parameter[] = [];\n\n for (const w of wheres) {\n sql += ' ' + w.joinCondition + ' ';\n if (w.negateCondition) {\n sql += 'not ';\n }\n const funcName = 'compileWhere' + toUpperFirst(w.type);\n // @ts-ignore\n const wh = this[funcName](w);\n sql += wh.sql;\n bindings = [...bindings, ...wh.bindings];\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 return { sql, bindings };\n }\n\n compileWhereNested(w: whereNested): CompiledSql {\n const subQuery = w.query;\n const { sql, bindings } = subQuery.grammar.compileWhere(subQuery.parts.where);\n let sql2 = sql.replace(/^where /, '');\n return {\n sql: `(${sql2})`,\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(${this.getVariablePlaceholder()})`,\n bindings: [w.value],\n };\n }\n\n return {\n sql: `${w.column} ${w.operation} ${this.getVariablePlaceholder()}`,\n bindings: [w.value],\n };\n }\n\n compileWhereOperationColumn(w: whereOpColumn): CompiledSql {\n return {\n sql: `${w.column1} ${w.operation} ${w.column2}`,\n bindings: [],\n };\n }\n\n compileWhereRaw(w: whereRaw): CompiledSql {\n let sql = w.sql.replace(/\\?/g, () => this.getVariablePlaceholder());\n\n return {\n sql: sql,\n bindings: w.bindings,\n };\n }\n\n compileOrderBy(orderBy: string[]): CompiledSql {\n let rc = '';\n if (orderBy.length) {\n rc = 'order by ' + orderBy.join(', ');\n }\n\n return { sql: rc, bindings: [] };\n }\n\n compileLimit(limit: number | null): CompiledSql {\n let rc = '';\n if (limit !== null) {\n rc = 'limit ' + limit;\n }\n\n return { sql: rc, bindings: [] };\n }\n\n compileOffset(offset: number | null): CompiledSql {\n let rc = '';\n if (offset !== null) {\n rc = 'offset ' + offset;\n }\n\n return { sql: rc, bindings: [] };\n }\n\n abstract getVariablePlaceholder(): string;\n\n compileWhereNull(w: whereNull): CompiledSql {\n return {\n sql: `${w.column} is null`,\n bindings: [],\n };\n }\n\n compileInsert(query: Query, data: Record<string, Parameter>): CompiledSql {\n let sql = '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 columns.push(k);\n bindings.push(v);\n values.push(this.getVariablePlaceholder());\n }\n\n sql += columns.join(', ') + ') values (' + values + ')';\n\n return { sql, 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 let sql = 'update ' + query.parts.table + ' set ';\n const bindings: Parameter[] = [];\n\n const setParts = [];\n for (const [k, v] of Object.entries(data)) {\n setParts.push(`${k} = ${this.getVariablePlaceholder()}`);\n bindings.push(v);\n }\n\n sql += setParts.join(', ');\n\n const where_csql = this.compileWhere(query.parts.where);\n sql += ' ' + where_csql.sql;\n bindings.push(...where_csql.bindings);\n\n return { sql, bindings };\n }\n\n compileDelete(query: Query): CompiledSql {\n let sql = 'delete from ' + query.parts.table;\n const where_csql = this.compileWhere(query.parts.where);\n sql += ' ' + where_csql.sql;\n return { sql, 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 sql = '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 columns.push(k);\n bindings.push(v);\n values.push(this.getVariablePlaceholder());\n }\n\n sql += columns.join(', ') + ') values (' + values + ')';\n\n sql += ' on conflict (' + conflictFields.join(', ') + ') do update set ';\n const setParts = [];\n for (const f of updateFields) {\n setParts.push(`${f} = excluded.${f}`);\n }\n sql += setParts.join(', ');\n\n const where_csql = this.compileWhere(query.parts.where);\n sql += ' ' + where_csql.sql;\n bindings.push(...where_csql.bindings);\n\n return { sql, bindings };\n }\n\n compileGroupBy(groupBy: string[]): CompiledSql {\n let rc = '';\n if (groupBy.length) {\n rc = 'group by ' + groupBy.join(', ');\n }\n\n return { sql: rc, bindings: [] };\n }\n\n compileHaving(having: havingType[]): CompiledSql {\n let sql = '';\n let bindings: Parameter[] = [];\n\n for (const w of having) {\n sql += ' ' + w.joinCondition + ' ';\n if (w.negateCondition) {\n sql += 'not ';\n }\n const funcName = 'compileHaving' + toUpperFirst(w.type);\n // @ts-ignore\n const wh = this[funcName](w);\n sql += wh.sql;\n bindings = [...bindings, ...wh.bindings];\n }\n if (sql.startsWith(' and ')) {\n sql = 'having ' + sql.substring(' and '.length);\n } else if (sql.startsWith(' or ')) {\n sql = 'having ' + sql.substring(' or '.length);\n }\n return { sql, bindings };\n }\n\n compileHavingOperation(w: whereOp): CompiledSql {\n return {\n sql: `${w.column} ${w.operation} ${this.getVariablePlaceholder()}`,\n bindings: [w.value],\n };\n }\n\n compileHavingRaw(w: whereRaw): CompiledSql {\n return {\n sql: w.sql,\n bindings: w.bindings,\n };\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/QueryGrammar.mts"],"sourcesContent":["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';\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(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"],"mappings":"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","names":["bindings"]}
|
package/dist/Schema.d.mts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { S as Schema } from './Blueprint-
|
|
1
|
+
export { S as Schema } from './Blueprint-DiSVtLdl.mjs';
|
package/dist/Schema.mjs
CHANGED
|
@@ -16,7 +16,7 @@ class Schema {
|
|
|
16
16
|
structMethod(blueprint);
|
|
17
17
|
const grammar = new SchemaGrammar();
|
|
18
18
|
const sql = grammar.toSql(blueprint);
|
|
19
|
-
await this.connection?.runQuery({ sql, bindings: [] });
|
|
19
|
+
await this.connection?.runQuery({ sql, parts: [], bindings: [] });
|
|
20
20
|
}
|
|
21
21
|
async alterTable(tableName, structMethod) {
|
|
22
22
|
const blueprint = new Blueprint();
|
|
@@ -24,7 +24,7 @@ class Schema {
|
|
|
24
24
|
structMethod(blueprint);
|
|
25
25
|
const grammar = new SchemaGrammar();
|
|
26
26
|
const sql = grammar.toSql(blueprint);
|
|
27
|
-
await this.connection?.runQuery({ sql, bindings: [] });
|
|
27
|
+
await this.connection?.runQuery({ sql, parts: [], bindings: [] });
|
|
28
28
|
}
|
|
29
29
|
async dropTable(tableName) {
|
|
30
30
|
const grammar = new SchemaGrammar();
|
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 grammar = new SchemaGrammar();\n const sql = grammar.toSql(blueprint);\n await this.connection?.runQuery({ sql, 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, 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"],"mappings":";;AAAA,SAAS,iBAAiB;AAE1B,SAAS,qBAAqB;AAEvB,MAAM,OAAO;AAAA,EAClB,YACmB,YACA,SACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EARL,OAIoB;AAAA;AAAA;AAAA,EAMlB,MAAM,YAAY,WAAmB,cAA8C;AACjF,UAAM,YAAY,IAAI,UAAU;AAChC,cAAU,aAAa,WAAW,KAAK;AACvC,iBAAa,SAAS;AAEtB,UAAM,UAAU,IAAI,cAAc;AAClC,UAAM,MAAM,QAAQ,MAAM,SAAS;AACnC,UAAM,KAAK,YAAY,SAAS,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC;AAAA,
|
|
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 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"],"mappings":";;AAAA,SAAS,iBAAiB;AAE1B,SAAS,qBAAqB;AAEvB,MAAM,OAAO;AAAA,EAClB,YACmB,YACA,SACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EARL,OAIoB;AAAA;AAAA;AAAA,EAMlB,MAAM,YAAY,WAAmB,cAA8C;AACjF,UAAM,YAAY,IAAI,UAAU;AAChC,cAAU,aAAa,WAAW,KAAK;AACvC,iBAAa,SAAS;AAEtB,UAAM,UAAU,IAAI,cAAc;AAClC,UAAM,MAAM,QAAQ,MAAM,SAAS;AACnC,UAAM,KAAK,YAAY,SAAS,EAAE,KAAK,OAAO,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC;AAAA,EAClE;AAAA,EAEA,MAAM,WAAW,WAAmB,cAA8C;AAChF,UAAM,YAAY,IAAI,UAAU;AAChC,cAAU,aAAa,WAAW,IAAI;AACtC,iBAAa,SAAS;AAEtB,UAAM,UAAU,IAAI,cAAc;AAClC,UAAM,MAAM,QAAQ,MAAM,SAAS;AACnC,UAAM,KAAK,YAAY,SAAS,EAAE,KAAK,OAAO,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC;AAAA,EAClE;AAAA,EAEA,MAAM,UAAU,WAAmB;AACjC,UAAM,UAAU,IAAI,cAAc;AAClC,UAAM,KAAK,YAAY,SAAS,QAAQ,iBAAiB,SAAS,CAAC;AAAA,EACrE;AAAA,EAEA,MAAM,kBAAkB,WAAmB;AACzC,UAAM,UAAU,IAAI,cAAc;AAClC,UAAM,KAAK,YAAY,SAAS,QAAQ,yBAAyB,SAAS,CAAC;AAAA,EAC7E;AAAA,EAEA,MAAM,SAAS;AACb,UAAM,UAAU,IAAI,cAAc;AAClC,WAAO,MAAM,KAAK,YAAY,SAAS,QAAQ,cAAc,CAAC;AAAA,EAChE;AAAA,EAEA,MAAM,YAAY,YAAsC;AACtD,UAAM,UAAU,IAAI,cAAc;AAClC,YAAQ,MAAM,KAAK,YAAY,SAAS,QAAQ,mBAAmB,UAAU,CAAC,GAAG,CAAC,EAAE,QAAQ;AAAA,EAC9F;AACF;","names":[]}
|
package/dist/SchemaGrammar.d.mts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { e as SchemaGrammar } from './Blueprint-
|
|
1
|
+
export { e as SchemaGrammar } from './Blueprint-DiSVtLdl.mjs';
|
package/dist/SchemaGrammar.mjs
CHANGED
|
@@ -26,13 +26,14 @@ class SchemaGrammar {
|
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
28
|
sql += [columns, primaryKeys, ...foreignKeys].join(",") + ")";
|
|
29
|
-
const compiledSql = { sql, bindings: [] };
|
|
29
|
+
const compiledSql = { sql, parts: [], bindings: [] };
|
|
30
30
|
if (blueprint.indexes.length > 0) {
|
|
31
31
|
const indexSqls = blueprint.indexes.map((index) => {
|
|
32
32
|
return this.compileIndex(blueprint.tableName, index);
|
|
33
33
|
});
|
|
34
34
|
return {
|
|
35
35
|
sql: [compiledSql.sql, ...indexSqls.map((idx) => idx.sql)].join("; "),
|
|
36
|
+
parts: [],
|
|
36
37
|
bindings: compiledSql.bindings
|
|
37
38
|
};
|
|
38
39
|
}
|
|
@@ -52,9 +53,9 @@ class SchemaGrammar {
|
|
|
52
53
|
}
|
|
53
54
|
let compiledSql;
|
|
54
55
|
if (alterStatements.length > 0) {
|
|
55
|
-
compiledSql = { sql: sql.join(" "), bindings: [] };
|
|
56
|
+
compiledSql = { sql: sql.join(" "), parts: [], bindings: [] };
|
|
56
57
|
} else {
|
|
57
|
-
compiledSql = { sql: sql.join(" ") + " ", bindings: [] };
|
|
58
|
+
compiledSql = { sql: sql.join(" ") + " ", parts: [], bindings: [] };
|
|
58
59
|
}
|
|
59
60
|
if (blueprint.indexes.length > 0) {
|
|
60
61
|
const indexSqls = blueprint.indexes.map((index) => {
|
|
@@ -62,6 +63,7 @@ class SchemaGrammar {
|
|
|
62
63
|
});
|
|
63
64
|
return {
|
|
64
65
|
sql: [compiledSql.sql, ...indexSqls.map((idx) => idx.sql)].join("; "),
|
|
66
|
+
parts: [],
|
|
65
67
|
bindings: compiledSql.bindings
|
|
66
68
|
};
|
|
67
69
|
}
|
|
@@ -141,20 +143,26 @@ class SchemaGrammar {
|
|
|
141
143
|
compileTables(schema = void 0) {
|
|
142
144
|
return {
|
|
143
145
|
sql: "select c.relname as name, n.nspname as schema, pg_total_relation_size(c.oid) as size, obj_description(c.oid, 'pg_class') as comment from pg_class c, pg_namespace n where c.relkind in ('r', 'p') and n.oid = c.relnamespace and " + this.compileSchemaWhereClause(schema, "n.nspname") + " order by n.nspname, c.relname",
|
|
146
|
+
parts: [],
|
|
144
147
|
bindings: []
|
|
145
148
|
};
|
|
146
149
|
}
|
|
147
150
|
compileTableExists(tableName, schema = "") {
|
|
148
151
|
return {
|
|
149
152
|
sql: "select exists (select 1 from pg_class c, pg_namespace n where n.nspname = " + (schema ? this.escape(schema) : "current_schema()") + " and c.relname = $1 and c.relkind in ('r', 'p') and n.oid = c.relnamespace)",
|
|
153
|
+
parts: [],
|
|
150
154
|
bindings: [tableName]
|
|
151
155
|
};
|
|
152
156
|
}
|
|
153
157
|
compileDropTable(tableName) {
|
|
154
|
-
return { sql: `drop table ${this.doubleQuoteString(tableName)}`, bindings: [] };
|
|
158
|
+
return { sql: `drop table ${this.doubleQuoteString(tableName)}`, parts: [], bindings: [] };
|
|
155
159
|
}
|
|
156
160
|
compileDropTableIfExists(tableName) {
|
|
157
|
-
return {
|
|
161
|
+
return {
|
|
162
|
+
sql: `drop table if exists ${this.doubleQuoteString(tableName)}`,
|
|
163
|
+
parts: [],
|
|
164
|
+
bindings: []
|
|
165
|
+
};
|
|
158
166
|
}
|
|
159
167
|
compileSchemaWhereClause(schema, column) {
|
|
160
168
|
if (Array.isArray(schema) && schema.length > 0) {
|
|
@@ -193,7 +201,7 @@ class SchemaGrammar {
|
|
|
193
201
|
const uniqueKeyword = index.unique ? "unique " : "";
|
|
194
202
|
const indexType = index._type ? ` using ${index._type}` : "";
|
|
195
203
|
const sql = `create ${uniqueKeyword}index ${indexName} on ${tableName}${indexType} (${index.columns.join(", ")})`;
|
|
196
|
-
return { sql, bindings: [] };
|
|
204
|
+
return { sql, parts: [], bindings: [] };
|
|
197
205
|
}
|
|
198
206
|
}
|
|
199
207
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/SchemaGrammar.mts"],"sourcesContent":["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, 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 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(' '), bindings: [] };\n } else {\n // No column changes, just need the base alter table statement for consistency\n compiledSql = { sql: sql.join(' ') + ' ', 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 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 {\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 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 bindings: [tableName],\n };\n }\n\n compileDropTable(tableName: string): CompiledSql {\n return { sql: `drop table ${this.doubleQuoteString(tableName)}`, bindings: [] };\n }\n\n compileDropTableIfExists(tableName: string): CompiledSql {\n return { sql: `drop table if exists ${this.doubleQuoteString(tableName)}`, bindings: [] };\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, bindings: [] };\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/SchemaGrammar.mts"],"sourcesContent":["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 {\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"],"mappings":"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","names":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
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-DiSVtLdl.mjs';
|
|
5
5
|
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, l as CompiledSql, c as Query, S as Schema } from '../../Blueprint-
|
|
3
|
+
import { b as Connection, l as CompiledSql, c as Query, S as Schema } from '../../Blueprint-DiSVtLdl.mjs';
|
|
4
4
|
import { PoolClient, Pool, PoolConfig } from 'pg';
|
|
5
5
|
|
|
6
6
|
declare class PostgresqlConnection extends Connection {
|
|
@@ -34,7 +34,12 @@ class PostgresqlConnection extends ConnectionAbs {
|
|
|
34
34
|
return true;
|
|
35
35
|
}
|
|
36
36
|
async runQuery(sql) {
|
|
37
|
-
|
|
37
|
+
let counter = 1;
|
|
38
|
+
let sql2 = sql.sql;
|
|
39
|
+
if (sql.parts && sql.parts.length > 0) {
|
|
40
|
+
sql2 = sql.parts.map((v) => v === "?" ? "$" + counter++ : v).join(" ");
|
|
41
|
+
}
|
|
42
|
+
const result = await this.connection?.query(sql2, sql.bindings);
|
|
38
43
|
return result?.rows;
|
|
39
44
|
}
|
|
40
45
|
async runCursor(sql) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/databases/postgresql/PostgresqlConnection.mts"],"sourcesContent":["import { Connection as ConnectionAbs } from '../../Connection.mjs';\nimport { Connection, 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';\n\nexport class PostgresqlConnection extends ConnectionAbs {\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.connection = await PostgresqlConnection.pool.connect();\n return true;\n }\n async runQuery(sql: CompiledSql) {\n const result = await this.connection?.query(
|
|
1
|
+
{"version":3,"sources":["../../../src/databases/postgresql/PostgresqlConnection.mts"],"sourcesContent":["import { Connection as ConnectionAbs } from '../../Connection.mjs';\nimport { Connection, 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';\n\nexport class PostgresqlConnection extends ConnectionAbs {\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.connection = await PostgresqlConnection.pool.connect();\n return true;\n }\n async runQuery(sql: CompiledSql) {\n // console.log('SQL:', sql);\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 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 await this.connection?.release();\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 if (!this.connection) {\n throw new Error('No active connection to begin a transaction.');\n }\n await this.connection.query('BEGIN');\n }\n\n async commit(): Promise<void> {\n if (!this.connection) {\n throw new Error('No active connection to commit a transaction.');\n }\n await this.connection.query('COMMIT');\n }\n\n async rollback(): Promise<void> {\n if (!this.connection) {\n throw new Error('No active connection to rollback a transaction.');\n }\n await this.connection.query('ROLLBACK');\n }\n\n static async destroy(): Promise<void> {\n PostgresqlConnection.pool.end();\n return;\n }\n}\n"],"mappings":";;AAAA,SAAS,cAAc,qBAAqB;AAE5C,SAAS,YAAY;AAErB,SAAS,aAAa;AACtB,SAAS,8BAA8B;AACvC,SAAS,cAAc;AACvB,SAAS,+BAA+B;AACxC,OAAO,YAAY;AAEZ,MAAM,6BAA6B,cAAc;AAAA,EAVxD,OAUwD;AAAA;AAAA;AAAA,EACtD;AAAA,EACA,OAAO;AAAA,EAEP,OAAO,WAAuB;AAAA,IAC5B,MAAM;AAAA,IACN,KAAK;AAAA,IACL,KAAK;AAAA,IACL,mBAAmB;AAAA;AAAA,IACnB,yBAAyB;AAAA;AAAA,IACzB,SAAS;AAAA,EACX;AAAA,EAEA,YAAY,QAAoB;AAC9B,UAAM;AACN,QAAI,CAAC,qBAAqB,MAAM;AAC9B,2BAAqB,OAAO,IAAI,KAAK,EAAE,GAAG,qBAAqB,UAAU,GAAG,OAAO,CAAC;AAAA,IACtF;AAAA,EACF;AAAA,EACA,MAAM,UAA4B;AAChC,SAAK,aAAa,MAAM,qBAAqB,KAAK,QAAQ;AAC1D,WAAO;AAAA,EACT;AAAA,EACA,MAAM,SAAS,KAAkB;AAE/B,QAAI,UAAU;AACd,QAAI,OAAO,IAAI;AACf,QAAI,IAAI,SAAS,IAAI,MAAM,SAAS,GAAG;AACrC,aAAO,IAAI,MAAM,IAAI,CAAC,MAAO,MAAM,MAAM,MAAM,YAAY,CAAE,EAAE,KAAK,GAAG;AAAA,IACzE;AAEA,UAAM,SAAS,MAAM,KAAK,YAAY,MAAM,MAAM,IAAI,QAAQ;AAC9D,WAAO,QAAQ;AAAA,EACjB;AAAA,EAEA,MAAM,UAAU,KAAgC;AAC9C,WAAO,KAAK,YAAY,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,QAAQ,CAAC;AAAA,EACjE;AAAA,EAEA,MAAM,aAA+B;AACnC,UAAM,KAAK,YAAY,QAAQ;AAC/B,WAAO;AAAA,EACT;AAAA,EAEA,WAAkB;AAChB,WAAO,IAAI,MAAM,MAAM,IAAI,uBAAuB,CAAC;AAAA,EACrD;AAAA,EAEA,YAAoB;AAClB,WAAO,IAAI,OAAO,MAAM,IAAI,wBAAwB,CAAC;AAAA,EACvD;AAAA,EAEA,kBAA0C;AACxC,WAAO,IAAI,uBAAuB;AAAA,EACpC;AAAA,EACA,mBAA4C;AAC1C,WAAO,IAAI,wBAAwB;AAAA,EACrC;AAAA,EAEA,MAAM,mBAAkC;AACtC,QAAI,CAAC,KAAK,YAAY;AACpB,YAAM,IAAI,MAAM,8CAA8C;AAAA,IAChE;AACA,UAAM,KAAK,WAAW,MAAM,OAAO;AAAA,EACrC;AAAA,EAEA,MAAM,SAAwB;AAC5B,QAAI,CAAC,KAAK,YAAY;AACpB,YAAM,IAAI,MAAM,+CAA+C;AAAA,IACjE;AACA,UAAM,KAAK,WAAW,MAAM,QAAQ;AAAA,EACtC;AAAA,EAEA,MAAM,WAA0B;AAC9B,QAAI,CAAC,KAAK,YAAY;AACpB,YAAM,IAAI,MAAM,iDAAiD;AAAA,IACnE;AACA,UAAM,KAAK,WAAW,MAAM,UAAU;AAAA,EACxC;AAAA,EAEA,aAAa,UAAyB;AACpC,yBAAqB,KAAK,IAAI;AAC9B;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { d as QueryGrammar, c as Query, l as CompiledSql, P as Parameter } from '../../Blueprint-
|
|
1
|
+
import { d as QueryGrammar, c as Query, l as CompiledSql, P as Parameter } from '../../Blueprint-DiSVtLdl.mjs';
|
|
2
2
|
|
|
3
3
|
declare class PostgresqlQueryGrammar extends QueryGrammar {
|
|
4
|
-
private parameterIndex;
|
|
5
4
|
constructor();
|
|
6
5
|
toSql(query: Query): CompiledSql;
|
|
7
|
-
getVariablePlaceholder(): string;
|
|
8
6
|
compileInsert(query: Query, data: Record<string, any>): CompiledSql;
|
|
9
7
|
compileInsertGetId(query: Query, data: Record<string, any>, options?: {
|
|
10
8
|
primaryKey: string[];
|
|
@@ -5,42 +5,30 @@ class PostgresqlQueryGrammar extends QueryGrammar {
|
|
|
5
5
|
static {
|
|
6
6
|
__name(this, "PostgresqlQueryGrammar");
|
|
7
7
|
}
|
|
8
|
-
parameterIndex;
|
|
9
8
|
constructor() {
|
|
10
9
|
super();
|
|
11
|
-
this.parameterIndex = 1;
|
|
12
10
|
}
|
|
13
11
|
toSql(query) {
|
|
14
|
-
this.parameterIndex = 1;
|
|
15
12
|
return super.toSql(query);
|
|
16
13
|
}
|
|
17
|
-
getVariablePlaceholder() {
|
|
18
|
-
return "$" + this.parameterIndex++;
|
|
19
|
-
}
|
|
20
14
|
compileInsert(query, data) {
|
|
21
|
-
this.parameterIndex = 1;
|
|
22
15
|
return super.compileInsert(query, data);
|
|
23
16
|
}
|
|
24
17
|
compileInsertGetId(query, data, options = { primaryKey: ["id"] }) {
|
|
25
|
-
this.parameterIndex = 1;
|
|
26
18
|
const rc = super.compileInsert(query, data);
|
|
27
19
|
rc.sql += ` RETURNING ${options.primaryKey.join(", ")}`;
|
|
28
20
|
return rc;
|
|
29
21
|
}
|
|
30
22
|
compileUpdate(query, data) {
|
|
31
|
-
this.parameterIndex = 1;
|
|
32
23
|
return super.compileUpdate(query, data);
|
|
33
24
|
}
|
|
34
25
|
compileDelete(query) {
|
|
35
|
-
this.parameterIndex = 1;
|
|
36
26
|
return super.compileDelete(query);
|
|
37
27
|
}
|
|
38
28
|
compileUpsert(query, data, conflictFields, updateFields) {
|
|
39
|
-
this.parameterIndex = 1;
|
|
40
29
|
return super.compileUpsert(query, data, conflictFields, updateFields);
|
|
41
30
|
}
|
|
42
31
|
compileCount(query) {
|
|
43
|
-
this.parameterIndex = 1;
|
|
44
32
|
return super.compileCount(query);
|
|
45
33
|
}
|
|
46
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/databases/postgresql/PostgresqlQueryGrammar.mts"],"sourcesContent":["import { Query } from '../../Query.mjs';\nimport { QueryGrammar } from '../../QueryGrammar.mjs';\nimport { CompiledSql, Parameter } from '../../types.mjs';\n\nexport class PostgresqlQueryGrammar extends QueryGrammar {\n
|
|
1
|
+
{"version":3,"sources":["../../../src/databases/postgresql/PostgresqlQueryGrammar.mts"],"sourcesContent":["import { Query } from '../../Query.mjs';\nimport { QueryGrammar } from '../../QueryGrammar.mjs';\nimport { CompiledSql, Parameter } from '../../types.mjs';\n\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 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"],"mappings":";;AACA,SAAS,oBAAoB;AAGtB,MAAM,+BAA+B,aAAa;AAAA,EAJzD,OAIyD;AAAA;AAAA;AAAA,EACvD,cAAc;AACZ,UAAM;AAAA,EACR;AAAA,EAEA,MAAM,OAA2B;AAC/B,WAAO,MAAM,MAAM,KAAK;AAAA,EAC1B;AAAA,EAEA,cAAc,OAAc,MAAwC;AAClE,WAAO,MAAM,cAAc,OAAO,IAAI;AAAA,EACxC;AAAA,EAEA,mBACE,OACA,MACA,UAAoC,EAAE,YAAY,CAAC,IAAI,EAAE,GAC5C;AACb,UAAM,KAAK,MAAM,cAAc,OAAO,IAAI;AAC1C,OAAG,OAAO,cAAc,QAAQ,WAAW,KAAK,IAAI,CAAC;AACrD,WAAO;AAAA,EACT;AAAA,EAEA,cAAc,OAAc,MAAwC;AAClE,WAAO,MAAM,cAAc,OAAO,IAAI;AAAA,EACxC;AAAA,EAEA,cAAc,OAA2B;AACvC,WAAO,MAAM,cAAc,KAAK;AAAA,EAClC;AAAA,EAEA,cACE,OACA,MACA,gBACA,cACa;AACb,WAAO,MAAM,cAAc,OAAO,MAAM,gBAAgB,YAAY;AAAA,EACtE;AAAA,EAEA,aAAa,OAA2B;AACtC,WAAO,MAAM,aAAa,KAAK;AAAA,EACjC;AACF;","names":[]}
|
|
@@ -1,5 +1,5 @@
|
|
|
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-DiSVtLdl.mjs';
|
|
5
5
|
import 'pg';
|
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
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, l as CompiledSql, b as Connection, F as ForeignKeyConstraint, I as IndexConstraint, J as JoinCondition, P as Parameter, c as Query, d as QueryGrammar, Q as QueryParts, S as Schema, e as SchemaGrammar, m as havingType, n as joinType, s as selectType, w as whereBasic, h as whereNested, j as whereNull, f as whereOp, g as whereOpColumn, i as whereRaw, k as whereType } from './Blueprint-
|
|
4
|
+
export { B as Blueprint, a as Column, C as ColumnPropertiesType, l as CompiledSql, b as Connection, F as ForeignKeyConstraint, I as IndexConstraint, J as JoinCondition, P as Parameter, c as Query, d as QueryGrammar, Q as QueryParts, S as Schema, e as SchemaGrammar, m as havingType, n as joinType, s as selectType, w as whereBasic, h as whereNested, j as whereNull, f as whereOp, g as whereOpColumn, i as whereRaw, k as whereType } from './Blueprint-DiSVtLdl.mjs';
|
|
5
5
|
export { Migration } from './Migration.mjs';
|
|
6
6
|
import 'pg';
|