@devbro/neko-sql 0.1.8 → 0.1.10
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-BDzA_swP.d.mts +235 -0
- package/dist/Blueprint.d.mts +1 -61
- package/dist/Blueprint.mjs +11 -1
- package/dist/Blueprint.mjs.map +1 -1
- package/dist/Connection.d.mts +1 -4
- package/dist/Expression.d.mts +1 -1
- package/dist/Migration.d.mts +1 -4
- package/dist/Query.d.mts +1 -4
- package/dist/Query.mjs +11 -0
- package/dist/Query.mjs.map +1 -1
- package/dist/QueryGrammar.d.mts +1 -4
- package/dist/QueryGrammar.mjs +9 -0
- package/dist/QueryGrammar.mjs.map +1 -1
- package/dist/Schema.d.mts +1 -4
- package/dist/SchemaGrammar.d.mts +1 -21
- package/dist/SchemaGrammar.mjs +4 -0
- package/dist/SchemaGrammar.mjs.map +1 -1
- package/dist/databases/index.d.mts +1 -4
- package/dist/databases/postgresql/PostgresqlConnection.d.mts +1 -4
- package/dist/databases/postgresql/PostgresqlQueryGrammar.d.mts +1 -4
- package/dist/databases/postgresql/PostgresqlSchemaGrammar.d.mts +1 -3
- package/dist/databases/postgresql/index.d.mts +1 -4
- package/dist/index.d.mts +1 -4
- package/dist/index.js +36 -2
- package/dist/index.js.map +1 -1
- package/dist/types.d.mts +1 -1
- package/package.json +1 -1
- package/dist/Connection-Ba1yrJgb.d.mts +0 -109
- package/dist/types-BEFQrxTG.d.mts +0 -48
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
declare class Expression {
|
|
2
|
+
private sql;
|
|
3
|
+
private bindings;
|
|
4
|
+
constructor(sql?: string, bindings?: never[]);
|
|
5
|
+
toCompiledSql(): CompiledSql;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
declare class SchemaGrammar {
|
|
9
|
+
toSql(blueprint: Blueprint): string;
|
|
10
|
+
compileCreateTable(blueprint: Blueprint): CompiledSql;
|
|
11
|
+
compileAlterTable(blueprint: Blueprint): CompiledSql;
|
|
12
|
+
compileColumn(column: Column): string;
|
|
13
|
+
escape(value: Parameter): string;
|
|
14
|
+
compilePrimaryKeys(primaryKeys: string[]): string;
|
|
15
|
+
compileTables(schema?: string | string[] | undefined): CompiledSql;
|
|
16
|
+
compileTableExists(tableName: string, schema?: string): CompiledSql;
|
|
17
|
+
compileDropTable(tableName: string): CompiledSql;
|
|
18
|
+
compileDropTableIfExists(tableName: string): CompiledSql;
|
|
19
|
+
protected compileSchemaWhereClause(schema: string | string[] | undefined, column: string): string;
|
|
20
|
+
protected quoteString(value: string | string[]): string;
|
|
21
|
+
protected doubleQuoteString(value: string | string[]): string;
|
|
22
|
+
protected compileForeignKey(foreignKey: ForeignKeyConstraint): string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
declare class Schema {
|
|
26
|
+
private readonly connection;
|
|
27
|
+
private readonly grammar;
|
|
28
|
+
constructor(connection: Connection | null, grammar: SchemaGrammar);
|
|
29
|
+
createTable(tableName: string, structMethod: (blueprint: Blueprint) => void): Promise<void>;
|
|
30
|
+
alterTable(tableName: string, structMethod: (blueprint: Blueprint) => void): Promise<void>;
|
|
31
|
+
dropTable(tableName: string): Promise<void>;
|
|
32
|
+
dropTableIfExists(tableName: string): Promise<void>;
|
|
33
|
+
tables(): Promise<any>;
|
|
34
|
+
tableExists(table_name: string): Promise<boolean>;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
declare abstract class QueryGrammar {
|
|
38
|
+
sqlParts: string[];
|
|
39
|
+
toSql(query: Query): CompiledSql;
|
|
40
|
+
compileCount(query: Query): CompiledSql;
|
|
41
|
+
compileSelect(selects: selectType[]): CompiledSql;
|
|
42
|
+
compileTable(tableName: string): CompiledSql;
|
|
43
|
+
compileJoin(joins: joinType[]): CompiledSql;
|
|
44
|
+
compileWhere(wheres: whereType[]): CompiledSql;
|
|
45
|
+
compileWhereNested(w: whereNested): CompiledSql;
|
|
46
|
+
compileWhereOperation(w: whereOp): CompiledSql;
|
|
47
|
+
compileWhereOperationColumn(w: whereOpColumn): CompiledSql;
|
|
48
|
+
compileOrderBy(orderBy: string[]): CompiledSql;
|
|
49
|
+
compileLimit(limit: number | null): CompiledSql;
|
|
50
|
+
compileOffset(offset: number | null): CompiledSql;
|
|
51
|
+
abstract getVariablePlaceholder(): string;
|
|
52
|
+
compileWhereNull(w: whereNull): CompiledSql;
|
|
53
|
+
compileInsert(query: Query, data: Record<string, Parameter>): CompiledSql;
|
|
54
|
+
abstract compileInsertGetId(query: Query, data: Record<string, Parameter>, options: {
|
|
55
|
+
primaryKey: string[];
|
|
56
|
+
}): CompiledSql;
|
|
57
|
+
compileUpdate(query: Query, data: Record<string, Parameter>): CompiledSql;
|
|
58
|
+
compileDelete(query: Query): CompiledSql;
|
|
59
|
+
compileUpsert(query: Query, data: Record<string, Parameter>, conflictFields: string[], updateFields: string[]): CompiledSql;
|
|
60
|
+
compileGroupBy(groupBy: string[]): CompiledSql;
|
|
61
|
+
compileHaving(having: havingType[]): CompiledSql;
|
|
62
|
+
compileHavingOperation(w: whereOp): CompiledSql;
|
|
63
|
+
compileHavingRaw(w: whereRaw): CompiledSql;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
declare abstract class Connection {
|
|
67
|
+
abstract connect(): Promise<boolean>;
|
|
68
|
+
abstract runQuery(sql: CompiledSql): Promise<any>;
|
|
69
|
+
abstract runCursor(sql: CompiledSql): Promise<any>;
|
|
70
|
+
abstract disconnect(): Promise<boolean>;
|
|
71
|
+
abstract getQuery(): Query;
|
|
72
|
+
abstract getSchema(): Schema;
|
|
73
|
+
abstract beginTransaction(): Promise<void>;
|
|
74
|
+
abstract commit(): Promise<void>;
|
|
75
|
+
abstract rollback(): Promise<void>;
|
|
76
|
+
abstract getQueryGrammar(): QueryGrammar;
|
|
77
|
+
abstract getSchemaGrammar(): SchemaGrammar;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
type QueryParts = {
|
|
81
|
+
select: selectType[];
|
|
82
|
+
table: string;
|
|
83
|
+
join: joinType[];
|
|
84
|
+
where: whereType[];
|
|
85
|
+
groupBy: string[];
|
|
86
|
+
having: havingType[];
|
|
87
|
+
orderBy: string[];
|
|
88
|
+
limit: number | null;
|
|
89
|
+
offset: number | null;
|
|
90
|
+
};
|
|
91
|
+
declare class Query {
|
|
92
|
+
readonly connection: Connection | null;
|
|
93
|
+
readonly grammar: QueryGrammar;
|
|
94
|
+
allowedOperations: string[];
|
|
95
|
+
parts: QueryParts;
|
|
96
|
+
constructor(connection: Connection | null, grammar: QueryGrammar);
|
|
97
|
+
table(tableName: string): this;
|
|
98
|
+
whereNested(func: (q: Query) => void, joinCondition?: JoinCondition, negateCondition?: boolean): this;
|
|
99
|
+
whereOp(column: string, operation: (typeof this.allowedOperations)[number], value: Parameter, joinCondition?: JoinCondition, negateCondition?: boolean): this;
|
|
100
|
+
whereColumn(column1: string, operation: (typeof this.allowedOperations)[number], column2: string, joinCondition?: JoinCondition, negateCondition?: boolean): this;
|
|
101
|
+
whereNull(column: string, joinCondition?: JoinCondition, negateCondition?: boolean): this;
|
|
102
|
+
clearWhere(): this;
|
|
103
|
+
select(selects: selectType[]): this;
|
|
104
|
+
groupBy(columns: string[]): this;
|
|
105
|
+
havingOp(column: string, operation: (typeof this.allowedOperations)[number], value: Parameter, joinCondition?: JoinCondition, negateCondition?: boolean): this;
|
|
106
|
+
havingRaw(sql: string, bindings: Parameter[], joinCondition?: JoinCondition, negateCondition?: boolean): this;
|
|
107
|
+
orderBy(column: string, direction?: 'asc' | 'desc'): this;
|
|
108
|
+
limit(limit: number): this;
|
|
109
|
+
offset(offset: number): this;
|
|
110
|
+
toSql(): CompiledSql;
|
|
111
|
+
get(): Promise<any>;
|
|
112
|
+
count(): Promise<number>;
|
|
113
|
+
getCursor(): Promise<any>;
|
|
114
|
+
getConnection(): Connection | null;
|
|
115
|
+
insert(data: Record<string, Parameter>): Promise<any>;
|
|
116
|
+
insertGetId(data: Record<string, Parameter>, options?: {
|
|
117
|
+
primaryKey: string[];
|
|
118
|
+
}): Promise<any>;
|
|
119
|
+
update(data: Record<string, Parameter>): Promise<any>;
|
|
120
|
+
upsert(data: Record<string, Parameter>, uniqueColumns: string[], updateColumns: string[]): Promise<any>;
|
|
121
|
+
delete(): Promise<any>;
|
|
122
|
+
innerJoin(table: string, conditions: whereType[] | {
|
|
123
|
+
column1: string;
|
|
124
|
+
column2: string;
|
|
125
|
+
}[]): this;
|
|
126
|
+
leftJoin(table: string, condtions: whereType[]): this;
|
|
127
|
+
rightJoin(table: string, condtions: whereType[]): this;
|
|
128
|
+
fullJoin(table: string, condtions: whereType[]): this;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
type selectType = string;
|
|
132
|
+
type whereBasic = {
|
|
133
|
+
joinCondition: JoinCondition;
|
|
134
|
+
negateCondition: boolean;
|
|
135
|
+
};
|
|
136
|
+
type whereOp = {
|
|
137
|
+
type: 'operation';
|
|
138
|
+
column: string;
|
|
139
|
+
operation: string;
|
|
140
|
+
value: Parameter;
|
|
141
|
+
};
|
|
142
|
+
type whereOpColumn = {
|
|
143
|
+
type: 'operationColumn';
|
|
144
|
+
column1: string;
|
|
145
|
+
operation: string;
|
|
146
|
+
column2: string;
|
|
147
|
+
};
|
|
148
|
+
type whereNested = {
|
|
149
|
+
type: 'nested';
|
|
150
|
+
query: Query;
|
|
151
|
+
};
|
|
152
|
+
type whereRaw = {
|
|
153
|
+
type: 'raw';
|
|
154
|
+
sql: string;
|
|
155
|
+
bindings: Parameter[];
|
|
156
|
+
};
|
|
157
|
+
type whereNull = {
|
|
158
|
+
type: 'null';
|
|
159
|
+
column: string;
|
|
160
|
+
};
|
|
161
|
+
type whereType = whereBasic & (whereOp | whereOpColumn | whereNested | whereNull);
|
|
162
|
+
type Parameter = string | number | Date | boolean | null | Expression | undefined | number[];
|
|
163
|
+
type JoinCondition = 'and' | 'or';
|
|
164
|
+
type CompiledSql = {
|
|
165
|
+
sql: string;
|
|
166
|
+
bindings: Parameter[];
|
|
167
|
+
};
|
|
168
|
+
type havingType = whereBasic & (whereOp | whereRaw);
|
|
169
|
+
type joinType = {
|
|
170
|
+
type: 'inner' | 'left' | 'right' | 'full';
|
|
171
|
+
table: string;
|
|
172
|
+
conditions: whereType[];
|
|
173
|
+
};
|
|
174
|
+
|
|
175
|
+
type ColumnPropertiesType = {
|
|
176
|
+
type: 'string' | 'integer' | 'float' | 'double' | 'boolean' | 'char' | 'text' | 'date' | 'timestamp' | 'timestampz' | 'serial' | 'json' | 'jsonb';
|
|
177
|
+
length: number;
|
|
178
|
+
nullable: boolean;
|
|
179
|
+
unique: boolean;
|
|
180
|
+
default: Parameter;
|
|
181
|
+
};
|
|
182
|
+
declare class Column {
|
|
183
|
+
columnName: string;
|
|
184
|
+
properties: ColumnPropertiesType;
|
|
185
|
+
constructor(columnName: string, type: ColumnPropertiesType['type']);
|
|
186
|
+
length(length: number): this;
|
|
187
|
+
nullable(nullable?: boolean): this;
|
|
188
|
+
unique(unique?: boolean): this;
|
|
189
|
+
default(value: ColumnPropertiesType['default']): this;
|
|
190
|
+
}
|
|
191
|
+
declare class ForeignKeyConstraint {
|
|
192
|
+
column: string;
|
|
193
|
+
reference_table: {
|
|
194
|
+
table: string;
|
|
195
|
+
column: string;
|
|
196
|
+
};
|
|
197
|
+
onUpdateAction: 'cascade' | 'set null' | 'restrict' | 'no action';
|
|
198
|
+
onDeleteAction: 'cascade' | 'set null' | 'restrict' | 'no action';
|
|
199
|
+
constructor(column: string);
|
|
200
|
+
on(table: string): this;
|
|
201
|
+
references(column: string): this;
|
|
202
|
+
onDelete(action: typeof this.onDeleteAction): this;
|
|
203
|
+
onUpdate(action: typeof this.onUpdateAction): this;
|
|
204
|
+
}
|
|
205
|
+
declare class Blueprint {
|
|
206
|
+
tableName: string;
|
|
207
|
+
columns: Column[];
|
|
208
|
+
drop_coumns: string[];
|
|
209
|
+
foreignKeys: ForeignKeyConstraint[];
|
|
210
|
+
existingTable: boolean;
|
|
211
|
+
primaryKeys: string[];
|
|
212
|
+
constructor();
|
|
213
|
+
setTableName(tableName: string, existingTable?: boolean): void;
|
|
214
|
+
boolean(columnName: string): Column;
|
|
215
|
+
char(columnName: string): Column;
|
|
216
|
+
string(columnName: string, length?: number): Column;
|
|
217
|
+
text(columnName: string): Column;
|
|
218
|
+
json(columnName: string): Column;
|
|
219
|
+
jsonb(columnName: string): Column;
|
|
220
|
+
integer(columnName: string): Column;
|
|
221
|
+
float(columnName: string): Column;
|
|
222
|
+
double(columnName: string): Column;
|
|
223
|
+
id(): Column;
|
|
224
|
+
timestamps(): void;
|
|
225
|
+
date(columnName: string): Column;
|
|
226
|
+
timestamp(columnName: string): Column;
|
|
227
|
+
timestampTz(columnName: string): Column;
|
|
228
|
+
datetime(columnName: string): Column;
|
|
229
|
+
datetimeTz(columnName: string): Column;
|
|
230
|
+
primary(keys: string[]): void;
|
|
231
|
+
foreign(columnName: string): ForeignKeyConstraint;
|
|
232
|
+
dropColumn(columnName: string): void;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
export { Blueprint as B, type ColumnPropertiesType as C, Expression as E, ForeignKeyConstraint as F, type JoinCondition as J, type Parameter as P, type QueryParts as Q, Schema as S, Column as a, Connection as b, Query as c, QueryGrammar as d, SchemaGrammar as e, type whereOp as f, type whereOpColumn as g, type whereNested as h, type whereRaw as i, type whereNull as j, type whereType as k, type CompiledSql as l, type havingType as m, type joinType as n, type selectType as s, type whereBasic as w };
|
package/dist/Blueprint.d.mts
CHANGED
|
@@ -1,61 +1 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
type ColumnPropertiesType = {
|
|
4
|
-
type: 'string' | 'integer' | 'float' | 'double' | 'boolean' | 'char' | 'text' | 'date' | 'timestamp' | 'timestampz' | 'serial';
|
|
5
|
-
length: number;
|
|
6
|
-
nullable: boolean;
|
|
7
|
-
unique: boolean;
|
|
8
|
-
default: Parameter;
|
|
9
|
-
};
|
|
10
|
-
declare class Column {
|
|
11
|
-
columnName: string;
|
|
12
|
-
properties: ColumnPropertiesType;
|
|
13
|
-
constructor(columnName: string, type: ColumnPropertiesType['type']);
|
|
14
|
-
length(length: number): this;
|
|
15
|
-
nullable(nullable?: boolean): this;
|
|
16
|
-
unique(unique?: boolean): this;
|
|
17
|
-
default(value: ColumnPropertiesType['default']): this;
|
|
18
|
-
}
|
|
19
|
-
declare class ForeignKeyConstraint {
|
|
20
|
-
column: string;
|
|
21
|
-
reference_table: {
|
|
22
|
-
table: string;
|
|
23
|
-
column: string;
|
|
24
|
-
};
|
|
25
|
-
onUpdateAction: 'cascade' | 'set null' | 'restrict' | 'no action';
|
|
26
|
-
onDeleteAction: 'cascade' | 'set null' | 'restrict' | 'no action';
|
|
27
|
-
constructor(column: string);
|
|
28
|
-
on(table: string): this;
|
|
29
|
-
references(column: string): this;
|
|
30
|
-
onDelete(action: typeof this.onDeleteAction): this;
|
|
31
|
-
onUpdate(action: typeof this.onUpdateAction): this;
|
|
32
|
-
}
|
|
33
|
-
declare class Blueprint {
|
|
34
|
-
tableName: string;
|
|
35
|
-
columns: Column[];
|
|
36
|
-
drop_coumns: string[];
|
|
37
|
-
foreignKeys: ForeignKeyConstraint[];
|
|
38
|
-
existingTable: boolean;
|
|
39
|
-
primaryKeys: string[];
|
|
40
|
-
constructor();
|
|
41
|
-
setTableName(tableName: string, existingTable?: boolean): void;
|
|
42
|
-
Boolean(columnName: string): Column;
|
|
43
|
-
char(columnName: string): Column;
|
|
44
|
-
string(columnName: string, length?: number): Column;
|
|
45
|
-
text(columnName: string): Column;
|
|
46
|
-
integer(columnName: string): Column;
|
|
47
|
-
float(columnName: string): Column;
|
|
48
|
-
double(columnName: string): Column;
|
|
49
|
-
id(): Column;
|
|
50
|
-
timestamps(): void;
|
|
51
|
-
date(columnName: string): Column;
|
|
52
|
-
timestamp(columnName: string): Column;
|
|
53
|
-
timestampTz(columnName: string): Column;
|
|
54
|
-
datetime(columnName: string): Column;
|
|
55
|
-
datetimeTz(columnName: string): Column;
|
|
56
|
-
primary(keys: string[]): void;
|
|
57
|
-
foreign(columnName: string): ForeignKeyConstraint;
|
|
58
|
-
dropColumn(columnName: string): void;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
export { Blueprint, Column, type ColumnPropertiesType, ForeignKeyConstraint };
|
|
1
|
+
export { B as Blueprint, a as Column, C as ColumnPropertiesType, F as ForeignKeyConstraint } from './Blueprint-BDzA_swP.mjs';
|
package/dist/Blueprint.mjs
CHANGED
|
@@ -79,7 +79,7 @@ class Blueprint {
|
|
|
79
79
|
this.tableName = tableName;
|
|
80
80
|
this.existingTable = existingTable;
|
|
81
81
|
}
|
|
82
|
-
|
|
82
|
+
boolean(columnName) {
|
|
83
83
|
const rc = new Column(columnName, "boolean");
|
|
84
84
|
this.columns.push(rc);
|
|
85
85
|
return rc;
|
|
@@ -100,6 +100,16 @@ class Blueprint {
|
|
|
100
100
|
this.columns.push(rc);
|
|
101
101
|
return rc;
|
|
102
102
|
}
|
|
103
|
+
json(columnName) {
|
|
104
|
+
const rc = new Column(columnName, "json");
|
|
105
|
+
this.columns.push(rc);
|
|
106
|
+
return rc;
|
|
107
|
+
}
|
|
108
|
+
jsonb(columnName) {
|
|
109
|
+
const rc = new Column(columnName, "jsonb");
|
|
110
|
+
this.columns.push(rc);
|
|
111
|
+
return rc;
|
|
112
|
+
}
|
|
103
113
|
integer(columnName) {
|
|
104
114
|
const rc = new Column(columnName, "integer");
|
|
105
115
|
this.columns.push(rc);
|
package/dist/Blueprint.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Blueprint.mts"],"sourcesContent":["import { Expression } from './Expression.mjs';\nimport { Parameter } from './types.mjs';\n\nexport type ColumnPropertiesType = {\n type:\n | 'string'\n | 'integer'\n | 'float'\n | 'double'\n | 'boolean'\n | 'char'\n | 'text'\n | 'date'\n | 'timestamp'\n | 'timestampz'\n | 'serial';\n length: number;\n nullable: boolean;\n unique: boolean;\n default: Parameter;\n};\nexport class Column {\n columnName: string = '';\n properties: ColumnPropertiesType = {\n type: 'string',\n length: 255,\n nullable: false,\n unique: false,\n default: null,\n };\n\n constructor(columnName: string, type: ColumnPropertiesType['type']) {\n this.columnName = columnName;\n this.properties.type = type;\n }\n\n length(length: number) {\n this.properties.length = length;\n return this;\n }\n\n nullable(nullable: boolean = true) {\n this.properties.nullable = nullable;\n return this;\n }\n\n unique(unique: boolean = true) {\n this.properties.unique = unique;\n return this;\n }\n\n default(value: ColumnPropertiesType['default']) {\n this.properties.default = value;\n return this;\n }\n}\n\n// references('id').on('roles').onDelete('cascade').onUpdate('cascade');\nexport class ForeignKeyConstraint {\n column: string;\n reference_table: { table: string; column: string };\n onUpdateAction: 'cascade' | 'set null' | 'restrict' | 'no action' = 'restrict';\n onDeleteAction: 'cascade' | 'set null' | 'restrict' | 'no action' = 'restrict';\n\n constructor(column: string) {\n this.column = column;\n this.reference_table = { table: '', column: '' };\n }\n\n on(table: string) {\n this.reference_table.table = table;\n return this;\n }\n\n references(column: string) {\n this.reference_table.column = column;\n return this;\n }\n\n onDelete(action: typeof this.onDeleteAction) {\n this.onDeleteAction = action;\n return this;\n }\n\n onUpdate(action: typeof this.onUpdateAction) {\n this.onUpdateAction = action;\n return this;\n }\n}\n\nexport class Blueprint {\n tableName: string = '';\n columns: Column[] = [];\n drop_coumns: string[] = [];\n foreignKeys: ForeignKeyConstraint[] = [];\n existingTable: boolean = false;\n primaryKeys: string[] = [];\n constructor() {}\n setTableName(tableName: string, existingTable: boolean = false) {\n this.tableName = tableName;\n this.existingTable = existingTable;\n }\n\n
|
|
1
|
+
{"version":3,"sources":["../src/Blueprint.mts"],"sourcesContent":["import { Expression } from './Expression.mjs';\nimport { Parameter } from './types.mjs';\n\nexport type ColumnPropertiesType = {\n type:\n | 'string'\n | 'integer'\n | 'float'\n | 'double'\n | 'boolean'\n | 'char'\n | 'text'\n | 'date'\n | 'timestamp'\n | 'timestampz'\n | 'serial'\n | 'json'\n | 'jsonb';\n length: number;\n nullable: boolean;\n unique: boolean;\n default: Parameter;\n};\nexport class Column {\n columnName: string = '';\n properties: ColumnPropertiesType = {\n type: 'string',\n length: 255,\n nullable: false,\n unique: false,\n default: null,\n };\n\n constructor(columnName: string, type: ColumnPropertiesType['type']) {\n this.columnName = columnName;\n this.properties.type = type;\n }\n\n length(length: number) {\n this.properties.length = length;\n return this;\n }\n\n nullable(nullable: boolean = true) {\n this.properties.nullable = nullable;\n return this;\n }\n\n unique(unique: boolean = true) {\n this.properties.unique = unique;\n return this;\n }\n\n default(value: ColumnPropertiesType['default']) {\n this.properties.default = value;\n return this;\n }\n}\n\n// references('id').on('roles').onDelete('cascade').onUpdate('cascade');\nexport class ForeignKeyConstraint {\n column: string;\n reference_table: { table: string; column: string };\n onUpdateAction: 'cascade' | 'set null' | 'restrict' | 'no action' = 'restrict';\n onDeleteAction: 'cascade' | 'set null' | 'restrict' | 'no action' = 'restrict';\n\n constructor(column: string) {\n this.column = column;\n this.reference_table = { table: '', column: '' };\n }\n\n on(table: string) {\n this.reference_table.table = table;\n return this;\n }\n\n references(column: string) {\n this.reference_table.column = column;\n return this;\n }\n\n onDelete(action: typeof this.onDeleteAction) {\n this.onDeleteAction = action;\n return this;\n }\n\n onUpdate(action: typeof this.onUpdateAction) {\n this.onUpdateAction = action;\n return this;\n }\n}\n\nexport class Blueprint {\n tableName: string = '';\n columns: Column[] = [];\n drop_coumns: string[] = [];\n foreignKeys: ForeignKeyConstraint[] = [];\n existingTable: boolean = false;\n primaryKeys: string[] = [];\n constructor() {}\n setTableName(tableName: string, existingTable: boolean = false) {\n this.tableName = tableName;\n this.existingTable = existingTable;\n }\n\n boolean(columnName: string) {\n const rc = new Column(columnName, 'boolean');\n this.columns.push(rc);\n return rc;\n }\n\n char(columnName: string) {\n const rc = new Column(columnName, 'char');\n this.columns.push(rc);\n return rc;\n }\n\n string(columnName: string, length: number = 255) {\n const rc = new Column(columnName, 'string');\n rc.length(length);\n this.columns.push(rc);\n return rc;\n }\n\n text(columnName: string) {\n const rc = new Column(columnName, 'text');\n this.columns.push(rc);\n return rc;\n }\n\n json(columnName: string) {\n const rc = new Column(columnName, 'json');\n this.columns.push(rc);\n return rc;\n }\n\n jsonb(columnName: string) {\n const rc = new Column(columnName, 'jsonb');\n this.columns.push(rc);\n return rc;\n }\n\n integer(columnName: string) {\n const rc = new Column(columnName, 'integer');\n this.columns.push(rc);\n return rc;\n }\n\n float(columnName: string) {\n const rc = new Column(columnName, 'float');\n this.columns.push(rc);\n return rc;\n }\n\n double(columnName: string) {\n const rc = new Column(columnName, 'double');\n this.columns.push(rc);\n return rc;\n }\n\n id() {\n const rc = new Column('id', 'serial');\n this.columns.push(rc);\n this.primaryKeys.push('id');\n return rc;\n }\n\n timestamps() {\n this.columns.push(\n new Column('created_at', 'timestampz').default(new Expression('CURRENT_TIMESTAMP'))\n );\n this.columns.push(\n new Column('updated_at', 'timestampz').default(new Expression('CURRENT_TIMESTAMP'))\n );\n }\n\n date(columnName: string) {\n const rc = new Column(columnName, 'date');\n this.columns.push(rc);\n return rc;\n }\n\n timestamp(columnName: string) {\n const rc = new Column(columnName, 'timestamp');\n this.columns.push(rc);\n return rc;\n }\n\n timestampTz(columnName: string) {\n const rc = new Column(columnName, 'timestampz');\n this.columns.push(rc);\n return rc;\n }\n\n datetime(columnName: string) {\n return this.timestamp(columnName);\n }\n\n datetimeTz(columnName: string) {\n return this.timestampTz(columnName);\n }\n\n primary(keys: string[]) {\n this.primaryKeys = keys;\n }\n\n foreign(columnName: string) {\n const rc = new ForeignKeyConstraint(columnName);\n this.foreignKeys.push(rc);\n return rc;\n }\n\n dropColumn(columnName: string) {\n this.drop_coumns.push(columnName);\n }\n}\n"],"mappings":";;AAAA,SAAS,kBAAkB;AAuBpB,MAAM,OAAO;AAAA,EAvBpB,OAuBoB;AAAA;AAAA;AAAA,EAClB,aAAqB;AAAA,EACrB,aAAmC;AAAA,IACjC,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EAEA,YAAY,YAAoB,MAAoC;AAClE,SAAK,aAAa;AAClB,SAAK,WAAW,OAAO;AAAA,EACzB;AAAA,EAEA,OAAO,QAAgB;AACrB,SAAK,WAAW,SAAS;AACzB,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,WAAoB,MAAM;AACjC,SAAK,WAAW,WAAW;AAC3B,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,SAAkB,MAAM;AAC7B,SAAK,WAAW,SAAS;AACzB,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,OAAwC;AAC9C,SAAK,WAAW,UAAU;AAC1B,WAAO;AAAA,EACT;AACF;AAGO,MAAM,qBAAqB;AAAA,EA5DlC,OA4DkC;AAAA;AAAA;AAAA,EAChC;AAAA,EACA;AAAA,EACA,iBAAoE;AAAA,EACpE,iBAAoE;AAAA,EAEpE,YAAY,QAAgB;AAC1B,SAAK,SAAS;AACd,SAAK,kBAAkB,EAAE,OAAO,IAAI,QAAQ,GAAG;AAAA,EACjD;AAAA,EAEA,GAAG,OAAe;AAChB,SAAK,gBAAgB,QAAQ;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,QAAgB;AACzB,SAAK,gBAAgB,SAAS;AAC9B,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,QAAoC;AAC3C,SAAK,iBAAiB;AACtB,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,QAAoC;AAC3C,SAAK,iBAAiB;AACtB,WAAO;AAAA,EACT;AACF;AAEO,MAAM,UAAU;AAAA,EA5FvB,OA4FuB;AAAA;AAAA;AAAA,EACrB,YAAoB;AAAA,EACpB,UAAoB,CAAC;AAAA,EACrB,cAAwB,CAAC;AAAA,EACzB,cAAsC,CAAC;AAAA,EACvC,gBAAyB;AAAA,EACzB,cAAwB,CAAC;AAAA,EACzB,cAAc;AAAA,EAAC;AAAA,EACf,aAAa,WAAmB,gBAAyB,OAAO;AAC9D,SAAK,YAAY;AACjB,SAAK,gBAAgB;AAAA,EACvB;AAAA,EAEA,QAAQ,YAAoB;AAC1B,UAAM,KAAK,IAAI,OAAO,YAAY,SAAS;AAC3C,SAAK,QAAQ,KAAK,EAAE;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,YAAoB;AACvB,UAAM,KAAK,IAAI,OAAO,YAAY,MAAM;AACxC,SAAK,QAAQ,KAAK,EAAE;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,YAAoB,SAAiB,KAAK;AAC/C,UAAM,KAAK,IAAI,OAAO,YAAY,QAAQ;AAC1C,OAAG,OAAO,MAAM;AAChB,SAAK,QAAQ,KAAK,EAAE;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,YAAoB;AACvB,UAAM,KAAK,IAAI,OAAO,YAAY,MAAM;AACxC,SAAK,QAAQ,KAAK,EAAE;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,KAAK,YAAoB;AACvB,UAAM,KAAK,IAAI,OAAO,YAAY,MAAM;AACxC,SAAK,QAAQ,KAAK,EAAE;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAoB;AACxB,UAAM,KAAK,IAAI,OAAO,YAAY,OAAO;AACzC,SAAK,QAAQ,KAAK,EAAE;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,YAAoB;AAC1B,UAAM,KAAK,IAAI,OAAO,YAAY,SAAS;AAC3C,SAAK,QAAQ,KAAK,EAAE;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAAoB;AACxB,UAAM,KAAK,IAAI,OAAO,YAAY,OAAO;AACzC,SAAK,QAAQ,KAAK,EAAE;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,OAAO,YAAoB;AACzB,UAAM,KAAK,IAAI,OAAO,YAAY,QAAQ;AAC1C,SAAK,QAAQ,KAAK,EAAE;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,KAAK;AACH,UAAM,KAAK,IAAI,OAAO,MAAM,QAAQ;AACpC,SAAK,QAAQ,KAAK,EAAE;AACpB,SAAK,YAAY,KAAK,IAAI;AAC1B,WAAO;AAAA,EACT;AAAA,EAEA,aAAa;AACX,SAAK,QAAQ;AAAA,MACX,IAAI,OAAO,cAAc,YAAY,EAAE,QAAQ,IAAI,WAAW,mBAAmB,CAAC;AAAA,IACpF;AACA,SAAK,QAAQ;AAAA,MACX,IAAI,OAAO,cAAc,YAAY,EAAE,QAAQ,IAAI,WAAW,mBAAmB,CAAC;AAAA,IACpF;AAAA,EACF;AAAA,EAEA,KAAK,YAAoB;AACvB,UAAM,KAAK,IAAI,OAAO,YAAY,MAAM;AACxC,SAAK,QAAQ,KAAK,EAAE;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,UAAU,YAAoB;AAC5B,UAAM,KAAK,IAAI,OAAO,YAAY,WAAW;AAC7C,SAAK,QAAQ,KAAK,EAAE;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,YAAY,YAAoB;AAC9B,UAAM,KAAK,IAAI,OAAO,YAAY,YAAY;AAC9C,SAAK,QAAQ,KAAK,EAAE;AACpB,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,YAAoB;AAC3B,WAAO,KAAK,UAAU,UAAU;AAAA,EAClC;AAAA,EAEA,WAAW,YAAoB;AAC7B,WAAO,KAAK,YAAY,UAAU;AAAA,EACpC;AAAA,EAEA,QAAQ,MAAgB;AACtB,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,QAAQ,YAAoB;AAC1B,UAAM,KAAK,IAAI,qBAAqB,UAAU;AAC9C,SAAK,YAAY,KAAK,EAAE;AACxB,WAAO;AAAA,EACT;AAAA,EAEA,WAAW,YAAoB;AAC7B,SAAK,YAAY,KAAK,UAAU;AAAA,EAClC;AACF;","names":[]}
|
package/dist/Connection.d.mts
CHANGED
package/dist/Expression.d.mts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export { E as Expression } from './
|
|
1
|
+
export { E as Expression } from './Blueprint-BDzA_swP.mjs';
|
package/dist/Migration.d.mts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import { S as Schema } from './
|
|
2
|
-
import './Blueprint.mjs';
|
|
3
|
-
import './types-BEFQrxTG.mjs';
|
|
4
|
-
import './SchemaGrammar.mjs';
|
|
1
|
+
import { S as Schema } from './Blueprint-BDzA_swP.mjs';
|
|
5
2
|
|
|
6
3
|
declare abstract class Migration {
|
|
7
4
|
abstract up(schema: Schema): Promise<void>;
|
package/dist/Query.d.mts
CHANGED
package/dist/Query.mjs
CHANGED
|
@@ -24,6 +24,17 @@ class Query {
|
|
|
24
24
|
this.parts.table = tableName;
|
|
25
25
|
return this;
|
|
26
26
|
}
|
|
27
|
+
whereNested(func, joinCondition = "and", negateCondition = false) {
|
|
28
|
+
const subQuery = new Query(this.connection, this.grammar);
|
|
29
|
+
func(subQuery);
|
|
30
|
+
this.parts.where.push({
|
|
31
|
+
type: "nested",
|
|
32
|
+
query: subQuery,
|
|
33
|
+
joinCondition,
|
|
34
|
+
negateCondition
|
|
35
|
+
});
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
27
38
|
whereOp(column, operation, value, joinCondition = "and", negateCondition = false) {
|
|
28
39
|
this.parts.where.push({
|
|
29
40
|
type: "operation",
|
package/dist/Query.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/Query.mts"],"sourcesContent":["import { Connection } from './Connection.mjs';\nimport { QueryGrammar } from './QueryGrammar.mjs';\nimport {\n CompiledSql,\n JoinCondition,\n Parameter,\n selectType,\n whereType,\n havingType,\n joinType,\n} from './types.mjs';\n\nexport type QueryParts = {\n select: selectType[];\n table: string;\n join: joinType[];\n where: whereType[];\n groupBy: string[];\n having: havingType[];\n orderBy: string[];\n limit: number | null;\n offset: number | null;\n};\n\nexport class Query {\n allowedOperations: string[] = ['=', '>', '<', '!=', 'like', 'ilike'];\n parts: QueryParts = {\n select: ['*'],\n table: '',\n join: [],\n where: [],\n groupBy: [],\n having: [],\n orderBy: [],\n limit: null,\n offset: null,\n };\n\n constructor(\n private readonly connection: Connection | null,\n private readonly grammar: QueryGrammar\n ) {}\n\n table(tableName: string): this {\n this.parts.table = tableName;\n return this;\n }\n\n whereOp(\n column: string,\n operation: (typeof this.allowedOperations)[number],\n value: Parameter,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.where.push({\n type: 'operation',\n column,\n operation,\n value,\n joinCondition,\n negateCondition,\n });\n return this;\n }\n\n whereColumn(\n column1: string,\n operation: (typeof this.allowedOperations)[number],\n column2: string,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.where.push({\n type: 'operationColumn',\n column1,\n operation,\n column2,\n joinCondition,\n negateCondition,\n });\n return this;\n }\n\n whereNull(\n column: string,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.where.push({ type: 'null', column, joinCondition, negateCondition });\n return this;\n }\n\n clearWhere(): this {\n this.parts.where = [];\n return this;\n }\n\n select(selects: selectType[]): this {\n this.parts.select = [...selects];\n return this;\n }\n\n groupBy(columns: string[]): this {\n this.parts.groupBy = [...columns];\n return this;\n }\n\n havingOp(\n column: string,\n operation: (typeof this.allowedOperations)[number],\n value: Parameter,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.having.push({\n type: 'operation',\n column,\n operation,\n value,\n joinCondition,\n negateCondition,\n });\n return this;\n }\n\n havingRaw(\n sql: string,\n bindings: Parameter[],\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.having.push({ type: 'raw', sql, bindings, joinCondition, negateCondition });\n return this;\n }\n\n orderBy(column: string, direction: 'asc' | 'desc' = 'asc'): this {\n this.parts.orderBy.push(`${column} ${direction}`);\n return this;\n }\n\n limit(limit: number): this {\n this.parts.limit = limit;\n return this;\n }\n\n offset(offset: number): this {\n this.parts.offset = offset;\n return this;\n }\n\n toSql(): CompiledSql {\n return this.grammar.toSql(this);\n }\n\n async get() {\n return await this.connection?.runQuery(this.toSql());\n }\n\n async count(): Promise<number> {\n const csql: CompiledSql = this.grammar.compileCount(this);\n const result = await this.connection?.runQuery(csql);\n if (result && Array.isArray(result) && result.length > 0) {\n return parseInt(result[0]['count'], 10);\n }\n return 0;\n }\n\n async getCursor() {\n return await this.connection?.runCursor(this.toSql());\n }\n\n getConnection(): Connection | null {\n return this.connection;\n }\n\n async insert(data: Record<string, Parameter>) {\n const csql: CompiledSql = this.grammar.compileInsert(this, data);\n return await this.connection?.runQuery(csql);\n }\n\n async insertGetId(\n data: Record<string, Parameter>,\n options: { primaryKey: string[] } = { primaryKey: ['id'] }\n ) {\n const csql: CompiledSql = this.grammar.compileInsertGetId(this, data, options);\n return await this.connection?.runQuery(csql);\n }\n\n async update(data: Record<string, Parameter>) {\n const csql: CompiledSql = this.grammar.compileUpdate(this, data);\n return await this.connection?.runQuery(csql);\n }\n\n async upsert(data: Record<string, Parameter>, uniqueColumns: string[], updateColumns: string[]) {\n const csql: CompiledSql = this.grammar.compileUpsert(this, data, uniqueColumns, updateColumns);\n return await this.connection?.runQuery(csql);\n }\n\n async delete() {\n const csql: CompiledSql = this.grammar.compileDelete(this);\n return await this.connection?.runQuery(csql);\n }\n\n innerJoin(table: string, conditions: whereType[] | { column1: string; column2: string }[]): this {\n let conditions_corrected: whereType[] = [];\n for (const cond of conditions) {\n conditions_corrected.push({\n joinCondition: 'and',\n negateCondition: false,\n type: 'operationColumn',\n // @ts-ignore\n operation: '=',\n ...cond,\n });\n }\n this.parts.join.push({ type: 'inner', table, conditions: conditions_corrected });\n return this;\n }\n\n leftJoin(table: string, condtions: whereType[]): this {\n this.parts.join.push({ type: 'left', table, conditions: condtions });\n return this;\n }\n\n rightJoin(table: string, condtions: whereType[]): this {\n this.parts.join.push({ type: 'right', table, conditions: condtions });\n return this;\n }\n\n fullJoin(table: string, condtions: whereType[]): this {\n this.parts.join.push({ type: 'full', table, conditions: condtions });\n return this;\n }\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/Query.mts"],"sourcesContent":["import { Connection } from './Connection.mjs';\nimport { QueryGrammar } from './QueryGrammar.mjs';\nimport {\n CompiledSql,\n JoinCondition,\n Parameter,\n selectType,\n whereType,\n havingType,\n joinType,\n} from './types.mjs';\n\nexport type QueryParts = {\n select: selectType[];\n table: string;\n join: joinType[];\n where: whereType[];\n groupBy: string[];\n having: havingType[];\n orderBy: string[];\n limit: number | null;\n offset: number | null;\n};\n\nexport class Query {\n allowedOperations: string[] = ['=', '>', '<', '!=', 'like', 'ilike'];\n parts: QueryParts = {\n select: ['*'],\n table: '',\n join: [],\n where: [],\n groupBy: [],\n having: [],\n orderBy: [],\n limit: null,\n offset: null,\n };\n\n constructor(\n public readonly connection: Connection | null,\n public readonly grammar: QueryGrammar\n ) {}\n\n table(tableName: string): this {\n this.parts.table = tableName;\n return this;\n }\n\n whereNested(\n func: (q: Query) => void,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ) {\n const subQuery = new Query(this.connection, this.grammar);\n func(subQuery);\n this.parts.where.push({\n type: 'nested',\n query: subQuery,\n joinCondition,\n negateCondition,\n });\n return this;\n }\n\n whereOp(\n column: string,\n operation: (typeof this.allowedOperations)[number],\n value: Parameter,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.where.push({\n type: 'operation',\n column,\n operation,\n value,\n joinCondition,\n negateCondition,\n });\n return this;\n }\n\n whereColumn(\n column1: string,\n operation: (typeof this.allowedOperations)[number],\n column2: string,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.where.push({\n type: 'operationColumn',\n column1,\n operation,\n column2,\n joinCondition,\n negateCondition,\n });\n return this;\n }\n\n whereNull(\n column: string,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.where.push({ type: 'null', column, joinCondition, negateCondition });\n return this;\n }\n\n clearWhere(): this {\n this.parts.where = [];\n return this;\n }\n\n select(selects: selectType[]): this {\n this.parts.select = [...selects];\n return this;\n }\n\n groupBy(columns: string[]): this {\n this.parts.groupBy = [...columns];\n return this;\n }\n\n havingOp(\n column: string,\n operation: (typeof this.allowedOperations)[number],\n value: Parameter,\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.having.push({\n type: 'operation',\n column,\n operation,\n value,\n joinCondition,\n negateCondition,\n });\n return this;\n }\n\n havingRaw(\n sql: string,\n bindings: Parameter[],\n joinCondition: JoinCondition = 'and',\n negateCondition: boolean = false\n ): this {\n this.parts.having.push({ type: 'raw', sql, bindings, joinCondition, negateCondition });\n return this;\n }\n\n orderBy(column: string, direction: 'asc' | 'desc' = 'asc'): this {\n this.parts.orderBy.push(`${column} ${direction}`);\n return this;\n }\n\n limit(limit: number): this {\n this.parts.limit = limit;\n return this;\n }\n\n offset(offset: number): this {\n this.parts.offset = offset;\n return this;\n }\n\n toSql(): CompiledSql {\n return this.grammar.toSql(this);\n }\n\n async get() {\n return await this.connection?.runQuery(this.toSql());\n }\n\n async count(): Promise<number> {\n const csql: CompiledSql = this.grammar.compileCount(this);\n const result = await this.connection?.runQuery(csql);\n if (result && Array.isArray(result) && result.length > 0) {\n return parseInt(result[0]['count'], 10);\n }\n return 0;\n }\n\n async getCursor() {\n return await this.connection?.runCursor(this.toSql());\n }\n\n getConnection(): Connection | null {\n return this.connection;\n }\n\n async insert(data: Record<string, Parameter>) {\n const csql: CompiledSql = this.grammar.compileInsert(this, data);\n return await this.connection?.runQuery(csql);\n }\n\n async insertGetId(\n data: Record<string, Parameter>,\n options: { primaryKey: string[] } = { primaryKey: ['id'] }\n ) {\n const csql: CompiledSql = this.grammar.compileInsertGetId(this, data, options);\n return await this.connection?.runQuery(csql);\n }\n\n async update(data: Record<string, Parameter>) {\n const csql: CompiledSql = this.grammar.compileUpdate(this, data);\n return await this.connection?.runQuery(csql);\n }\n\n async upsert(data: Record<string, Parameter>, uniqueColumns: string[], updateColumns: string[]) {\n const csql: CompiledSql = this.grammar.compileUpsert(this, data, uniqueColumns, updateColumns);\n return await this.connection?.runQuery(csql);\n }\n\n async delete() {\n const csql: CompiledSql = this.grammar.compileDelete(this);\n return await this.connection?.runQuery(csql);\n }\n\n innerJoin(table: string, conditions: whereType[] | { column1: string; column2: string }[]): this {\n let conditions_corrected: whereType[] = [];\n for (const cond of conditions) {\n conditions_corrected.push({\n joinCondition: 'and',\n negateCondition: false,\n type: 'operationColumn',\n // @ts-ignore\n operation: '=',\n ...cond,\n });\n }\n this.parts.join.push({ type: 'inner', table, conditions: conditions_corrected });\n return this;\n }\n\n leftJoin(table: string, condtions: whereType[]): this {\n this.parts.join.push({ type: 'left', table, conditions: condtions });\n return this;\n }\n\n rightJoin(table: string, condtions: whereType[]): this {\n this.parts.join.push({ type: 'right', table, conditions: condtions });\n return this;\n }\n\n fullJoin(table: string, condtions: whereType[]): this {\n this.parts.join.push({ type: 'full', table, conditions: condtions });\n return this;\n }\n}\n"],"mappings":"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","names":[]}
|
package/dist/QueryGrammar.d.mts
CHANGED
package/dist/QueryGrammar.mjs
CHANGED
|
@@ -102,6 +102,15 @@ class QueryGrammar {
|
|
|
102
102
|
}
|
|
103
103
|
return { sql, bindings };
|
|
104
104
|
}
|
|
105
|
+
compileWhereNested(w) {
|
|
106
|
+
const subQuery = w.query;
|
|
107
|
+
const { sql, bindings } = subQuery.grammar.compileWhere(subQuery.parts.where);
|
|
108
|
+
let sql2 = sql.replace(/^where /, "");
|
|
109
|
+
return {
|
|
110
|
+
sql: `(${sql2})`,
|
|
111
|
+
bindings
|
|
112
|
+
};
|
|
113
|
+
}
|
|
105
114
|
compileWhereOperation(w) {
|
|
106
115
|
if (w.operation.toLowerCase() === "in" && Array.isArray(w.value)) {
|
|
107
116
|
return {
|
|
@@ -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} 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 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 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\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 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":[]}
|
package/dist/Schema.d.mts
CHANGED
package/dist/SchemaGrammar.d.mts
CHANGED
|
@@ -1,21 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { C as CompiledSql, P as Parameter } from './types-BEFQrxTG.mjs';
|
|
3
|
-
|
|
4
|
-
declare class SchemaGrammar {
|
|
5
|
-
toSql(blueprint: Blueprint): string;
|
|
6
|
-
compileCreateTable(blueprint: Blueprint): CompiledSql;
|
|
7
|
-
compileAlterTable(blueprint: Blueprint): CompiledSql;
|
|
8
|
-
compileColumn(column: Column): string;
|
|
9
|
-
escape(value: Parameter): string;
|
|
10
|
-
compilePrimaryKeys(primaryKeys: string[]): string;
|
|
11
|
-
compileTables(schema?: string | string[] | undefined): CompiledSql;
|
|
12
|
-
compileTableExists(tableName: string, schema?: string): CompiledSql;
|
|
13
|
-
compileDropTable(tableName: string): CompiledSql;
|
|
14
|
-
compileDropTableIfExists(tableName: string): CompiledSql;
|
|
15
|
-
protected compileSchemaWhereClause(schema: string | string[] | undefined, column: string): string;
|
|
16
|
-
protected quoteString(value: string | string[]): string;
|
|
17
|
-
protected doubleQuoteString(value: string | string[]): string;
|
|
18
|
-
protected compileForeignKey(foreignKey: ForeignKeyConstraint): string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export { SchemaGrammar };
|
|
1
|
+
export { e as SchemaGrammar } from './Blueprint-BDzA_swP.mjs';
|
package/dist/SchemaGrammar.mjs
CHANGED
|
@@ -63,6 +63,10 @@ class SchemaGrammar {
|
|
|
63
63
|
rc.push("double precision");
|
|
64
64
|
} else if (column.properties.type === "date") {
|
|
65
65
|
rc.push("date");
|
|
66
|
+
} else if (column.properties.type === "json") {
|
|
67
|
+
rc.push("json");
|
|
68
|
+
} else if (column.properties.type === "jsonb") {
|
|
69
|
+
rc.push("jsonb");
|
|
66
70
|
} else {
|
|
67
71
|
throw new Error("Unknown column type: " + column.properties.type);
|
|
68
72
|
}
|