xansql 1.0.8 → 1.0.9
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/core/Xansql.cjs +7 -8
- package/core/Xansql.cjs.map +1 -1
- package/core/Xansql.d.ts +2 -3
- package/core/Xansql.mjs +7 -8
- package/core/Xansql.mjs.map +1 -1
- package/core/classes/ForeignInfo.cjs +3 -2
- package/core/classes/ForeignInfo.cjs.map +1 -1
- package/core/classes/ForeignInfo.d.ts +1 -2
- package/core/classes/ForeignInfo.mjs +3 -2
- package/core/classes/ForeignInfo.mjs.map +1 -1
- package/core/classes/Migration/TableMigration.cjs +24 -15
- package/core/classes/Migration/TableMigration.cjs.map +1 -1
- package/core/classes/Migration/TableMigration.mjs +25 -16
- package/core/classes/Migration/TableMigration.mjs.map +1 -1
- package/core/classes/Migration/index.cjs +13 -10
- package/core/classes/Migration/index.cjs.map +1 -1
- package/core/classes/Migration/index.mjs +14 -11
- package/core/classes/Migration/index.mjs.map +1 -1
- package/core/classes/{ModelFormatter.cjs → ModelFactory.cjs} +82 -56
- package/core/classes/ModelFactory.cjs.map +1 -0
- package/core/classes/{ModelFormatter.d.ts → ModelFactory.d.ts} +7 -2
- package/core/classes/{ModelFormatter.mjs → ModelFactory.mjs} +82 -56
- package/core/classes/ModelFactory.mjs.map +1 -0
- package/core/types.d.ts +1 -1
- package/dialect/MysqlDialect.cjs +7 -4
- package/dialect/MysqlDialect.cjs.map +1 -1
- package/dialect/MysqlDialect.d.ts +7 -4
- package/dialect/MysqlDialect.mjs +7 -4
- package/dialect/MysqlDialect.mjs.map +1 -1
- package/dialect/PostgresDialect.cjs +5 -2
- package/dialect/PostgresDialect.cjs.map +1 -1
- package/dialect/PostgresDialect.d.ts +5 -2
- package/dialect/PostgresDialect.mjs +5 -2
- package/dialect/PostgresDialect.mjs.map +1 -1
- package/dialect/SqliteDialect.cjs +3 -2
- package/dialect/SqliteDialect.cjs.map +1 -1
- package/dialect/SqliteDialect.d.ts +3 -2
- package/dialect/SqliteDialect.mjs +3 -2
- package/dialect/SqliteDialect.mjs.map +1 -1
- package/dialect/XansqlBridge/XansqlBridgeServer.cjs.map +1 -1
- package/dialect/XansqlBridge/XansqlBridgeServer.mjs.map +1 -1
- package/dialect/XansqlBridge/base.cjs +10 -5
- package/dialect/XansqlBridge/base.cjs.map +1 -1
- package/dialect/XansqlBridge/base.mjs +10 -5
- package/dialect/XansqlBridge/base.mjs.map +1 -1
- package/model/Args/WhereArgs.cjs +5 -8
- package/model/Args/WhereArgs.cjs.map +1 -1
- package/model/Args/WhereArgs.mjs +6 -9
- package/model/Args/WhereArgs.mjs.map +1 -1
- package/model/Base.cjs +2 -1
- package/model/Base.cjs.map +1 -1
- package/model/Base.mjs +2 -1
- package/model/Base.mjs.map +1 -1
- package/model/Executer/Aggregate/SelectArgs.cjs +2 -1
- package/model/Executer/Aggregate/SelectArgs.cjs.map +1 -1
- package/model/Executer/Aggregate/SelectArgs.mjs +2 -1
- package/model/Executer/Aggregate/SelectArgs.mjs.map +1 -1
- package/model/Executer/Aggregate/index.cjs +4 -4
- package/model/Executer/Aggregate/index.cjs.map +1 -1
- package/model/Executer/Aggregate/index.mjs +4 -4
- package/model/Executer/Aggregate/index.mjs.map +1 -1
- package/model/Executer/Create/CreateDataArgs.cjs +9 -5
- package/model/Executer/Create/CreateDataArgs.cjs.map +1 -1
- package/model/Executer/Create/CreateDataArgs.mjs +10 -6
- package/model/Executer/Create/CreateDataArgs.mjs.map +1 -1
- package/model/Executer/Create/index.cjs +1 -1
- package/model/Executer/Create/index.cjs.map +1 -1
- package/model/Executer/Create/index.mjs +1 -1
- package/model/Executer/Create/index.mjs.map +1 -1
- package/model/Executer/Delete/index.cjs +2 -1
- package/model/Executer/Delete/index.cjs.map +1 -1
- package/model/Executer/Delete/index.mjs +2 -1
- package/model/Executer/Delete/index.mjs.map +1 -1
- package/model/Executer/Find/SelectArgs.cjs +3 -3
- package/model/Executer/Find/SelectArgs.cjs.map +1 -1
- package/model/Executer/Find/SelectArgs.mjs +3 -3
- package/model/Executer/Find/SelectArgs.mjs.map +1 -1
- package/model/Executer/Update/UpdateDataArgs.cjs +4 -4
- package/model/Executer/Update/UpdateDataArgs.cjs.map +1 -1
- package/model/Executer/Update/UpdateDataArgs.mjs +5 -5
- package/model/Executer/Update/UpdateDataArgs.mjs.map +1 -1
- package/model/Executer/Update/index.cjs +1 -1
- package/model/Executer/Update/index.cjs.map +1 -1
- package/model/Executer/Update/index.mjs +1 -1
- package/model/Executer/Update/index.mjs.map +1 -1
- package/model/include/ValueFormatter.cjs +72 -17
- package/model/include/ValueFormatter.cjs.map +1 -1
- package/model/include/ValueFormatter.d.ts +1 -1
- package/model/include/ValueFormatter.mjs +72 -17
- package/model/include/ValueFormatter.mjs.map +1 -1
- package/model/index.cjs +8 -7
- package/model/index.cjs.map +1 -1
- package/model/index.mjs +8 -7
- package/model/index.mjs.map +1 -1
- package/package.json +12 -7
- package/utils/index.cjs +5 -2
- package/utils/index.cjs.map +1 -1
- package/utils/index.d.ts +2 -1
- package/utils/index.mjs +5 -3
- package/utils/index.mjs.map +1 -1
- package/xt/additional/IP.cjs +22 -0
- package/xt/additional/IP.cjs.map +1 -0
- package/xt/additional/IP.d.ts +6 -0
- package/xt/additional/IP.mjs +20 -0
- package/xt/additional/IP.mjs.map +1 -0
- package/xt/additional/Name.cjs +21 -0
- package/xt/additional/Name.cjs.map +1 -0
- package/xt/additional/Name.d.ts +6 -0
- package/xt/additional/Name.mjs +19 -0
- package/xt/additional/Name.mjs.map +1 -0
- package/xt/additional/Password.cjs +25 -0
- package/xt/additional/Password.cjs.map +1 -0
- package/xt/additional/Password.d.ts +6 -0
- package/xt/additional/Password.mjs +23 -0
- package/xt/additional/Password.mjs.map +1 -0
- package/xt/additional/Phone.cjs +21 -0
- package/xt/additional/Phone.cjs.map +1 -0
- package/xt/additional/Phone.d.ts +6 -0
- package/xt/additional/Phone.mjs +19 -0
- package/xt/additional/Phone.mjs.map +1 -0
- package/xt/additional/Photo.cjs +21 -0
- package/xt/additional/Photo.cjs.map +1 -0
- package/xt/additional/Photo.d.ts +6 -0
- package/xt/additional/Photo.mjs +19 -0
- package/xt/additional/Photo.mjs.map +1 -0
- package/xt/additional/Slug.cjs +21 -0
- package/xt/additional/Slug.cjs.map +1 -0
- package/xt/additional/Slug.d.ts +6 -0
- package/xt/additional/Slug.mjs +19 -0
- package/xt/additional/Slug.mjs.map +1 -0
- package/xt/additional/Url.cjs +26 -0
- package/xt/additional/Url.cjs.map +1 -0
- package/xt/additional/Url.d.ts +6 -0
- package/xt/additional/Url.mjs +24 -0
- package/xt/additional/Url.mjs.map +1 -0
- package/xt/additional/Username.cjs +21 -0
- package/xt/additional/Username.cjs.map +1 -0
- package/xt/additional/Username.d.ts +6 -0
- package/xt/additional/Username.mjs +19 -0
- package/xt/additional/Username.mjs.map +1 -0
- package/xt/fields/Array.cjs +9 -2
- package/xt/fields/Array.cjs.map +1 -1
- package/xt/fields/Array.d.ts +2 -0
- package/xt/fields/Array.mjs +9 -2
- package/xt/fields/Array.mjs.map +1 -1
- package/xt/fields/Boolean.cjs +10 -5
- package/xt/fields/Boolean.cjs.map +1 -1
- package/xt/fields/Boolean.d.ts +2 -0
- package/xt/fields/Boolean.mjs +10 -5
- package/xt/fields/Boolean.mjs.map +1 -1
- package/xt/fields/Date.cjs +12 -12
- package/xt/fields/Date.cjs.map +1 -1
- package/xt/fields/Date.d.ts +2 -0
- package/xt/fields/Date.mjs +12 -12
- package/xt/fields/Date.mjs.map +1 -1
- package/xt/fields/Enum.cjs +10 -4
- package/xt/fields/Enum.cjs.map +1 -1
- package/xt/fields/Enum.d.ts +2 -0
- package/xt/fields/Enum.mjs +10 -4
- package/xt/fields/Enum.mjs.map +1 -1
- package/xt/fields/File.cjs +9 -2
- package/xt/fields/File.cjs.map +1 -1
- package/xt/fields/File.d.ts +2 -0
- package/xt/fields/File.mjs +9 -2
- package/xt/fields/File.mjs.map +1 -1
- package/xt/fields/IDField.cjs +8 -0
- package/xt/fields/IDField.cjs.map +1 -1
- package/xt/fields/IDField.d.ts +2 -0
- package/xt/fields/IDField.mjs +8 -0
- package/xt/fields/IDField.mjs.map +1 -1
- package/xt/fields/Number.cjs +10 -5
- package/xt/fields/Number.cjs.map +1 -1
- package/xt/fields/Number.d.ts +2 -0
- package/xt/fields/Number.mjs +10 -5
- package/xt/fields/Number.mjs.map +1 -1
- package/xt/fields/Object.cjs +10 -5
- package/xt/fields/Object.cjs.map +1 -1
- package/xt/fields/Object.d.ts +2 -0
- package/xt/fields/Object.mjs +10 -5
- package/xt/fields/Object.mjs.map +1 -1
- package/xt/fields/Record.cjs +10 -5
- package/xt/fields/Record.cjs.map +1 -1
- package/xt/fields/Record.d.ts +2 -0
- package/xt/fields/Record.mjs +10 -5
- package/xt/fields/Record.mjs.map +1 -1
- package/xt/fields/Schema.cjs +12 -1
- package/xt/fields/Schema.cjs.map +1 -1
- package/xt/fields/Schema.d.ts +4 -1
- package/xt/fields/Schema.mjs +12 -1
- package/xt/fields/Schema.mjs.map +1 -1
- package/xt/fields/String.cjs +12 -9
- package/xt/fields/String.cjs.map +1 -1
- package/xt/fields/String.d.ts +2 -0
- package/xt/fields/String.mjs +12 -9
- package/xt/fields/String.mjs.map +1 -1
- package/xt/fields/Tuple.cjs +10 -5
- package/xt/fields/Tuple.cjs.map +1 -1
- package/xt/fields/Tuple.d.ts +2 -0
- package/xt/fields/Tuple.mjs +10 -5
- package/xt/fields/Tuple.mjs.map +1 -1
- package/xt/fields/Union.cjs +10 -5
- package/xt/fields/Union.cjs.map +1 -1
- package/xt/fields/Union.d.ts +2 -0
- package/xt/fields/Union.mjs +10 -5
- package/xt/fields/Union.mjs.map +1 -1
- package/xt/index.cjs +16 -100
- package/xt/index.cjs.map +1 -1
- package/xt/index.d.ts +16 -9
- package/xt/index.mjs +16 -100
- package/xt/index.mjs.map +1 -1
- package/core/classes/ModelFormatter.cjs.map +0 -1
- package/core/classes/ModelFormatter.mjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MysqlDialect.mjs","sources":["../../src/dialect/MysqlDialect.ts"],"sourcesContent":["import { PoolOptions } from 'mysql2';\nimport mysql from 'mysql2/promise';\nimport { ExecuterResult } from '../core/types';\n\nconst MysqlDialect = (config:
|
|
1
|
+
{"version":3,"file":"MysqlDialect.mjs","sources":["../../src/dialect/MysqlDialect.ts"],"sourcesContent":["import { PoolOptions } from 'mysql2';\nimport mysql from 'mysql2/promise';\nimport { ExecuterResult, XansqlDialectEngine, XansqlFileConfig } from '../core/types';\n\nconst MysqlDialect = ({ file, ...config }: PoolOptions & { file?: XansqlFileConfig }) => {\n const pool = mysql.createPool(typeof config === 'string' ? { uri: config } : config);\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n const conn = await pool.getConnection();\n try {\n const [rows] = await conn.query(sql);\n const result: any = rows;\n\n return {\n results: result,\n insertId: result?.insertId ?? 0,\n affectedRows: result?.affectedRows ?? 0\n };\n } finally {\n conn.release();\n }\n };\n\n const getSchema = async () => {\n const conn = await pool.getConnection();\n\n try {\n const [tables] = await conn.query<any[]>(\n `SELECT table_name as name\n FROM information_schema.tables \n WHERE table_schema = DATABASE();`\n );\n\n const schema: Record<string, any[]> = {};\n\n for (const t of tables) {\n const table = t.name;\n schema[table] = [];\n\n // Columns\n const [columns] = await conn.query<any[]>(\n `SELECT \n COLUMN_NAME as name,\n COLUMN_TYPE as type,\n IS_NULLABLE,\n COLUMN_DEFAULT,\n COLUMN_KEY\n FROM information_schema.columns\n WHERE table_schema = DATABASE()\n AND table_name = ?`,\n [table]\n );\n\n // Indexes\n const [indexes] = await conn.query<any[]>(\n `SHOW INDEX FROM \\`${table}\\``\n );\n\n for (const col of columns) {\n const colName = col.name;\n\n const isIndexed = indexes.some(i => i.Column_name === colName);\n const isUnique = indexes.some(i => i.Column_name === colName && i.Non_unique === 0);\n\n schema[table].push({\n name: colName,\n type: col.type,\n notnull: col.IS_NULLABLE === \"NO\",\n default_value: col.COLUMN_DEFAULT,\n pk: col.COLUMN_KEY === \"PRI\",\n index: isIndexed,\n unique: isUnique,\n });\n }\n }\n\n return schema;\n } finally {\n conn.release();\n }\n };\n\n return {\n engine: 'mysql' as XansqlDialectEngine,\n execute,\n getSchema,\n file\n };\n};\n\nexport default MysqlDialect;\n"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var tslib = require('tslib');
|
|
3
4
|
var postpres = require('pg');
|
|
4
5
|
|
|
5
|
-
const PostgresDialect = (
|
|
6
|
+
const PostgresDialect = (_a) => {
|
|
7
|
+
var { file } = _a, config = tslib.__rest(_a, ["file"]);
|
|
6
8
|
let pool = new postpres.Pool(config);
|
|
7
9
|
const execute = async (sql) => {
|
|
8
10
|
const client = await pool.connect();
|
|
@@ -106,7 +108,8 @@ const PostgresDialect = (config) => {
|
|
|
106
108
|
return {
|
|
107
109
|
engine: 'postgres',
|
|
108
110
|
execute,
|
|
109
|
-
getSchema
|
|
111
|
+
getSchema,
|
|
112
|
+
file
|
|
110
113
|
};
|
|
111
114
|
};
|
|
112
115
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostgresDialect.cjs","sources":["../../src/dialect/PostgresDialect.ts"],"sourcesContent":["import postpres, { PoolConfig } from 'pg';\nimport { ExecuterResult } from '../core/types';\n\n\nconst PostgresDialect = (config: PoolConfig) => {\n let pool = new postpres.Pool(config);\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n const client = await pool.connect()\n try {\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n if (sql.startsWith('SELECT')) {\n const res = await client.query(sql);\n results = res.rows;\n affectedRows = res.rowCount || 0;\n } else {\n const res = await client.query(sql + ' RETURNING *'); // capture inserted rows\n results = res.rows;\n affectedRows = res.rowCount || 0;\n if (results[0] && 'id' in results[0]) {\n insertId = results[0].id; // assumes primary key column is `id`\n }\n }\n return { results, insertId, affectedRows };\n } finally {\n client.release();\n }\n };\n\n\n\n const getSchema = async () => {\n // Get tables (only public schema)\n const client = await pool.connect()\n const tablesRes = await client.query(`\n SELECT table_name \n FROM information_schema.tables\n WHERE table_schema = 'public';\n `);\n\n const schema: Record<string, any[]> = {};\n\n for (const row of tablesRes.rows) {\n const table = row.table_name;\n schema[table] = [];\n\n // Columns\n const columnsRes = await client.query(`\n SELECT \n column_name AS name,\n data_type AS type,\n is_nullable,\n column_default,\n udt_name\n FROM information_schema.columns\n WHERE table_schema = 'public'\n AND table_name = '${table}';\n `);\n\n // Indexes\n const indexesRes = await client.query(`\n SELECT\n i.relname AS index_name,\n ix.indisunique AS unique,\n a.attname AS column_name\n FROM \n pg_class t,\n pg_class i,\n pg_index ix,\n pg_attribute a\n WHERE \n t.oid = ix.indrelid\n AND i.oid = ix.indexrelid\n AND a.attrelid = t.oid\n AND a.attnum = ANY(ix.indkey)\n AND t.relkind = 'r'\n AND t.relname = '${table}';\n `);\n\n // Primary keys\n const pkRes = await client.query(`\n SELECT\n kcu.column_name\n FROM \n information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu \n ON tc.constraint_name = kcu.constraint_name\n WHERE \n tc.constraint_type = 'PRIMARY KEY'\n AND tc.table_name = '${table}';\n `);\n\n const pkColumns = pkRes.rows.map(r => r.column_name);\n\n for (const col of columnsRes.rows) {\n const colName = col.name;\n\n const isIndexed = indexesRes.rows.some(i => i.column_name === colName);\n const isUnique = indexesRes.rows.some(i => i.column_name === colName && i.unique);\n\n schema[table].push({\n name: colName,\n type: col.udt_name ?? col.type,\n notnull: col.is_nullable === \"NO\",\n default_value: col.column_default,\n pk: pkColumns.includes(colName),\n index: isIndexed,\n unique: isUnique\n });\n }\n }\n\n return schema;\n };\n\n\n return {\n engine: 'postgres' as const,\n execute,\n getSchema\n };\n};\n\nexport default PostgresDialect;\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PostgresDialect.cjs","sources":["../../src/dialect/PostgresDialect.ts"],"sourcesContent":["import postpres, { PoolConfig } from 'pg';\nimport { ExecuterResult, XansqlFileConfig } from '../core/types';\n\n\nconst PostgresDialect = ({ file, ...config }: PoolConfig & { file?: XansqlFileConfig }) => {\n let pool = new postpres.Pool(config);\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n const client = await pool.connect()\n try {\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n if (sql.startsWith('SELECT')) {\n const res = await client.query(sql);\n results = res.rows;\n affectedRows = res.rowCount || 0;\n } else {\n const res = await client.query(sql + ' RETURNING *'); // capture inserted rows\n results = res.rows;\n affectedRows = res.rowCount || 0;\n if (results[0] && 'id' in results[0]) {\n insertId = results[0].id; // assumes primary key column is `id`\n }\n }\n return { results, insertId, affectedRows };\n } finally {\n client.release();\n }\n };\n\n\n\n const getSchema = async () => {\n // Get tables (only public schema)\n const client = await pool.connect()\n const tablesRes = await client.query(`\n SELECT table_name \n FROM information_schema.tables\n WHERE table_schema = 'public';\n `);\n\n const schema: Record<string, any[]> = {};\n\n for (const row of tablesRes.rows) {\n const table = row.table_name;\n schema[table] = [];\n\n // Columns\n const columnsRes = await client.query(`\n SELECT \n column_name AS name,\n data_type AS type,\n is_nullable,\n column_default,\n udt_name\n FROM information_schema.columns\n WHERE table_schema = 'public'\n AND table_name = '${table}';\n `);\n\n // Indexes\n const indexesRes = await client.query(`\n SELECT\n i.relname AS index_name,\n ix.indisunique AS unique,\n a.attname AS column_name\n FROM \n pg_class t,\n pg_class i,\n pg_index ix,\n pg_attribute a\n WHERE \n t.oid = ix.indrelid\n AND i.oid = ix.indexrelid\n AND a.attrelid = t.oid\n AND a.attnum = ANY(ix.indkey)\n AND t.relkind = 'r'\n AND t.relname = '${table}';\n `);\n\n // Primary keys\n const pkRes = await client.query(`\n SELECT\n kcu.column_name\n FROM \n information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu \n ON tc.constraint_name = kcu.constraint_name\n WHERE \n tc.constraint_type = 'PRIMARY KEY'\n AND tc.table_name = '${table}';\n `);\n\n const pkColumns = pkRes.rows.map(r => r.column_name);\n\n for (const col of columnsRes.rows) {\n const colName = col.name;\n\n const isIndexed = indexesRes.rows.some(i => i.column_name === colName);\n const isUnique = indexesRes.rows.some(i => i.column_name === colName && i.unique);\n\n schema[table].push({\n name: colName,\n type: col.udt_name ?? col.type,\n notnull: col.is_nullable === \"NO\",\n default_value: col.column_default,\n pk: pkColumns.includes(colName),\n index: isIndexed,\n unique: isUnique\n });\n }\n }\n\n return schema;\n };\n\n\n return {\n engine: 'postgres' as const,\n execute,\n getSchema,\n file\n };\n};\n\nexport default PostgresDialect;\n"],"names":["__rest"],"mappings":"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"}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { PoolConfig } from 'pg';
|
|
2
|
-
import { ExecuterResult } from '../core/types';
|
|
3
|
-
declare const PostgresDialect: (config: PoolConfig
|
|
2
|
+
import { ExecuterResult, XansqlFileConfig } from '../core/types';
|
|
3
|
+
declare const PostgresDialect: ({ file, ...config }: PoolConfig & {
|
|
4
|
+
file?: XansqlFileConfig;
|
|
5
|
+
}) => {
|
|
4
6
|
engine: "postgres";
|
|
5
7
|
execute: (sql: string) => Promise<ExecuterResult>;
|
|
6
8
|
getSchema: () => Promise<Record<string, any[]>>;
|
|
9
|
+
file: XansqlFileConfig;
|
|
7
10
|
};
|
|
8
11
|
export default PostgresDialect;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { __rest } from 'tslib';
|
|
1
2
|
import postpres from 'pg';
|
|
2
3
|
|
|
3
|
-
const PostgresDialect = (
|
|
4
|
+
const PostgresDialect = (_a) => {
|
|
5
|
+
var { file } = _a, config = __rest(_a, ["file"]);
|
|
4
6
|
let pool = new postpres.Pool(config);
|
|
5
7
|
const execute = async (sql) => {
|
|
6
8
|
const client = await pool.connect();
|
|
@@ -104,7 +106,8 @@ const PostgresDialect = (config) => {
|
|
|
104
106
|
return {
|
|
105
107
|
engine: 'postgres',
|
|
106
108
|
execute,
|
|
107
|
-
getSchema
|
|
109
|
+
getSchema,
|
|
110
|
+
file
|
|
108
111
|
};
|
|
109
112
|
};
|
|
110
113
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostgresDialect.mjs","sources":["../../src/dialect/PostgresDialect.ts"],"sourcesContent":["import postpres, { PoolConfig } from 'pg';\nimport { ExecuterResult } from '../core/types';\n\n\nconst PostgresDialect = (config: PoolConfig) => {\n let pool = new postpres.Pool(config);\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n const client = await pool.connect()\n try {\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n if (sql.startsWith('SELECT')) {\n const res = await client.query(sql);\n results = res.rows;\n affectedRows = res.rowCount || 0;\n } else {\n const res = await client.query(sql + ' RETURNING *'); // capture inserted rows\n results = res.rows;\n affectedRows = res.rowCount || 0;\n if (results[0] && 'id' in results[0]) {\n insertId = results[0].id; // assumes primary key column is `id`\n }\n }\n return { results, insertId, affectedRows };\n } finally {\n client.release();\n }\n };\n\n\n\n const getSchema = async () => {\n // Get tables (only public schema)\n const client = await pool.connect()\n const tablesRes = await client.query(`\n SELECT table_name \n FROM information_schema.tables\n WHERE table_schema = 'public';\n `);\n\n const schema: Record<string, any[]> = {};\n\n for (const row of tablesRes.rows) {\n const table = row.table_name;\n schema[table] = [];\n\n // Columns\n const columnsRes = await client.query(`\n SELECT \n column_name AS name,\n data_type AS type,\n is_nullable,\n column_default,\n udt_name\n FROM information_schema.columns\n WHERE table_schema = 'public'\n AND table_name = '${table}';\n `);\n\n // Indexes\n const indexesRes = await client.query(`\n SELECT\n i.relname AS index_name,\n ix.indisunique AS unique,\n a.attname AS column_name\n FROM \n pg_class t,\n pg_class i,\n pg_index ix,\n pg_attribute a\n WHERE \n t.oid = ix.indrelid\n AND i.oid = ix.indexrelid\n AND a.attrelid = t.oid\n AND a.attnum = ANY(ix.indkey)\n AND t.relkind = 'r'\n AND t.relname = '${table}';\n `);\n\n // Primary keys\n const pkRes = await client.query(`\n SELECT\n kcu.column_name\n FROM \n information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu \n ON tc.constraint_name = kcu.constraint_name\n WHERE \n tc.constraint_type = 'PRIMARY KEY'\n AND tc.table_name = '${table}';\n `);\n\n const pkColumns = pkRes.rows.map(r => r.column_name);\n\n for (const col of columnsRes.rows) {\n const colName = col.name;\n\n const isIndexed = indexesRes.rows.some(i => i.column_name === colName);\n const isUnique = indexesRes.rows.some(i => i.column_name === colName && i.unique);\n\n schema[table].push({\n name: colName,\n type: col.udt_name ?? col.type,\n notnull: col.is_nullable === \"NO\",\n default_value: col.column_default,\n pk: pkColumns.includes(colName),\n index: isIndexed,\n unique: isUnique\n });\n }\n }\n\n return schema;\n };\n\n\n return {\n engine: 'postgres' as const,\n execute,\n getSchema\n };\n};\n\nexport default PostgresDialect;\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"PostgresDialect.mjs","sources":["../../src/dialect/PostgresDialect.ts"],"sourcesContent":["import postpres, { PoolConfig } from 'pg';\nimport { ExecuterResult, XansqlFileConfig } from '../core/types';\n\n\nconst PostgresDialect = ({ file, ...config }: PoolConfig & { file?: XansqlFileConfig }) => {\n let pool = new postpres.Pool(config);\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n const client = await pool.connect()\n try {\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n if (sql.startsWith('SELECT')) {\n const res = await client.query(sql);\n results = res.rows;\n affectedRows = res.rowCount || 0;\n } else {\n const res = await client.query(sql + ' RETURNING *'); // capture inserted rows\n results = res.rows;\n affectedRows = res.rowCount || 0;\n if (results[0] && 'id' in results[0]) {\n insertId = results[0].id; // assumes primary key column is `id`\n }\n }\n return { results, insertId, affectedRows };\n } finally {\n client.release();\n }\n };\n\n\n\n const getSchema = async () => {\n // Get tables (only public schema)\n const client = await pool.connect()\n const tablesRes = await client.query(`\n SELECT table_name \n FROM information_schema.tables\n WHERE table_schema = 'public';\n `);\n\n const schema: Record<string, any[]> = {};\n\n for (const row of tablesRes.rows) {\n const table = row.table_name;\n schema[table] = [];\n\n // Columns\n const columnsRes = await client.query(`\n SELECT \n column_name AS name,\n data_type AS type,\n is_nullable,\n column_default,\n udt_name\n FROM information_schema.columns\n WHERE table_schema = 'public'\n AND table_name = '${table}';\n `);\n\n // Indexes\n const indexesRes = await client.query(`\n SELECT\n i.relname AS index_name,\n ix.indisunique AS unique,\n a.attname AS column_name\n FROM \n pg_class t,\n pg_class i,\n pg_index ix,\n pg_attribute a\n WHERE \n t.oid = ix.indrelid\n AND i.oid = ix.indexrelid\n AND a.attrelid = t.oid\n AND a.attnum = ANY(ix.indkey)\n AND t.relkind = 'r'\n AND t.relname = '${table}';\n `);\n\n // Primary keys\n const pkRes = await client.query(`\n SELECT\n kcu.column_name\n FROM \n information_schema.table_constraints tc\n JOIN information_schema.key_column_usage kcu \n ON tc.constraint_name = kcu.constraint_name\n WHERE \n tc.constraint_type = 'PRIMARY KEY'\n AND tc.table_name = '${table}';\n `);\n\n const pkColumns = pkRes.rows.map(r => r.column_name);\n\n for (const col of columnsRes.rows) {\n const colName = col.name;\n\n const isIndexed = indexesRes.rows.some(i => i.column_name === colName);\n const isUnique = indexesRes.rows.some(i => i.column_name === colName && i.unique);\n\n schema[table].push({\n name: colName,\n type: col.udt_name ?? col.type,\n notnull: col.is_nullable === \"NO\",\n default_value: col.column_default,\n pk: pkColumns.includes(colName),\n index: isIndexed,\n unique: isUnique\n });\n }\n }\n\n return schema;\n };\n\n\n return {\n engine: 'postgres' as const,\n execute,\n getSchema,\n file\n };\n};\n\nexport default PostgresDialect;\n"],"names":[],"mappings":";;;AAIA,MAAM,eAAe,GAAG,CAAC,EAA6D,KAAI;AAAjE,IAAA,IAAA,EAAE,IAAI,EAAA,GAAA,EAAuD,EAAlD,MAAM,GAAA,MAAA,CAAA,EAAA,EAAjB,QAAmB,CAAF;IACvC,IAAI,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;AAEpC,IAAA,MAAM,OAAO,GAAG,OAAO,GAAW,KAA6B;AAC5D,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;AACnC,QAAA,IAAI;AACD,YAAA,IAAI,OAAY;YAChB,IAAI,QAAQ,GAAG,CAAC;YAChB,IAAI,YAAY,GAAG,CAAC;AAEpB,YAAA,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;gBAC3B,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACnC,gBAAA,OAAO,GAAG,GAAG,CAAC,IAAI;AAClB,gBAAA,YAAY,GAAG,GAAG,CAAC,QAAQ,IAAI,CAAC;YACnC;iBAAO;AACJ,gBAAA,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,cAAc,CAAC,CAAC;AACrD,gBAAA,OAAO,GAAG,GAAG,CAAC,IAAI;AAClB,gBAAA,YAAY,GAAG,GAAG,CAAC,QAAQ,IAAI,CAAC;AAChC,gBAAA,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE;oBACnC,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC5B;YACH;AACA,YAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE;QAC7C;gBAAU;YACP,MAAM,CAAC,OAAO,EAAE;QACnB;AACH,IAAA,CAAC;AAID,IAAA,MAAM,SAAS,GAAG,YAAW;;;AAE1B,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE;AACnC,QAAA,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;;;;AAInC,OAAA,CAAA,CAAC;QAEH,MAAM,MAAM,GAA0B,EAAE;AAExC,QAAA,KAAK,MAAM,GAAG,IAAI,SAAS,CAAC,IAAI,EAAE;AAC/B,YAAA,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU;AAC5B,YAAA,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE;;AAGlB,YAAA,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;4BASnB,KAAK,CAAA;AAC5B,IAAA,CAAA,CAAC;;AAGG,YAAA,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;2BAgBpB,KAAK,CAAA;AAC3B,IAAA,CAAA,CAAC;;AAGG,YAAA,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;+BASX,KAAK,CAAA;AAC/B,IAAA,CAAA,CAAC;AAEG,YAAA,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;AAEpD,YAAA,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE;AAChC,gBAAA,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI;AAExB,gBAAA,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,OAAO,CAAC;gBACtE,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,KAAK,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC;AAEjF,gBAAA,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;AAChB,oBAAA,IAAI,EAAE,OAAO;oBACb,IAAI,EAAE,MAAA,GAAG,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAAI,GAAG,CAAC,IAAI;AAC9B,oBAAA,OAAO,EAAE,GAAG,CAAC,WAAW,KAAK,IAAI;oBACjC,aAAa,EAAE,GAAG,CAAC,cAAc;AACjC,oBAAA,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC/B,oBAAA,KAAK,EAAE,SAAS;AAChB,oBAAA,MAAM,EAAE;AACV,iBAAA,CAAC;YACL;QACH;AAEA,QAAA,OAAO,MAAM;AAChB,IAAA,CAAC;IAGD,OAAO;AACJ,QAAA,MAAM,EAAE,UAAmB;QAC3B,OAAO;QACP,SAAS;QACT;KACF;AACJ;;;;"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var sqlite = require('better-sqlite3');
|
|
4
4
|
|
|
5
|
-
const SqliteDialect = (filePath = ':memory:') => {
|
|
5
|
+
const SqliteDialect = (filePath = ':memory:', file) => {
|
|
6
6
|
const db = new sqlite(filePath);
|
|
7
7
|
const execute = async (sql) => {
|
|
8
8
|
let results;
|
|
@@ -49,7 +49,8 @@ const SqliteDialect = (filePath = ':memory:') => {
|
|
|
49
49
|
return {
|
|
50
50
|
engine: 'sqlite',
|
|
51
51
|
execute,
|
|
52
|
-
getSchema
|
|
52
|
+
getSchema,
|
|
53
|
+
file
|
|
53
54
|
};
|
|
54
55
|
};
|
|
55
56
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteDialect.cjs","sources":["../../src/dialect/SqliteDialect.ts"],"sourcesContent":["import sqlite from 'better-sqlite3';\nimport { ExecuterResult, XansqlDialectSchemaType } from '../core/types';\n\nconst SqliteDialect = (filePath: string = ':memory:') => {\n const db = new sqlite(filePath)\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n // Detect query type\n if (sql.trim().startsWith('SELECT')) {\n results = db.prepare(sql).all();\n } else {\n const stmt = db.prepare(sql);\n const info = stmt.run();\n results = info;\n insertId = info.lastInsertRowid ? Number(info.lastInsertRowid) : 0;\n affectedRows = info.changes || 0;\n }\n return { results, insertId, affectedRows };\n };\n\n const getSchema = async () => {\n const tablesRes = db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%';`).all();\n const tables = tablesRes.map((row: any) => row.name);\n const schema: XansqlDialectSchemaType = {};\n\n for (const table of tables) {\n const columnsRes = db.prepare(`PRAGMA table_info(${table});`).all();\n const indexesRes = db.prepare(`PRAGMA index_list(${table});`).all();\n\n schema[table] = columnsRes.map((col: any) => ({\n name: col.name,\n type: col.type,\n notnull: col.notnull,\n default_value: col.dflt_value,\n pk: col.pk,\n index: indexesRes.some((idx: any) => {\n const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();\n return idxInfo.some((info: any) => info.name === col.name);\n }),\n unique: indexesRes.some((idx: any) => idx.unique && (() => {\n const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();\n return idxInfo.some((info: any) => info.name === col.name);\n })()),\n }));\n }\n return schema;\n }\n\n return {\n engine: 'sqlite' as const,\n execute,\n getSchema\n };\n};\n\nexport default SqliteDialect;\n"],"names":[],"mappings":";;;;AAGA,MAAM,aAAa,GAAG,CAAC,QAAA,GAAmB,UAAU,KAAI;
|
|
1
|
+
{"version":3,"file":"SqliteDialect.cjs","sources":["../../src/dialect/SqliteDialect.ts"],"sourcesContent":["import sqlite from 'better-sqlite3';\nimport { ExecuterResult, XansqlDialectSchemaType, XansqlFileConfig } from '../core/types';\n\nconst SqliteDialect = (filePath: string = ':memory:', file?: XansqlFileConfig) => {\n const db = new sqlite(filePath)\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n // Detect query type\n if (sql.trim().startsWith('SELECT')) {\n results = db.prepare(sql).all();\n } else {\n const stmt = db.prepare(sql);\n const info = stmt.run();\n results = info;\n insertId = info.lastInsertRowid ? Number(info.lastInsertRowid) : 0;\n affectedRows = info.changes || 0;\n }\n return { results, insertId, affectedRows };\n };\n\n const getSchema = async () => {\n const tablesRes = db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%';`).all();\n const tables = tablesRes.map((row: any) => row.name);\n const schema: XansqlDialectSchemaType = {};\n\n for (const table of tables) {\n const columnsRes = db.prepare(`PRAGMA table_info(${table});`).all();\n const indexesRes = db.prepare(`PRAGMA index_list(${table});`).all();\n\n schema[table] = columnsRes.map((col: any) => ({\n name: col.name,\n type: col.type,\n notnull: col.notnull,\n default_value: col.dflt_value,\n pk: col.pk,\n index: indexesRes.some((idx: any) => {\n const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();\n return idxInfo.some((info: any) => info.name === col.name);\n }),\n unique: indexesRes.some((idx: any) => idx.unique && (() => {\n const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();\n return idxInfo.some((info: any) => info.name === col.name);\n })()),\n }));\n }\n return schema;\n }\n\n return {\n engine: 'sqlite' as const,\n execute,\n getSchema,\n file\n };\n};\n\nexport default SqliteDialect;\n"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { ExecuterResult, XansqlDialectSchemaType } from '../core/types';
|
|
2
|
-
declare const SqliteDialect: (filePath?: string) => {
|
|
1
|
+
import { ExecuterResult, XansqlDialectSchemaType, XansqlFileConfig } from '../core/types';
|
|
2
|
+
declare const SqliteDialect: (filePath?: string, file?: XansqlFileConfig) => {
|
|
3
3
|
engine: "sqlite";
|
|
4
4
|
execute: (sql: string) => Promise<ExecuterResult>;
|
|
5
5
|
getSchema: () => Promise<XansqlDialectSchemaType>;
|
|
6
|
+
file: XansqlFileConfig;
|
|
6
7
|
};
|
|
7
8
|
export default SqliteDialect;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import sqlite from 'better-sqlite3';
|
|
2
2
|
|
|
3
|
-
const SqliteDialect = (filePath = ':memory:') => {
|
|
3
|
+
const SqliteDialect = (filePath = ':memory:', file) => {
|
|
4
4
|
const db = new sqlite(filePath);
|
|
5
5
|
const execute = async (sql) => {
|
|
6
6
|
let results;
|
|
@@ -47,7 +47,8 @@ const SqliteDialect = (filePath = ':memory:') => {
|
|
|
47
47
|
return {
|
|
48
48
|
engine: 'sqlite',
|
|
49
49
|
execute,
|
|
50
|
-
getSchema
|
|
50
|
+
getSchema,
|
|
51
|
+
file
|
|
51
52
|
};
|
|
52
53
|
};
|
|
53
54
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SqliteDialect.mjs","sources":["../../src/dialect/SqliteDialect.ts"],"sourcesContent":["import sqlite from 'better-sqlite3';\nimport { ExecuterResult, XansqlDialectSchemaType } from '../core/types';\n\nconst SqliteDialect = (filePath: string = ':memory:') => {\n const db = new sqlite(filePath)\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n // Detect query type\n if (sql.trim().startsWith('SELECT')) {\n results = db.prepare(sql).all();\n } else {\n const stmt = db.prepare(sql);\n const info = stmt.run();\n results = info;\n insertId = info.lastInsertRowid ? Number(info.lastInsertRowid) : 0;\n affectedRows = info.changes || 0;\n }\n return { results, insertId, affectedRows };\n };\n\n const getSchema = async () => {\n const tablesRes = db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%';`).all();\n const tables = tablesRes.map((row: any) => row.name);\n const schema: XansqlDialectSchemaType = {};\n\n for (const table of tables) {\n const columnsRes = db.prepare(`PRAGMA table_info(${table});`).all();\n const indexesRes = db.prepare(`PRAGMA index_list(${table});`).all();\n\n schema[table] = columnsRes.map((col: any) => ({\n name: col.name,\n type: col.type,\n notnull: col.notnull,\n default_value: col.dflt_value,\n pk: col.pk,\n index: indexesRes.some((idx: any) => {\n const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();\n return idxInfo.some((info: any) => info.name === col.name);\n }),\n unique: indexesRes.some((idx: any) => idx.unique && (() => {\n const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();\n return idxInfo.some((info: any) => info.name === col.name);\n })()),\n }));\n }\n return schema;\n }\n\n return {\n engine: 'sqlite' as const,\n execute,\n getSchema\n };\n};\n\nexport default SqliteDialect;\n"],"names":[],"mappings":";;AAGA,MAAM,aAAa,GAAG,CAAC,QAAA,GAAmB,UAAU,KAAI;
|
|
1
|
+
{"version":3,"file":"SqliteDialect.mjs","sources":["../../src/dialect/SqliteDialect.ts"],"sourcesContent":["import sqlite from 'better-sqlite3';\nimport { ExecuterResult, XansqlDialectSchemaType, XansqlFileConfig } from '../core/types';\n\nconst SqliteDialect = (filePath: string = ':memory:', file?: XansqlFileConfig) => {\n const db = new sqlite(filePath)\n\n const execute = async (sql: string): Promise<ExecuterResult> => {\n let results: any;\n let insertId = 0;\n let affectedRows = 0;\n\n // Detect query type\n if (sql.trim().startsWith('SELECT')) {\n results = db.prepare(sql).all();\n } else {\n const stmt = db.prepare(sql);\n const info = stmt.run();\n results = info;\n insertId = info.lastInsertRowid ? Number(info.lastInsertRowid) : 0;\n affectedRows = info.changes || 0;\n }\n return { results, insertId, affectedRows };\n };\n\n const getSchema = async () => {\n const tablesRes = db.prepare(`SELECT name FROM sqlite_master WHERE type='table' AND name NOT LIKE 'sqlite_%';`).all();\n const tables = tablesRes.map((row: any) => row.name);\n const schema: XansqlDialectSchemaType = {};\n\n for (const table of tables) {\n const columnsRes = db.prepare(`PRAGMA table_info(${table});`).all();\n const indexesRes = db.prepare(`PRAGMA index_list(${table});`).all();\n\n schema[table] = columnsRes.map((col: any) => ({\n name: col.name,\n type: col.type,\n notnull: col.notnull,\n default_value: col.dflt_value,\n pk: col.pk,\n index: indexesRes.some((idx: any) => {\n const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();\n return idxInfo.some((info: any) => info.name === col.name);\n }),\n unique: indexesRes.some((idx: any) => idx.unique && (() => {\n const idxInfo = db.prepare(`PRAGMA index_info(${idx.name});`).all();\n return idxInfo.some((info: any) => info.name === col.name);\n })()),\n }));\n }\n return schema;\n }\n\n return {\n engine: 'sqlite' as const,\n execute,\n getSchema,\n file\n };\n};\n\nexport default SqliteDialect;\n"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XansqlBridgeServer.cjs","sources":["../../../src/dialect/XansqlBridge/XansqlBridgeServer.ts"],"sourcesContent":["import { crypto, SecurequServer } from \"securequ\";\nimport Xansql from \"../../core/Xansql\";\nimport { makePath, makeSecret } from \"./base\";\nimport XansqlError from \"../../core/XansqlError\";\nimport Model from \"../../model\";\nimport { ListenOptions, XansqlBridgeAuthorizedInfo, XansqlBridgeServerConfig } from \"./types\";\n\
|
|
1
|
+
{"version":3,"file":"XansqlBridgeServer.cjs","sources":["../../../src/dialect/XansqlBridge/XansqlBridgeServer.ts"],"sourcesContent":["import { crypto, SecurequServer } from \"securequ\";\nimport Xansql from \"../../core/Xansql\";\nimport { makePath, makeSecret } from \"./base\";\nimport XansqlError from \"../../core/XansqlError\";\nimport Model from \"../../model\";\nimport { ListenOptions, XansqlBridgeAuthorizedInfo, XansqlBridgeServerConfig } from \"./types\";\n\nclass XansqlBridgeServer {\n readonly XANFETCH_CONTENT_TYPE = 'application/octet-stream';\n xansql: Xansql;\n config: XansqlBridgeServerConfig;\n private server: SecurequServer | null = null;\n\n constructor(xansql: Xansql, config: XansqlBridgeServerConfig) {\n this.xansql = xansql;\n this.config = config;\n }\n\n async authorized(info: XansqlBridgeAuthorizedInfo) {\n const config = this.config;\n if (config.isAuthorized) {\n const isPermit = await config.isAuthorized(info)\n if (!isPermit) throw new XansqlError({\n message: \"isAuthorized denied for server initialization.\",\n model: info.model ? info.model.table : undefined,\n })\n }\n }\n\n async initial() {\n if (this.server) return this.server;\n\n const config = this.config;\n const xansql = this.xansql\n const secret = await makeSecret(this.xansql);\n\n const server = new SecurequServer({\n ...(config || {}),\n clients: [\n {\n origin: `*`,\n secret\n }\n ]\n });\n\n server.get(await makePath('find', xansql), async (req: any) => {\n\n const params: any = req.searchParams\n await this.authorized({\n method: \"GET\",\n model: xansql.models.get(params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n\n server.post(await makePath('insert', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"POST\",\n model: xansql.models.get(params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.put(await makePath('update', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"PUT\",\n model: xansql.models.get(params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.delete(await makePath('delete', xansql), async (req: any) => {\n const params: any = req.searchParams\n await this.authorized({\n method: \"DELETE\",\n model: xansql.models.get(params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n\n server.post(await makePath('executer', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"POST\",\n model: xansql.models.get(params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.get(await makePath('raw_schema', xansql), async (req: any) => {\n throw await xansql.dialect.getSchema(xansql);\n })\n\n this.server = server;\n return this.server;\n }\n\n async listen(url: string, options: ListenOptions) {\n\n const server = await this.initial()\n try {\n const res = await server.listen(url, options)\n return {\n status: res.status,\n value: res.value,\n }\n } catch (error: any) {\n\n const secret = await makeSecret(this.xansql)\n return {\n status: 500,\n value: await crypto.encryptBuffer({\n success: false,\n message: error.message || 'Internal Server Error'\n }, secret)\n }\n }\n }\n}\n\nexport default XansqlBridgeServer"],"names":["XansqlError","makeSecret","SecurequServer","makePath","crypto"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XansqlBridgeServer.mjs","sources":["../../../src/dialect/XansqlBridge/XansqlBridgeServer.ts"],"sourcesContent":["import { crypto, SecurequServer } from \"securequ\";\nimport Xansql from \"../../core/Xansql\";\nimport { makePath, makeSecret } from \"./base\";\nimport XansqlError from \"../../core/XansqlError\";\nimport Model from \"../../model\";\nimport { ListenOptions, XansqlBridgeAuthorizedInfo, XansqlBridgeServerConfig } from \"./types\";\n\
|
|
1
|
+
{"version":3,"file":"XansqlBridgeServer.mjs","sources":["../../../src/dialect/XansqlBridge/XansqlBridgeServer.ts"],"sourcesContent":["import { crypto, SecurequServer } from \"securequ\";\nimport Xansql from \"../../core/Xansql\";\nimport { makePath, makeSecret } from \"./base\";\nimport XansqlError from \"../../core/XansqlError\";\nimport Model from \"../../model\";\nimport { ListenOptions, XansqlBridgeAuthorizedInfo, XansqlBridgeServerConfig } from \"./types\";\n\nclass XansqlBridgeServer {\n readonly XANFETCH_CONTENT_TYPE = 'application/octet-stream';\n xansql: Xansql;\n config: XansqlBridgeServerConfig;\n private server: SecurequServer | null = null;\n\n constructor(xansql: Xansql, config: XansqlBridgeServerConfig) {\n this.xansql = xansql;\n this.config = config;\n }\n\n async authorized(info: XansqlBridgeAuthorizedInfo) {\n const config = this.config;\n if (config.isAuthorized) {\n const isPermit = await config.isAuthorized(info)\n if (!isPermit) throw new XansqlError({\n message: \"isAuthorized denied for server initialization.\",\n model: info.model ? info.model.table : undefined,\n })\n }\n }\n\n async initial() {\n if (this.server) return this.server;\n\n const config = this.config;\n const xansql = this.xansql\n const secret = await makeSecret(this.xansql);\n\n const server = new SecurequServer({\n ...(config || {}),\n clients: [\n {\n origin: `*`,\n secret\n }\n ]\n });\n\n server.get(await makePath('find', xansql), async (req: any) => {\n\n const params: any = req.searchParams\n await this.authorized({\n method: \"GET\",\n model: xansql.models.get(params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n\n server.post(await makePath('insert', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"POST\",\n model: xansql.models.get(params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.put(await makePath('update', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"PUT\",\n model: xansql.models.get(params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.delete(await makePath('delete', xansql), async (req: any) => {\n const params: any = req.searchParams\n await this.authorized({\n method: \"DELETE\",\n model: xansql.models.get(params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n\n server.post(await makePath('executer', xansql), async (req: any) => {\n const params: any = req.body\n await this.authorized({\n method: \"POST\",\n model: xansql.models.get(params.table) as Model,\n action: params.action,\n })\n throw await xansql.execute(params.sql);\n })\n\n server.get(await makePath('raw_schema', xansql), async (req: any) => {\n throw await xansql.dialect.getSchema(xansql);\n })\n\n this.server = server;\n return this.server;\n }\n\n async listen(url: string, options: ListenOptions) {\n\n const server = await this.initial()\n try {\n const res = await server.listen(url, options)\n return {\n status: res.status,\n value: res.value,\n }\n } catch (error: any) {\n\n const secret = await makeSecret(this.xansql)\n return {\n status: 500,\n value: await crypto.encryptBuffer({\n success: false,\n message: error.message || 'Internal Server Error'\n }, secret)\n }\n }\n }\n}\n\nexport default XansqlBridgeServer"],"names":[],"mappings":"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"}
|
|
@@ -7,17 +7,22 @@ const makeSecret = async (xansql) => {
|
|
|
7
7
|
if (secretCache)
|
|
8
8
|
return secretCache;
|
|
9
9
|
const models = xansql.models;
|
|
10
|
-
let uid =
|
|
10
|
+
let uid = [];
|
|
11
11
|
for (let model of models.values()) {
|
|
12
|
-
uid
|
|
12
|
+
uid.push(model.table);
|
|
13
13
|
for (let column in model.schema) {
|
|
14
|
-
uid
|
|
14
|
+
uid.push(column);
|
|
15
15
|
const field = model.schema[column];
|
|
16
16
|
const meta = field.meta || {};
|
|
17
|
-
|
|
17
|
+
const keys = Object.keys(meta);
|
|
18
|
+
if (keys.length) {
|
|
19
|
+
keys.sort();
|
|
20
|
+
uid.push(...keys);
|
|
21
|
+
}
|
|
18
22
|
}
|
|
19
23
|
}
|
|
20
|
-
|
|
24
|
+
uid = uid.sort();
|
|
25
|
+
secretCache = await securequ.crypto.hash(uid.join(""));
|
|
21
26
|
return secretCache;
|
|
22
27
|
};
|
|
23
28
|
const makePath = async (path, xansql) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.cjs","sources":["../../../src/dialect/XansqlBridge/base.ts"],"sourcesContent":["import { crypto } from \"securequ\";\nimport Xansql from \"../../core/Xansql\";\n\nlet secretCache: string | null = null;\nexport const makeSecret = async (xansql: Xansql) => {\n if (secretCache) return secretCache;\n const models = xansql.models\n let uid =
|
|
1
|
+
{"version":3,"file":"base.cjs","sources":["../../../src/dialect/XansqlBridge/base.ts"],"sourcesContent":["import { crypto } from \"securequ\";\nimport Xansql from \"../../core/Xansql\";\n\nlet secretCache: string | null = null;\nexport const makeSecret = async (xansql: Xansql) => {\n if (secretCache) return secretCache;\n const models = xansql.models\n let uid = []\n for (let model of models.values()) {\n uid.push(model.table)\n for (let column in model.schema) {\n uid.push(column)\n const field = model.schema[column]\n const meta = field.meta || {}\n const keys = Object.keys(meta)\n if (keys.length) {\n keys.sort()\n uid.push(...keys)\n }\n }\n }\n uid = uid.sort()\n\n secretCache = await crypto.hash(uid.join(\"\"))\n return secretCache;\n}\n\nexport const makePath = async (path: string, xansql: Xansql) => {\n const secret = await makeSecret(xansql)\n const gen = `/${await crypto.hash(path + secret)}`\n return gen;\n}\n\n\nexport type XansqlBridgeAction =\n | \"SELECT\"\n | \"INSERT\"\n | \"UPDATE\"\n | \"DELETE\"\n | \"DROP\"\n | \"ALTER\"\n | \"CREATE\"\n | \"TRUNCATE\"\n | \"REPLACE\"\n | \"DESCRIBE\"\n | \"SHOW\"\n | \"USE\"\n | \"UNKNOWN\";\n\nexport interface SqlParserResult {\n action: XansqlBridgeAction;\n table: string | null;\n}\n\nexport const sqlparser = (sql: string): SqlParserResult => {\n const normalized = sql.trim().replace(/\\s+/g, \" \");\n\n // Detect the primary verb (first SQL keyword)\n const verbMatch = normalized.match(\n /^(SELECT|INSERT|UPDATE|DELETE|DROP|ALTER|CREATE|TRUNCATE|REPLACE|DESCRIBE|DESC|SHOW|USE)\\b/i\n );\n\n let verb: XansqlBridgeAction = \"UNKNOWN\";\n\n if (verbMatch) {\n const v = verbMatch[1].toUpperCase();\n verb = v === \"DESC\" ? \"DESCRIBE\" : (v as XansqlBridgeAction);\n }\n\n // Matches identifiers: table, `table`, \"table\", [table]\n const IDENT = `([\\\\\\`\"\\\\[]?)([A-Za-z0-9_.-]+)\\\\1`;\n\n const extractTable = (): string | null => {\n switch (verb) {\n case \"SELECT\": {\n // 1. Normal SELECT ... FROM table\n const normal = normalized.match(/\\bFROM\\s+([`\"\\[]?)([A-Za-z0-9_.-]+)\\1/i);\n if (normal && normal[2] !== \"(\") {\n return normal[2]; // real table\n }\n\n // 2. Extract real tables inside a subquery: SELECT ... FROM ( SELECT ... FROM table )\n const inner = normalized.match(\n /\\(\\s*SELECT[\\s\\S]+?\\bFROM\\s+([`\"\\[]?)([A-Za-z0-9_.-]+)\\1/i\n );\n if (inner) return inner[2];\n\n return null;\n }\n case \"INSERT\": {\n const match = new RegExp(`\\\\bINTO\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n case \"UPDATE\": {\n const match = new RegExp(`^UPDATE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n case \"DELETE\": {\n const match = new RegExp(`\\\\bFROM\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // CREATE TABLE tableName\n case \"CREATE\": {\n const match = new RegExp(`\\\\bCREATE\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // DROP TABLE tableName\n case \"DROP\": {\n const match = new RegExp(`\\\\bDROP\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // ALTER TABLE tableName\n case \"ALTER\": {\n const match = new RegExp(`\\\\bALTER\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // TRUNCATE TABLE tableName\n case \"TRUNCATE\": {\n const match = new RegExp(`\\\\bTRUNCATE\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // REPLACE INTO tableName\n case \"REPLACE\": {\n const match = new RegExp(`\\\\bREPLACE\\\\s+INTO\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // DESCRIBE tableName\n case \"DESCRIBE\": {\n const match = new RegExp(`\\\\b(DESCRIBE|DESC)\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // SHOW TABLES / SHOW DATABASES => no table\n case \"SHOW\": {\n const match = new RegExp(`\\\\bSHOW\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null; // e.g. SHOW TABLES\n }\n\n // USE databaseName\n case \"USE\": {\n const match = new RegExp(`\\\\bUSE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n default:\n return null;\n }\n };\n\n return {\n action: verb,\n table: extractTable(),\n };\n};\n"],"names":["crypto"],"mappings":"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"}
|
|
@@ -5,17 +5,22 @@ const makeSecret = async (xansql) => {
|
|
|
5
5
|
if (secretCache)
|
|
6
6
|
return secretCache;
|
|
7
7
|
const models = xansql.models;
|
|
8
|
-
let uid =
|
|
8
|
+
let uid = [];
|
|
9
9
|
for (let model of models.values()) {
|
|
10
|
-
uid
|
|
10
|
+
uid.push(model.table);
|
|
11
11
|
for (let column in model.schema) {
|
|
12
|
-
uid
|
|
12
|
+
uid.push(column);
|
|
13
13
|
const field = model.schema[column];
|
|
14
14
|
const meta = field.meta || {};
|
|
15
|
-
|
|
15
|
+
const keys = Object.keys(meta);
|
|
16
|
+
if (keys.length) {
|
|
17
|
+
keys.sort();
|
|
18
|
+
uid.push(...keys);
|
|
19
|
+
}
|
|
16
20
|
}
|
|
17
21
|
}
|
|
18
|
-
|
|
22
|
+
uid = uid.sort();
|
|
23
|
+
secretCache = await crypto.hash(uid.join(""));
|
|
19
24
|
return secretCache;
|
|
20
25
|
};
|
|
21
26
|
const makePath = async (path, xansql) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.mjs","sources":["../../../src/dialect/XansqlBridge/base.ts"],"sourcesContent":["import { crypto } from \"securequ\";\nimport Xansql from \"../../core/Xansql\";\n\nlet secretCache: string | null = null;\nexport const makeSecret = async (xansql: Xansql) => {\n if (secretCache) return secretCache;\n const models = xansql.models\n let uid =
|
|
1
|
+
{"version":3,"file":"base.mjs","sources":["../../../src/dialect/XansqlBridge/base.ts"],"sourcesContent":["import { crypto } from \"securequ\";\nimport Xansql from \"../../core/Xansql\";\n\nlet secretCache: string | null = null;\nexport const makeSecret = async (xansql: Xansql) => {\n if (secretCache) return secretCache;\n const models = xansql.models\n let uid = []\n for (let model of models.values()) {\n uid.push(model.table)\n for (let column in model.schema) {\n uid.push(column)\n const field = model.schema[column]\n const meta = field.meta || {}\n const keys = Object.keys(meta)\n if (keys.length) {\n keys.sort()\n uid.push(...keys)\n }\n }\n }\n uid = uid.sort()\n\n secretCache = await crypto.hash(uid.join(\"\"))\n return secretCache;\n}\n\nexport const makePath = async (path: string, xansql: Xansql) => {\n const secret = await makeSecret(xansql)\n const gen = `/${await crypto.hash(path + secret)}`\n return gen;\n}\n\n\nexport type XansqlBridgeAction =\n | \"SELECT\"\n | \"INSERT\"\n | \"UPDATE\"\n | \"DELETE\"\n | \"DROP\"\n | \"ALTER\"\n | \"CREATE\"\n | \"TRUNCATE\"\n | \"REPLACE\"\n | \"DESCRIBE\"\n | \"SHOW\"\n | \"USE\"\n | \"UNKNOWN\";\n\nexport interface SqlParserResult {\n action: XansqlBridgeAction;\n table: string | null;\n}\n\nexport const sqlparser = (sql: string): SqlParserResult => {\n const normalized = sql.trim().replace(/\\s+/g, \" \");\n\n // Detect the primary verb (first SQL keyword)\n const verbMatch = normalized.match(\n /^(SELECT|INSERT|UPDATE|DELETE|DROP|ALTER|CREATE|TRUNCATE|REPLACE|DESCRIBE|DESC|SHOW|USE)\\b/i\n );\n\n let verb: XansqlBridgeAction = \"UNKNOWN\";\n\n if (verbMatch) {\n const v = verbMatch[1].toUpperCase();\n verb = v === \"DESC\" ? \"DESCRIBE\" : (v as XansqlBridgeAction);\n }\n\n // Matches identifiers: table, `table`, \"table\", [table]\n const IDENT = `([\\\\\\`\"\\\\[]?)([A-Za-z0-9_.-]+)\\\\1`;\n\n const extractTable = (): string | null => {\n switch (verb) {\n case \"SELECT\": {\n // 1. Normal SELECT ... FROM table\n const normal = normalized.match(/\\bFROM\\s+([`\"\\[]?)([A-Za-z0-9_.-]+)\\1/i);\n if (normal && normal[2] !== \"(\") {\n return normal[2]; // real table\n }\n\n // 2. Extract real tables inside a subquery: SELECT ... FROM ( SELECT ... FROM table )\n const inner = normalized.match(\n /\\(\\s*SELECT[\\s\\S]+?\\bFROM\\s+([`\"\\[]?)([A-Za-z0-9_.-]+)\\1/i\n );\n if (inner) return inner[2];\n\n return null;\n }\n case \"INSERT\": {\n const match = new RegExp(`\\\\bINTO\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n case \"UPDATE\": {\n const match = new RegExp(`^UPDATE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n case \"DELETE\": {\n const match = new RegExp(`\\\\bFROM\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // CREATE TABLE tableName\n case \"CREATE\": {\n const match = new RegExp(`\\\\bCREATE\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // DROP TABLE tableName\n case \"DROP\": {\n const match = new RegExp(`\\\\bDROP\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // ALTER TABLE tableName\n case \"ALTER\": {\n const match = new RegExp(`\\\\bALTER\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // TRUNCATE TABLE tableName\n case \"TRUNCATE\": {\n const match = new RegExp(`\\\\bTRUNCATE\\\\s+TABLE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // REPLACE INTO tableName\n case \"REPLACE\": {\n const match = new RegExp(`\\\\bREPLACE\\\\s+INTO\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // DESCRIBE tableName\n case \"DESCRIBE\": {\n const match = new RegExp(`\\\\b(DESCRIBE|DESC)\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n // SHOW TABLES / SHOW DATABASES => no table\n case \"SHOW\": {\n const match = new RegExp(`\\\\bSHOW\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null; // e.g. SHOW TABLES\n }\n\n // USE databaseName\n case \"USE\": {\n const match = new RegExp(`\\\\bUSE\\\\s+${IDENT}`, \"i\").exec(normalized);\n return match ? match[2] : null;\n }\n\n default:\n return null;\n }\n };\n\n return {\n action: verb,\n table: extractTable(),\n };\n};\n"],"names":[],"mappings":";;AAGA,IAAI,WAAW,GAAkB,IAAI;MACxB,UAAU,GAAG,OAAO,MAAc,KAAI;AAChD,IAAA,IAAI,WAAW;AAAE,QAAA,OAAO,WAAW;AACnC,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM;IAC5B,IAAI,GAAG,GAAG,EAAE;IACZ,KAAK,IAAI,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE;AAChC,QAAA,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;AACrB,QAAA,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE;AAC9B,YAAA,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;YAChB,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC;AAClC,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,EAAE;YAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE;gBACd,IAAI,CAAC,IAAI,EAAE;AACX,gBAAA,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACpB;QACH;IACH;AACA,IAAA,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE;AAEhB,IAAA,WAAW,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC7C,IAAA,OAAO,WAAW;AACrB;AAEO,MAAM,QAAQ,GAAG,OAAO,IAAY,EAAE,MAAc,KAAI;AAC5D,IAAA,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC;AACvC,IAAA,MAAM,GAAG,GAAG,CAAA,CAAA,EAAI,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,EAAE;AAClD,IAAA,OAAO,GAAG;AACb;AAuBO,MAAM,SAAS,GAAG,CAAC,GAAW,KAAqB;AACvD,IAAA,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;;IAGlD,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAC/B,6FAA6F,CAC/F;IAED,IAAI,IAAI,GAAuB,SAAS;IAExC,IAAI,SAAS,EAAE;QACZ,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;AACpC,QAAA,IAAI,GAAG,CAAC,KAAK,MAAM,GAAG,UAAU,GAAI,CAAwB;IAC/D;;IAGA,MAAM,KAAK,GAAG,CAAA,iCAAA,CAAmC;IAEjD,MAAM,YAAY,GAAG,MAAoB;QACtC,QAAQ,IAAI;YACT,KAAK,QAAQ,EAAE;;gBAEZ,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,wCAAwC,CAAC;gBACzE,IAAI,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,EAAE;AAC9B,oBAAA,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;gBACpB;;gBAGA,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAC3B,2DAA2D,CAC7D;AACD,gBAAA,IAAI,KAAK;AAAE,oBAAA,OAAO,KAAK,CAAC,CAAC,CAAC;AAE1B,gBAAA,OAAO,IAAI;YACd;YACA,KAAK,QAAQ,EAAE;AACZ,gBAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,cAAc,KAAK,CAAA,CAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AACrE,gBAAA,OAAO,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;YACjC;YACA,KAAK,QAAQ,EAAE;AACZ,gBAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,cAAc,KAAK,CAAA,CAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AACrE,gBAAA,OAAO,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;YACjC;YACA,KAAK,QAAQ,EAAE;AACZ,gBAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,cAAc,KAAK,CAAA,CAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AACrE,gBAAA,OAAO,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;YACjC;;YAGA,KAAK,QAAQ,EAAE;AACZ,gBAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,yBAAyB,KAAK,CAAA,CAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AAChF,gBAAA,OAAO,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;YACjC;;YAGA,KAAK,MAAM,EAAE;AACV,gBAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,uBAAuB,KAAK,CAAA,CAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AAC9E,gBAAA,OAAO,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;YACjC;;YAGA,KAAK,OAAO,EAAE;AACX,gBAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,wBAAwB,KAAK,CAAA,CAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AAC/E,gBAAA,OAAO,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;YACjC;;YAGA,KAAK,UAAU,EAAE;AACd,gBAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,2BAA2B,KAAK,CAAA,CAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AAClF,gBAAA,OAAO,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;YACjC;;YAGA,KAAK,SAAS,EAAE;AACb,gBAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,yBAAyB,KAAK,CAAA,CAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AAChF,gBAAA,OAAO,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;YACjC;;YAGA,KAAK,UAAU,EAAE;AACd,gBAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,yBAAyB,KAAK,CAAA,CAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AAChF,gBAAA,OAAO,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;YACjC;;YAGA,KAAK,MAAM,EAAE;AACV,gBAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,cAAc,KAAK,CAAA,CAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AACrE,gBAAA,OAAO,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;YAClC;;YAGA,KAAK,KAAK,EAAE;AACT,gBAAA,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,aAAa,KAAK,CAAA,CAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;AACpE,gBAAA,OAAO,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;YACjC;AAEA,YAAA;AACG,gBAAA,OAAO,IAAI;;AAEpB,IAAA,CAAC;IAED,OAAO;AACJ,QAAA,MAAM,EAAE,IAAI;QACZ,KAAK,EAAE,YAAY,EAAE;KACvB;AACJ;;;;"}
|
package/model/Args/WhereArgs.cjs
CHANGED
|
@@ -8,6 +8,7 @@ var xt_fields_Record = require('../../xt/fields/Record.cjs');
|
|
|
8
8
|
var xt_fields_Tuple = require('../../xt/fields/Tuple.cjs');
|
|
9
9
|
var utils_index = require('../../utils/index.cjs');
|
|
10
10
|
var model_include_ValueFormatter = require('../include/ValueFormatter.cjs');
|
|
11
|
+
var xt_fields_File = require('../../xt/fields/File.cjs');
|
|
11
12
|
|
|
12
13
|
class WhereArgs {
|
|
13
14
|
constructor(model, where, meta) {
|
|
@@ -218,17 +219,13 @@ class WhereArgs {
|
|
|
218
219
|
return `${generate.join(' AND ')}`;
|
|
219
220
|
}
|
|
220
221
|
checkIsAllowed(column) {
|
|
221
|
-
const
|
|
222
|
-
if (core_classes_ForeignInfo.isArray(
|
|
222
|
+
const field = this.model.schema[column];
|
|
223
|
+
if (core_classes_ForeignInfo.isArray(field))
|
|
223
224
|
return true;
|
|
224
|
-
const isNotAllowed =
|
|
225
|
-
|| xanv instanceof xt_fields_Object
|
|
226
|
-
|| xanv instanceof xt_fields_Record
|
|
227
|
-
|| xanv instanceof xt_fields_Tuple;
|
|
228
|
-
// || xanv instanceof XqlFile
|
|
225
|
+
const isNotAllowed = utils_index.iof(field, xt_fields_Array, xt_fields_Object, xt_fields_Record, xt_fields_Tuple, xt_fields_File);
|
|
229
226
|
if (isNotAllowed) {
|
|
230
227
|
throw new core_XansqlError({
|
|
231
|
-
message: `Field ${column} of type ${
|
|
228
|
+
message: `Field ${column} of type ${field.constructor.name} is not allowed in WHERE clause in table ${this.model.table}`,
|
|
232
229
|
model: this.model.table,
|
|
233
230
|
column
|
|
234
231
|
});
|