prostgles-server 3.0.87 → 3.0.89
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/.eslintignore +5 -0
- package/.eslintrc.json +30 -0
- package/dist/DBEventsManager.js +1 -1
- package/dist/DBEventsManager.js.map +1 -1
- package/dist/DBSchemaBuilder.d.ts.map +1 -1
- package/dist/DBSchemaBuilder.js +6 -6
- package/dist/DBSchemaBuilder.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions.js +9 -9
- package/dist/DboBuilder/QueryBuilder/Functions.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js +8 -7
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/makeSelectQuery.js +4 -4
- package/dist/DboBuilder/QueryBuilder/makeSelectQuery.js.map +1 -1
- package/dist/DboBuilder/TableHandler.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler.js +18 -20
- package/dist/DboBuilder/TableHandler.js.map +1 -1
- package/dist/DboBuilder/ViewHandler.d.ts +0 -10
- package/dist/DboBuilder/ViewHandler.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler.js +50 -63
- package/dist/DboBuilder/ViewHandler.js.map +1 -1
- package/dist/DboBuilder/delete.js +0 -1
- package/dist/DboBuilder/delete.js.map +1 -1
- package/dist/DboBuilder/getColumns.js +5 -4
- package/dist/DboBuilder/getColumns.js.map +1 -1
- package/dist/DboBuilder/getCondition.d.ts.map +1 -1
- package/dist/DboBuilder/getCondition.js +6 -6
- package/dist/DboBuilder/getCondition.js.map +1 -1
- package/dist/DboBuilder/insert.js +15 -16
- package/dist/DboBuilder/insert.js.map +1 -1
- package/dist/DboBuilder/insertDataParse.d.ts.map +1 -1
- package/dist/DboBuilder/insertDataParse.js +9 -10
- package/dist/DboBuilder/insertDataParse.js.map +1 -1
- package/dist/DboBuilder/parseUpdateRules.js +2 -2
- package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
- package/dist/DboBuilder/runSQL.d.ts.map +1 -1
- package/dist/DboBuilder/runSQL.js +5 -5
- package/dist/DboBuilder/runSQL.js.map +1 -1
- package/dist/DboBuilder/subscribe.js +3 -3
- package/dist/DboBuilder/subscribe.js.map +1 -1
- package/dist/DboBuilder/update.js +5 -6
- package/dist/DboBuilder/update.js.map +1 -1
- package/dist/DboBuilder/uploadFile.d.ts.map +1 -1
- package/dist/DboBuilder/uploadFile.js +1 -1
- package/dist/DboBuilder/uploadFile.js.map +1 -1
- package/dist/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder.js +13 -14
- package/dist/DboBuilder.js.map +1 -1
- package/dist/FileManager.d.ts.map +1 -1
- package/dist/FileManager.js +3 -5
- package/dist/FileManager.js.map +1 -1
- package/dist/Filtering.js +7 -7
- package/dist/Filtering.js.map +1 -1
- package/dist/JSONBValidation/validate_jsonb_schema_sql.d.ts +3 -0
- package/dist/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +1 -0
- package/dist/JSONBValidation/validate_jsonb_schema_sql.js +295 -0
- package/dist/JSONBValidation/validate_jsonb_schema_sql.js.map +1 -0
- package/dist/JSONBValidation/validation.d.ts +108 -0
- package/dist/JSONBValidation/validation.d.ts.map +1 -0
- package/dist/JSONBValidation/validation.js +222 -0
- package/dist/JSONBValidation/validation.js.map +1 -0
- package/dist/PostgresNotifListenManager.js +1 -1
- package/dist/PostgresNotifListenManager.js.map +1 -1
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/Prostgles.js +20 -20
- package/dist/Prostgles.js.map +1 -1
- package/dist/PubSubManager/initPubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/initPubSubManager.js +10 -7
- package/dist/PubSubManager/initPubSubManager.js.map +1 -1
- package/dist/PublishParser.d.ts.map +1 -1
- package/dist/PublishParser.js +122 -125
- package/dist/PublishParser.js.map +1 -1
- package/dist/SyncReplication.d.ts.map +1 -1
- package/dist/SyncReplication.js +19 -16
- package/dist/SyncReplication.js.map +1 -1
- package/dist/TableConfig.d.ts +9 -5
- package/dist/TableConfig.d.ts.map +1 -1
- package/dist/TableConfig.js +33 -12
- package/dist/TableConfig.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/shortestPath.js +11 -11
- package/dist/shortestPath.js.map +1 -1
- package/dist/validation.d.ts +50 -24
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +177 -53
- package/dist/validation.js.map +1 -1
- package/lib/AuthHandler.d.ts +11 -11
- package/lib/AuthHandler.d.ts.map +1 -1
- package/lib/DBEventsManager.js +1 -1
- package/lib/DBEventsManager.ts +1 -1
- package/lib/DBSchemaBuilder.d.ts +3 -3
- package/lib/DBSchemaBuilder.d.ts.map +1 -1
- package/lib/DBSchemaBuilder.js +6 -6
- package/lib/DBSchemaBuilder.ts +10 -12
- package/lib/DboBuilder/QueryBuilder/Functions.d.ts +3 -3
- package/lib/DboBuilder/QueryBuilder/Functions.d.ts.map +1 -1
- package/lib/DboBuilder/QueryBuilder/Functions.js +9 -9
- package/lib/DboBuilder/QueryBuilder/Functions.ts +13 -13
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts +3 -3
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.js +8 -7
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.ts +12 -12
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +1 -1
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.js +4 -4
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.ts +5 -5
- package/lib/DboBuilder/TableHandler.d.ts +1 -1
- package/lib/DboBuilder/TableHandler.d.ts.map +1 -1
- package/lib/DboBuilder/TableHandler.js +18 -20
- package/lib/DboBuilder/TableHandler.ts +21 -20
- package/lib/DboBuilder/ViewHandler.d.ts +1 -11
- package/lib/DboBuilder/ViewHandler.d.ts.map +1 -1
- package/lib/DboBuilder/ViewHandler.js +50 -63
- package/lib/DboBuilder/ViewHandler.ts +68 -97
- package/lib/DboBuilder/delete.js +0 -1
- package/lib/DboBuilder/delete.ts +1 -1
- package/lib/DboBuilder/getColumns.js +5 -4
- package/lib/DboBuilder/getColumns.ts +5 -5
- package/lib/DboBuilder/getCondition.d.ts.map +1 -1
- package/lib/DboBuilder/getCondition.js +6 -6
- package/lib/DboBuilder/getCondition.ts +7 -7
- package/lib/DboBuilder/insert.js +15 -16
- package/lib/DboBuilder/insert.ts +18 -18
- package/lib/DboBuilder/insertDataParse.d.ts.map +1 -1
- package/lib/DboBuilder/insertDataParse.js +9 -10
- package/lib/DboBuilder/insertDataParse.ts +42 -43
- package/lib/DboBuilder/parseUpdateRules.js +2 -2
- package/lib/DboBuilder/parseUpdateRules.ts +2 -2
- package/lib/DboBuilder/runSQL.d.ts.map +1 -1
- package/lib/DboBuilder/runSQL.js +5 -5
- package/lib/DboBuilder/runSQL.ts +6 -6
- package/lib/DboBuilder/subscribe.d.ts +1 -1
- package/lib/DboBuilder/subscribe.d.ts.map +1 -1
- package/lib/DboBuilder/subscribe.js +3 -3
- package/lib/DboBuilder/subscribe.ts +3 -3
- package/lib/DboBuilder/update.js +5 -6
- package/lib/DboBuilder/update.ts +6 -6
- package/lib/DboBuilder/uploadFile.d.ts.map +1 -1
- package/lib/DboBuilder/uploadFile.js +1 -1
- package/lib/DboBuilder/uploadFile.ts +2 -2
- package/lib/DboBuilder.d.ts +22 -22
- package/lib/DboBuilder.d.ts.map +1 -1
- package/lib/DboBuilder.js +13 -14
- package/lib/DboBuilder.ts +19 -19
- package/lib/FileManager.d.ts +6 -6
- package/lib/FileManager.d.ts.map +1 -1
- package/lib/FileManager.js +3 -5
- package/lib/FileManager.ts +7 -6
- package/lib/Filtering.d.ts +1 -1
- package/lib/Filtering.d.ts.map +1 -1
- package/lib/Filtering.js +7 -7
- package/lib/Filtering.ts +7 -7
- package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts +3 -0
- package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +1 -0
- package/lib/JSONBValidation/validate_jsonb_schema_sql.js +294 -0
- package/lib/JSONBValidation/validate_jsonb_schema_sql.ts +293 -0
- package/lib/JSONBValidation/validation.d.ts +108 -0
- package/lib/JSONBValidation/validation.d.ts.map +1 -0
- package/lib/JSONBValidation/validation.js +221 -0
- package/lib/JSONBValidation/validation.ts +332 -0
- package/lib/PostgresNotifListenManager.d.ts +1 -1
- package/lib/PostgresNotifListenManager.d.ts.map +1 -1
- package/lib/PostgresNotifListenManager.js +1 -1
- package/lib/PostgresNotifListenManager.ts +1 -1
- package/lib/Prostgles.d.ts +14 -14
- package/lib/Prostgles.d.ts.map +1 -1
- package/lib/Prostgles.js +20 -20
- package/lib/Prostgles.ts +22 -21
- package/lib/PubSubManager/PubSubManager.d.ts +7 -7
- package/lib/PubSubManager/PubSubManager.d.ts.map +1 -1
- package/lib/PubSubManager/initPubSubManager.d.ts.map +1 -1
- package/lib/PubSubManager/initPubSubManager.js +10 -7
- package/lib/PubSubManager/initPubSubManager.ts +12 -7
- package/lib/PublishParser.d.ts +32 -32
- package/lib/PublishParser.d.ts.map +1 -1
- package/lib/PublishParser.js +121 -124
- package/lib/PublishParser.ts +125 -127
- package/lib/SchemaWatch.d.ts +1 -1
- package/lib/SchemaWatch.d.ts.map +1 -1
- package/lib/SyncReplication.d.ts +5 -5
- package/lib/SyncReplication.d.ts.map +1 -1
- package/lib/SyncReplication.js +19 -16
- package/lib/SyncReplication.ts +470 -471
- package/lib/TableConfig.d.ts +28 -24
- package/lib/TableConfig.d.ts.map +1 -1
- package/lib/TableConfig.js +33 -12
- package/lib/TableConfig.ts +55 -21
- package/lib/index.js +1 -1
- package/lib/index.ts +1 -1
- package/lib/shortestPath.d.ts +1 -1
- package/lib/shortestPath.d.ts.map +1 -1
- package/lib/shortestPath.js +11 -11
- package/lib/shortestPath.ts +11 -11
- package/package.json +10 -6
- package/tests/client/PID.txt +1 -1
- package/tests/client/package-lock.json +53 -31
- package/tests/client/package.json +4 -1
- package/tests/isomorphic_queries.d.ts +4 -1
- package/tests/isomorphic_queries.d.ts.map +1 -1
- package/tests/isomorphic_queries.js +38 -30
- package/tests/isomorphic_queries.ts +40 -33
- package/tests/server/DBoGenerated.d.ts +1 -1
- package/tests/server/index.js +8 -7
- package/tests/server/index.ts +10 -8
- package/tests/server/package-lock.json +76 -58
- package/tests/server/package.json +2 -2
- package/tests/server/server.ts +2 -3
- package/lib/validation.d.ts +0 -100
- package/lib/validation.d.ts.map +0 -1
- package/lib/validation.js +0 -280
- package/lib/validation.ts +0 -360
package/lib/DBSchemaBuilder.ts
CHANGED
|
@@ -3,11 +3,11 @@ import prostgles from ".";
|
|
|
3
3
|
import { Auth } from "./AuthHandler";
|
|
4
4
|
import { DBHandlerServer, DboBuilder, escapeTSNames, postgresToTsType } from "./DboBuilder";
|
|
5
5
|
import { PublishAllOrNothing, PublishParams, PublishTableRule, PublishViewRule, } from "./PublishParser";
|
|
6
|
-
import { getJSONBSchemaTSTypes } from "./validation";
|
|
6
|
+
import { getJSONBSchemaTSTypes, JSONB } from "./JSONBValidation/validation";
|
|
7
7
|
|
|
8
8
|
|
|
9
9
|
export const getDBSchema = (dboBuilder: DboBuilder): string => {
|
|
10
|
-
|
|
10
|
+
const tables: string[] = [];
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
/** Tables and columns are sorted to avoid infinite loops due to changing order */
|
|
@@ -17,9 +17,10 @@ export const getDBSchema = (dboBuilder: DboBuilder): string => {
|
|
|
17
17
|
let type: string = (c.is_nullable? "null | " : "") + postgresToTsType(c.udt_name) + ";"
|
|
18
18
|
const colConf = dboBuilder.prostgles.tableConfigurator?.getColumnConfig(tov.name, c.name);
|
|
19
19
|
if(colConf){
|
|
20
|
-
if(isObject(colConf) &&
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
if(isObject(colConf) && (colConf.jsonbSchema || colConf.jsonbSchemaType)){
|
|
21
|
+
const schema: JSONB.JSONBSchema = colConf.jsonbSchema? colConf.jsonbSchema : { ...colConf, type: colConf.jsonbSchemaType }
|
|
22
|
+
// if(!colConf.jsonbSchema) throw "colConf.jsonbSchema missing";
|
|
23
|
+
type = getJSONBSchemaTSTypes(schema, { nullable: colConf.nullable }, " ");
|
|
23
24
|
} else if(isObject(colConf) && "enum" in colConf){
|
|
24
25
|
if(!colConf.enum) throw "colConf.enum missing"
|
|
25
26
|
const types = colConf.enum.map(t => typeof t === "number"? t : JSON.stringify(t));
|
|
@@ -60,9 +61,6 @@ export type DBOFullyTyped<Schema = void> = Schema extends DBSchema? (
|
|
|
60
61
|
) :
|
|
61
62
|
DBHandlerServer;
|
|
62
63
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
64
|
export type PublishFullyTyped<Schema = void> = Schema extends DBSchema? (
|
|
67
65
|
| PublishAllOrNothing
|
|
68
66
|
| {
|
|
@@ -101,7 +99,7 @@ export type PublishFullyTyped<Schema = void> = Schema extends DBSchema? (
|
|
|
101
99
|
publish: async (params) => {
|
|
102
100
|
const row = await params.dbo.dwadwa.find?.({});
|
|
103
101
|
|
|
104
|
-
return "*" as
|
|
102
|
+
return "*" as const
|
|
105
103
|
},
|
|
106
104
|
onReady: (dbo) => {
|
|
107
105
|
dbo.tdwa.find!()
|
|
@@ -151,7 +149,7 @@ export type PublishFullyTyped<Schema = void> = Schema extends DBSchema? (
|
|
|
151
149
|
const r = {
|
|
152
150
|
tbl1: {
|
|
153
151
|
select: {
|
|
154
|
-
fields: "*" as
|
|
152
|
+
fields: "*" as const,
|
|
155
153
|
forcedFilter: { col1: 32, col2: "" }
|
|
156
154
|
},
|
|
157
155
|
getColumns: true,
|
|
@@ -162,7 +160,7 @@ export type PublishFullyTyped<Schema = void> = Schema extends DBSchema? (
|
|
|
162
160
|
},
|
|
163
161
|
tbl2: {
|
|
164
162
|
delete: {
|
|
165
|
-
filterFields: "*" as
|
|
163
|
+
filterFields: "*" as const,
|
|
166
164
|
forcedFilter: {col1: 2}
|
|
167
165
|
}
|
|
168
166
|
}
|
|
@@ -181,7 +179,7 @@ export type PublishFullyTyped<Schema = void> = Schema extends DBSchema? (
|
|
|
181
179
|
},
|
|
182
180
|
tbl2: {
|
|
183
181
|
delete: {
|
|
184
|
-
filterFields: "*" as
|
|
182
|
+
filterFields: "*" as const,
|
|
185
183
|
forcedFilter: { col1: 2 }
|
|
186
184
|
}
|
|
187
185
|
}
|
|
@@ -5,14 +5,14 @@ export declare const parseFunction: (funcData: {
|
|
|
5
5
|
functions: FunctionSpec[];
|
|
6
6
|
allowedFields: string[];
|
|
7
7
|
}) => FunctionSpec;
|
|
8
|
-
|
|
8
|
+
type GetQueryArgs = {
|
|
9
9
|
allColumns: ColumnInfo[];
|
|
10
10
|
allowedFields: string[];
|
|
11
11
|
args: any[];
|
|
12
12
|
tableAlias?: string;
|
|
13
13
|
ctidField?: string;
|
|
14
14
|
};
|
|
15
|
-
export
|
|
15
|
+
export type FieldSpec = {
|
|
16
16
|
name: string;
|
|
17
17
|
type: "column" | "computed";
|
|
18
18
|
/**
|
|
@@ -20,7 +20,7 @@ export declare type FieldSpec = {
|
|
|
20
20
|
*/
|
|
21
21
|
getQuery: (params: Omit<GetQueryArgs, "args">) => string;
|
|
22
22
|
};
|
|
23
|
-
export
|
|
23
|
+
export type FunctionSpec = {
|
|
24
24
|
name: string;
|
|
25
25
|
description?: string;
|
|
26
26
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Functions.d.ts","sourceRoot":"","sources":["Functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,UAAU,EAAqB,uBAAuB,EAAuC,MAAM,iBAAiB,CAAC;AAKtI,eAAO,MAAM,aAAa,aAAc;IAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC;IAAC,IAAI,EAAE,GAAG,EAAE,CAAC;IAAE,SAAS,EAAE,YAAY,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAC;CAAE,KAAG,YA0C5I,CAAA;AAGD,
|
|
1
|
+
{"version":3,"file":"Functions.d.ts","sourceRoot":"","sources":["Functions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,UAAU,EAAqB,uBAAuB,EAAuC,MAAM,iBAAiB,CAAC;AAKtI,eAAO,MAAM,aAAa,aAAc;IAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC;IAAC,IAAI,EAAE,GAAG,EAAE,CAAC;IAAE,SAAS,EAAE,YAAY,EAAE,CAAC;IAAC,aAAa,EAAE,MAAM,EAAE,CAAC;CAAE,KAAG,YA0C5I,CAAA;AAGD,KAAK,YAAY,GAAG;IAClB,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B;;OAEG;IACH,QAAQ,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC;CAC1D,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC;IAEtB;;OAEG;IAGH;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,UAAU,CAAC;IAC9C;;;OAGG;IACH,SAAS,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,GAAG,MAAM,EAAE,CAAC;IAC3C;;OAEG;IACH,QAAQ,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,MAAM,CAAC;IAE3C,UAAU,CAAC,EAAE,uBAAuB,CAAC;CACtC,CAAC;AA8VF;;EAEE;AACF,eAAO,MAAM,SAAS,EAAE,YAAY,EAwjBnC,CAAC;AAGF,eAAO,MAAM,eAAe,EAAE,SAAS,EA8BtC,CAAC"}
|
|
@@ -137,7 +137,7 @@ const FTS_Funcs =
|
|
|
137
137
|
getQuery: ({ allColumns, args, tableAlias }) => {
|
|
138
138
|
const col = (0, prostgles_types_1.asName)(args[0]);
|
|
139
139
|
let qVal = args[1], qType = "to_tsquery";
|
|
140
|
-
|
|
140
|
+
const _type = type ? (asValue(type) + ",") : "";
|
|
141
141
|
const searchTypes = prostgles_types_1.TextFilter_FullTextSearchFilterKeys;
|
|
142
142
|
/* { to_tsquery: 'search term' } */
|
|
143
143
|
if ((0, DboBuilder_1.isPlainObject)(qVal)) {
|
|
@@ -308,9 +308,9 @@ PostGIS_Funcs = PostGIS_Funcs.concat([
|
|
|
308
308
|
if (otherArgs.length)
|
|
309
309
|
secondArg = ", " + otherArgs.map(arg => asValue(arg)).join(", ");
|
|
310
310
|
const escTabelName = (0, QueryBuilder_1.asNameAlias)(colName, tableAlias) + "::geometry";
|
|
311
|
-
|
|
311
|
+
const result = DboBuilder_1.pgp.as.format(fname + "(" + escTabelName + secondArg + (fname === "ST_AsGeoJSON" ? ")::jsonb" : ")"));
|
|
312
312
|
if (["ST_Centroid", "ST_SnapToGrid", "ST_Simplify"].includes(fname)) {
|
|
313
|
-
|
|
313
|
+
const r = `ST_AsGeoJSON(${result})::jsonb`;
|
|
314
314
|
return r;
|
|
315
315
|
}
|
|
316
316
|
return result;
|
|
@@ -547,7 +547,7 @@ exports.FUNCTIONS = [
|
|
|
547
547
|
minute: "hour",
|
|
548
548
|
second: "minute"
|
|
549
549
|
};
|
|
550
|
-
|
|
550
|
+
const res = `(date_trunc(${asValue(prevInt[unit] || "hour")}, ${col}) + date_part(${asValue(unit, "::text")}, ${col})::int / ${val} * interval ${asValue(val + " " + unit)})`;
|
|
551
551
|
// console.log(res);
|
|
552
552
|
return res;
|
|
553
553
|
}
|
|
@@ -721,7 +721,7 @@ exports.FUNCTIONS = [
|
|
|
721
721
|
const cols = ViewHandler_1.ViewHandler._parseFieldFilter(args[0], false, allowedFields);
|
|
722
722
|
let term = args[1];
|
|
723
723
|
const rawTerm = args[1];
|
|
724
|
-
|
|
724
|
+
const { edgeTruncate, noFields = false, returnType, matchCase = false } = args[2] || {};
|
|
725
725
|
if (!(0, prostgles_types_1.isEmpty)(args[2])) {
|
|
726
726
|
const keys = Object.keys(args[2]);
|
|
727
727
|
const validKeys = ["edgeTruncate", "noFields", "returnType", "matchCase"];
|
|
@@ -766,7 +766,7 @@ exports.FUNCTIONS = [
|
|
|
766
766
|
END
|
|
767
767
|
`;
|
|
768
768
|
};
|
|
769
|
-
|
|
769
|
+
const colRaw = "( " + cols.map(c => `${noFields ? "" : (asValue(c + ": ") + " || ")} COALESCE(${(0, QueryBuilder_1.asNameAlias)(c, tableAlias)}::TEXT, '')`).join(" || ', ' || ") + " )";
|
|
770
770
|
let col = colRaw;
|
|
771
771
|
term = asValue(term);
|
|
772
772
|
if (!matchCase) {
|
|
@@ -787,7 +787,7 @@ exports.FUNCTIONS = [
|
|
|
787
787
|
}
|
|
788
788
|
else if (returnType === "object" || returnType === "boolean") {
|
|
789
789
|
const hasChars = Boolean(rawTerm && /[a-z]/i.test(rawTerm));
|
|
790
|
-
|
|
790
|
+
const validCols = cols.map(c => {
|
|
791
791
|
const colInfo = allColumns.find(ac => ac.name === c);
|
|
792
792
|
return {
|
|
793
793
|
key: c,
|
|
@@ -795,7 +795,7 @@ exports.FUNCTIONS = [
|
|
|
795
795
|
};
|
|
796
796
|
})
|
|
797
797
|
.filter(c => c.colInfo && c.colInfo.udt_name !== "bytea");
|
|
798
|
-
|
|
798
|
+
const _cols = validCols.filter(c =>
|
|
799
799
|
/** Exclude numeric columns when the search tern contains a character */
|
|
800
800
|
!hasChars ||
|
|
801
801
|
(0, DboBuilder_1.postgresToTsType)(c.colInfo.udt_name) !== "number");
|
|
@@ -820,7 +820,7 @@ exports.FUNCTIONS = [
|
|
|
820
820
|
'WK' || trim(to_char(${colNameEscaped}, 'WW'))
|
|
821
821
|
) END)`;
|
|
822
822
|
}
|
|
823
|
-
|
|
823
|
+
const colTxt = `COALESCE(${colSelect}, '')`; // position(${term} IN ${colTxt}) > 0
|
|
824
824
|
if (returnType === "boolean") {
|
|
825
825
|
return `
|
|
826
826
|
WHEN ${colTxt} ${matchCase ? "LIKE" : "ILIKE"} ${asValue('%' + rawTerm + '%')}
|
|
@@ -111,7 +111,7 @@ export type FunctionSpec = {
|
|
|
111
111
|
};
|
|
112
112
|
|
|
113
113
|
const MAX_COL_NUM = 1600;
|
|
114
|
-
const asValue = (v: any, castAs
|
|
114
|
+
const asValue = (v: any, castAs = "") => pgp.as.format("$1" + castAs, [v]);
|
|
115
115
|
|
|
116
116
|
const parseUnix = (colName: string, tableAlias: string | undefined, allColumns: ColumnInfo[]) => {
|
|
117
117
|
const col = allColumns.find(c => c.name === colName);
|
|
@@ -210,14 +210,14 @@ const FTS_Funcs: FunctionSpec[] =
|
|
|
210
210
|
].map(type => ({
|
|
211
211
|
name: "$ts_headline" + (type? ("_" + type) : ""),
|
|
212
212
|
description: ` :[column_name <string>, search_term: <string | { to_tsquery: string } > ] -> sha512 hash of the of column content`,
|
|
213
|
-
type: "function" as
|
|
213
|
+
type: "function" as const,
|
|
214
214
|
singleColArg: true,
|
|
215
215
|
numArgs: 2,
|
|
216
216
|
getFields: ([column]) => [column],
|
|
217
217
|
getQuery: ({ allColumns, args, tableAlias }) => {
|
|
218
218
|
const col = asName(args[0]);
|
|
219
219
|
let qVal = args[1], qType = "to_tsquery";
|
|
220
|
-
|
|
220
|
+
const _type = type? (asValue(type) + ",") : "";
|
|
221
221
|
|
|
222
222
|
const searchTypes = TextFilter_FullTextSearchFilterKeys;
|
|
223
223
|
|
|
@@ -234,7 +234,7 @@ const FTS_Funcs: FunctionSpec[] =
|
|
|
234
234
|
qVal = pgp.as.format(qType + "($1)", [qVal])
|
|
235
235
|
} else throw "Bad second arg. Exepcting search string or { to_tsquery: 'search string' }";
|
|
236
236
|
|
|
237
|
-
const res
|
|
237
|
+
const res = `ts_headline(${_type} ${col}::text, ${qVal}, 'ShortWord=1 ' )`
|
|
238
238
|
// console.log(res)
|
|
239
239
|
|
|
240
240
|
return res
|
|
@@ -273,7 +273,7 @@ let PostGIS_Funcs: FunctionSpec[] = ([
|
|
|
273
273
|
] as const).map(({ fname, description }) => ({
|
|
274
274
|
name: "$" + fname,
|
|
275
275
|
description,
|
|
276
|
-
type: "function" as
|
|
276
|
+
type: "function" as const,
|
|
277
277
|
singleColArg: true,
|
|
278
278
|
numArgs: 1,
|
|
279
279
|
canBeUsedForFilter: fname === "ST_DWithin",
|
|
@@ -403,9 +403,9 @@ let PostGIS_Funcs: FunctionSpec[] = ([
|
|
|
403
403
|
let secondArg = "";
|
|
404
404
|
if(otherArgs.length) secondArg = ", " + otherArgs.map(arg => asValue(arg)).join(", ");
|
|
405
405
|
const escTabelName = asNameAlias(colName, tableAlias) + "::geometry";
|
|
406
|
-
|
|
406
|
+
const result = pgp.as.format(fname + "(" + escTabelName + secondArg + ( fname === "ST_AsGeoJSON"? ")::jsonb" : ")" ));
|
|
407
407
|
if(["ST_Centroid", "ST_SnapToGrid", "ST_Simplify"].includes(fname)){
|
|
408
|
-
|
|
408
|
+
const r = `ST_AsGeoJSON(${result})::jsonb`;
|
|
409
409
|
return r;
|
|
410
410
|
}
|
|
411
411
|
return result;
|
|
@@ -660,7 +660,7 @@ export const FUNCTIONS: FunctionSpec[] = [
|
|
|
660
660
|
second: "minute"
|
|
661
661
|
};
|
|
662
662
|
|
|
663
|
-
|
|
663
|
+
const res = `(date_trunc(${asValue(prevInt[unit as "month"] || "hour")}, ${col}) + date_part(${asValue(unit, "::text")}, ${col})::int / ${val} * interval ${asValue(val + " " + unit)})`;
|
|
664
664
|
// console.log(res);
|
|
665
665
|
return res;
|
|
666
666
|
}
|
|
@@ -848,7 +848,7 @@ export const FUNCTIONS: FunctionSpec[] = [
|
|
|
848
848
|
const cols = ViewHandler._parseFieldFilter(args[0], false, allowedFields);
|
|
849
849
|
let term = args[1];
|
|
850
850
|
const rawTerm = args[1];
|
|
851
|
-
|
|
851
|
+
const { edgeTruncate, noFields = false, returnType, matchCase = false } = args[2] || {};
|
|
852
852
|
if(!isEmpty(args[2])){
|
|
853
853
|
const keys = Object.keys(args[2]);
|
|
854
854
|
const validKeys = ["edgeTruncate", "noFields", "returnType", "matchCase"];
|
|
@@ -891,7 +891,7 @@ export const FUNCTIONS: FunctionSpec[] = [
|
|
|
891
891
|
`;
|
|
892
892
|
}
|
|
893
893
|
|
|
894
|
-
|
|
894
|
+
const colRaw = "( " + cols.map(c =>`${noFields? "" : (asValue(c + ": ") + " || ")} COALESCE(${asNameAlias(c, tableAlias)}::TEXT, '')`).join(" || ', ' || ") + " )";
|
|
895
895
|
let col = colRaw;
|
|
896
896
|
term = asValue(term);
|
|
897
897
|
if(!matchCase) {
|
|
@@ -916,7 +916,7 @@ export const FUNCTIONS: FunctionSpec[] = [
|
|
|
916
916
|
|
|
917
917
|
} else if(returnType === "object" || returnType === "boolean"){
|
|
918
918
|
const hasChars = Boolean(rawTerm && /[a-z]/i.test(rawTerm));
|
|
919
|
-
|
|
919
|
+
const validCols = cols.map(c => {
|
|
920
920
|
const colInfo = allColumns.find(ac => ac.name === c);
|
|
921
921
|
return {
|
|
922
922
|
key: c,
|
|
@@ -925,7 +925,7 @@ export const FUNCTIONS: FunctionSpec[] = [
|
|
|
925
925
|
})
|
|
926
926
|
.filter(c => c.colInfo && c.colInfo.udt_name !== "bytea")
|
|
927
927
|
|
|
928
|
-
|
|
928
|
+
const _cols = validCols.filter(c =>
|
|
929
929
|
/** Exclude numeric columns when the search tern contains a character */
|
|
930
930
|
!hasChars ||
|
|
931
931
|
postgresToTsType(c.colInfo!.udt_name) !== "number"
|
|
@@ -951,7 +951,7 @@ export const FUNCTIONS: FunctionSpec[] = [
|
|
|
951
951
|
'WK' || trim(to_char(${colNameEscaped}, 'WW'))
|
|
952
952
|
) END)`
|
|
953
953
|
}
|
|
954
|
-
|
|
954
|
+
const colTxt = `COALESCE(${colSelect}, '')`; // position(${term} IN ${colTxt}) > 0
|
|
955
955
|
if(returnType === "boolean"){
|
|
956
956
|
return `
|
|
957
957
|
WHEN ${colTxt} ${matchCase? "LIKE" : "ILIKE"} ${asValue('%' + rawTerm + '%')}
|
|
@@ -3,7 +3,7 @@ import { TableRule } from "../../PublishParser";
|
|
|
3
3
|
import { SelectParams, ColumnInfo, PG_COLUMN_UDT_DATA_TYPE, Select, JoinSelect } from "prostgles-types";
|
|
4
4
|
import { TableHandler } from "../TableHandler";
|
|
5
5
|
import { FieldSpec, FunctionSpec } from "./Functions";
|
|
6
|
-
export
|
|
6
|
+
export type SelectItem = {
|
|
7
7
|
type: "column" | "function" | "aggregation" | "joinedColumn" | "computed";
|
|
8
8
|
getFields: (args?: any[]) => string[] | "*";
|
|
9
9
|
getQuery: (tableAlias?: string) => string;
|
|
@@ -12,10 +12,10 @@ export declare type SelectItem = {
|
|
|
12
12
|
alias: string;
|
|
13
13
|
selected: boolean;
|
|
14
14
|
};
|
|
15
|
-
export
|
|
15
|
+
export type SelectItemValidated = SelectItem & {
|
|
16
16
|
fields: string[];
|
|
17
17
|
};
|
|
18
|
-
export
|
|
18
|
+
export type NewQuery = {
|
|
19
19
|
/**
|
|
20
20
|
* All fields from the table will be in nested SELECT and GROUP BY to allow order/filter by fields not in select
|
|
21
21
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBuilder.d.ts","sourceRoot":"","sources":["QueryBuilder.ts"],"names":[],"mappings":"AAMA,OAAO,
|
|
1
|
+
{"version":3,"file":"QueryBuilder.d.ts","sourceRoot":"","sources":["QueryBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ const prostgles_types_1 = require("prostgles-types");
|
|
|
10
10
|
const utils_1 = require("../../utils");
|
|
11
11
|
const Functions_1 = require("./Functions");
|
|
12
12
|
const asNameAlias = (field, tableAlias) => {
|
|
13
|
-
|
|
13
|
+
const result = (0, prostgles_types_1.asName)(field);
|
|
14
14
|
if (tableAlias)
|
|
15
15
|
return (0, prostgles_types_1.asName)(tableAlias) + "." + result;
|
|
16
16
|
return result;
|
|
@@ -106,14 +106,14 @@ class SelectItemBuilder {
|
|
|
106
106
|
type: "computed",
|
|
107
107
|
numArgs: 0,
|
|
108
108
|
singleColArg: false,
|
|
109
|
-
getFields: (
|
|
109
|
+
getFields: (_args) => []
|
|
110
110
|
};
|
|
111
111
|
this.addFunction(cf, [], compCol.name);
|
|
112
112
|
return;
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
const colDef = this.columns.find(c => c.name === fieldName);
|
|
116
|
-
|
|
116
|
+
const alias = selected ? fieldName : ("not_selected_" + fieldName);
|
|
117
117
|
this.addItem({
|
|
118
118
|
type: "column",
|
|
119
119
|
columnPGDataType: colDef?.data_type,
|
|
@@ -216,7 +216,7 @@ async function getNewQuery(_this, filter, selectParams = {}, param3_unused = nul
|
|
|
216
216
|
}
|
|
217
217
|
const allowedOrderByFields = !tableRules ? _this.column_names.slice(0) : _this.parseFieldFilter(tableRules?.select?.orderByFields ?? tableRules?.select?.fields);
|
|
218
218
|
const allowedSelectFields = !tableRules ? _this.column_names.slice(0) : _this.parseFieldFilter(tableRules?.select?.fields);
|
|
219
|
-
|
|
219
|
+
const joinQueries = [];
|
|
220
220
|
const { select: userSelect = "*" } = selectParams, sBuilder = new SelectItemBuilder({
|
|
221
221
|
allowedFields: allowedSelectFields,
|
|
222
222
|
allowedOrderByFields,
|
|
@@ -227,7 +227,8 @@ async function getNewQuery(_this, filter, selectParams = {}, param3_unused = nul
|
|
|
227
227
|
columns
|
|
228
228
|
});
|
|
229
229
|
await sBuilder.parseUserSelect(userSelect, async (key, val, throwErr) => {
|
|
230
|
-
|
|
230
|
+
const j_selectParams = {};
|
|
231
|
+
let j_filter = {}, j_isLeftJoin = true, j_path, j_alias, j_tableRules, j_table;
|
|
231
232
|
if (val === "*") {
|
|
232
233
|
j_selectParams.select = "*";
|
|
233
234
|
j_alias = key;
|
|
@@ -295,7 +296,7 @@ async function getNewQuery(_this, filter, selectParams = {}, param3_unused = nul
|
|
|
295
296
|
sBuilder.addColumn(key, false);
|
|
296
297
|
}
|
|
297
298
|
});
|
|
298
|
-
|
|
299
|
+
const select = sBuilder.select;
|
|
299
300
|
// const validatedAggAliases = select
|
|
300
301
|
// .filter(s => s.type !== "joinedColumn")
|
|
301
302
|
// .map(s => s.alias);
|
|
@@ -310,7 +311,7 @@ async function getNewQuery(_this, filter, selectParams = {}, param3_unused = nul
|
|
|
310
311
|
});
|
|
311
312
|
const where = filterOpts.where;
|
|
312
313
|
const p = _this.getValidatedRules(tableRules, localParams);
|
|
313
|
-
|
|
314
|
+
const resQuery = {
|
|
314
315
|
/** Why was this the case? */
|
|
315
316
|
// allFields: allowedSelectFields,
|
|
316
317
|
allFields: _this.column_names.slice(0),
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
* Licensed under the MIT License. See LICENSE in the project root for license information.
|
|
5
5
|
*--------------------------------------------------------------------------------------------*/
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { Filter, LocalParams, isPlainObject, SortItem } from "../../DboBuilder";
|
|
8
8
|
import { TableRule } from "../../PublishParser";
|
|
9
|
-
import { SelectParams, isEmpty,
|
|
9
|
+
import { SelectParams, isEmpty, asName, ColumnInfo, PG_COLUMN_UDT_DATA_TYPE, isObject, Select, JoinSelect } from "prostgles-types";
|
|
10
10
|
import { get } from "../../utils";
|
|
11
11
|
import { TableHandler } from "../TableHandler";
|
|
12
12
|
import { COMPUTED_FIELDS, FieldSpec, FUNCTIONS, FunctionSpec, parseFunction } from "./Functions";
|
|
@@ -47,7 +47,7 @@ export type NewQuery = {
|
|
|
47
47
|
};
|
|
48
48
|
|
|
49
49
|
export const asNameAlias = (field: string, tableAlias?: string) => {
|
|
50
|
-
|
|
50
|
+
const result = asName(field);
|
|
51
51
|
if(tableAlias) return asName(tableAlias) + "." + result;
|
|
52
52
|
return result;
|
|
53
53
|
}
|
|
@@ -154,7 +154,7 @@ export class SelectItemBuilder {
|
|
|
154
154
|
type: "computed",
|
|
155
155
|
numArgs: 0,
|
|
156
156
|
singleColArg: false,
|
|
157
|
-
getFields: (
|
|
157
|
+
getFields: (_args: any[]) => []
|
|
158
158
|
}
|
|
159
159
|
this.addFunction(cf, [], compCol.name)
|
|
160
160
|
return;
|
|
@@ -162,7 +162,7 @@ export class SelectItemBuilder {
|
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
const colDef = this.columns.find(c => c.name === fieldName);
|
|
165
|
-
|
|
165
|
+
const alias = selected? fieldName : ("not_selected_" + fieldName);
|
|
166
166
|
this.addItem({
|
|
167
167
|
type: "column",
|
|
168
168
|
columnPGDataType: colDef?.data_type,
|
|
@@ -207,7 +207,7 @@ export class SelectItemBuilder {
|
|
|
207
207
|
} else {
|
|
208
208
|
await Promise.all(selectKeys.map(async key => {
|
|
209
209
|
const val: any = userSelect[key as keyof typeof userSelect],
|
|
210
|
-
throwErr = (extraErr
|
|
210
|
+
throwErr = (extraErr = "") => {
|
|
211
211
|
console.trace(extraErr)
|
|
212
212
|
throw "Unexpected select -> " + JSON.stringify({ [key]: val }) + "\n" + extraErr;
|
|
213
213
|
};
|
|
@@ -290,7 +290,7 @@ export async function getNewQuery(
|
|
|
290
290
|
const allowedSelectFields = !tableRules? _this.column_names.slice(0) : _this.parseFieldFilter(tableRules?.select?.fields);
|
|
291
291
|
|
|
292
292
|
|
|
293
|
-
|
|
293
|
+
const joinQueries: NewQuery[] = [];
|
|
294
294
|
|
|
295
295
|
const { select: userSelect = "*" } = selectParams,
|
|
296
296
|
sBuilder = new SelectItemBuilder({
|
|
@@ -307,13 +307,13 @@ export async function getNewQuery(
|
|
|
307
307
|
|
|
308
308
|
await sBuilder.parseUserSelect(userSelect, async (key, val: any, throwErr) => {
|
|
309
309
|
|
|
310
|
+
const j_selectParams: SelectParams = {};
|
|
310
311
|
let j_filter: Filter = {},
|
|
311
|
-
|
|
312
|
+
j_isLeftJoin = true,
|
|
312
313
|
j_path: string[] | undefined,
|
|
313
314
|
j_alias: string | undefined,
|
|
314
315
|
j_tableRules: TableRule | undefined,
|
|
315
|
-
j_table: string | undefined
|
|
316
|
-
j_isLeftJoin: boolean = true;
|
|
316
|
+
j_table: string | undefined;
|
|
317
317
|
|
|
318
318
|
if(val === "*"){
|
|
319
319
|
j_selectParams.select = "*";
|
|
@@ -395,7 +395,7 @@ export async function getNewQuery(
|
|
|
395
395
|
}
|
|
396
396
|
});
|
|
397
397
|
|
|
398
|
-
|
|
398
|
+
const select = sBuilder.select;
|
|
399
399
|
// const validatedAggAliases = select
|
|
400
400
|
// .filter(s => s.type !== "joinedColumn")
|
|
401
401
|
// .map(s => s.alias);
|
|
@@ -412,7 +412,7 @@ export async function getNewQuery(
|
|
|
412
412
|
const where = filterOpts.where;
|
|
413
413
|
const p = _this.getValidatedRules(tableRules, localParams);
|
|
414
414
|
|
|
415
|
-
|
|
415
|
+
const resQuery: NewQuery = {
|
|
416
416
|
/** Why was this the case? */
|
|
417
417
|
// allFields: allowedSelectFields,
|
|
418
418
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"makeSelectQuery.d.ts","sourceRoot":"","sources":["makeSelectQuery.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAc,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,wBAAgB,eAAe,CAC7B,KAAK,EAAE,YAAY,EACnB,CAAC,EAAE,QAAQ,EACX,KAAK,
|
|
1
|
+
{"version":3,"file":"makeSelectQuery.d.ts","sourceRoot":"","sources":["makeSelectQuery.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAU,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAc,MAAM,gBAAgB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAG/C,wBAAgB,eAAe,CAC7B,KAAK,EAAE,YAAY,EACnB,CAAC,EAAE,QAAQ,EACX,KAAK,SAAI,EACT,UAAU,GAAE,MAAM,EAAO,EACzB,YAAY,GAAE,YAAiB,GAC9B,MAAM,CA2RR"}
|
|
@@ -80,7 +80,7 @@ function makeSelectQuery(_this, q, depth = 0, joinFields = [], selectParams = {}
|
|
|
80
80
|
const getJoinCondition = (t1Alias, t2Alias, on) => {
|
|
81
81
|
return on.map(cond => cond.map(([c1, c2]) => `${t1Alias}.${(0, prostgles_types_1.asName)(getPrevColName(c1))} = ${t2Alias}.${(0, prostgles_types_1.asName)(getThisColName(c2))} `).join(" AND ")).join(" OR ");
|
|
82
82
|
};
|
|
83
|
-
|
|
83
|
+
const query = [
|
|
84
84
|
`${q2.isLeftJoin ? "LEFT" : "INNER"} JOIN `,
|
|
85
85
|
...iQ,
|
|
86
86
|
`ON ${getJoinCondition(prevAlias, thisAlias, on)}`
|
|
@@ -111,11 +111,11 @@ function makeSelectQuery(_this, q, depth = 0, joinFields = [], selectParams = {}
|
|
|
111
111
|
/* If aggs exist need to set groupBy add joinFields into select */
|
|
112
112
|
if (aggs.length || selectParams?.groupBy) {
|
|
113
113
|
if (nonAggs.length) {
|
|
114
|
-
|
|
114
|
+
const groupByFields = nonAggs.filter(sf => !depth || joinFields.includes(sf.getQuery()));
|
|
115
115
|
groupBy = getGroupBy(rootSelectItems, groupByFields);
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
|
-
|
|
118
|
+
const simpleQuery = indentArrayAndJoin(depth, [
|
|
119
119
|
`-- 0. or 5. [leaf query] `
|
|
120
120
|
/* Group by selected fields + any join fields */
|
|
121
121
|
,
|
|
@@ -217,7 +217,7 @@ function makeSelectQuery(_this, q, depth = 0, joinFields = [], selectParams = {}
|
|
|
217
217
|
"-- EOF 0. joined root",
|
|
218
218
|
" \n"
|
|
219
219
|
].filter(v => v);
|
|
220
|
-
|
|
220
|
+
const res = indentArrayAndJoin(depth, joinedQuery);
|
|
221
221
|
// res = indent(res, depth);
|
|
222
222
|
// console.log(res);
|
|
223
223
|
return res;
|
|
@@ -8,7 +8,7 @@ import { TableHandler } from "../TableHandler";
|
|
|
8
8
|
export function makeSelectQuery(
|
|
9
9
|
_this: TableHandler,
|
|
10
10
|
q: NewQuery,
|
|
11
|
-
depth
|
|
11
|
+
depth = 0,
|
|
12
12
|
joinFields: string[] = [],
|
|
13
13
|
selectParams: SelectParams = {},
|
|
14
14
|
): string {
|
|
@@ -119,7 +119,7 @@ export function makeSelectQuery(
|
|
|
119
119
|
).join(" OR ")
|
|
120
120
|
}
|
|
121
121
|
|
|
122
|
-
|
|
122
|
+
const query: string[] = [
|
|
123
123
|
`${q2.isLeftJoin? "LEFT" : "INNER"} JOIN `
|
|
124
124
|
, ...iQ
|
|
125
125
|
, `ON ${getJoinCondition(prevAlias, thisAlias, on)}`
|
|
@@ -158,12 +158,12 @@ export function makeSelectQuery(
|
|
|
158
158
|
if(aggs.length || selectParams?.groupBy){
|
|
159
159
|
|
|
160
160
|
if(nonAggs.length){
|
|
161
|
-
|
|
161
|
+
const groupByFields = nonAggs.filter(sf => !depth || joinFields.includes(sf.getQuery()));
|
|
162
162
|
groupBy = getGroupBy(rootSelectItems, groupByFields);
|
|
163
163
|
}
|
|
164
164
|
}
|
|
165
165
|
|
|
166
|
-
|
|
166
|
+
const simpleQuery = indentArrayAndJoin(depth, [
|
|
167
167
|
`-- 0. or 5. [leaf query] `
|
|
168
168
|
|
|
169
169
|
/* Group by selected fields + any join fields */
|
|
@@ -290,7 +290,7 @@ export function makeSelectQuery(
|
|
|
290
290
|
, " \n"
|
|
291
291
|
].filter(v => v)
|
|
292
292
|
|
|
293
|
-
|
|
293
|
+
const res = indentArrayAndJoin(depth, joinedQuery as unknown as string[]);
|
|
294
294
|
// res = indent(res, depth);
|
|
295
295
|
// console.log(res);
|
|
296
296
|
return res;
|
|
@@ -6,7 +6,7 @@ import { TableRule } from "../PublishParser";
|
|
|
6
6
|
import { insertDataParse } from "./insertDataParse";
|
|
7
7
|
import { SelectItem } from "./QueryBuilder/QueryBuilder";
|
|
8
8
|
import { JoinPaths, ViewHandler } from "./ViewHandler";
|
|
9
|
-
|
|
9
|
+
type ValidatedParams = {
|
|
10
10
|
row: AnyObject;
|
|
11
11
|
forcedData?: AnyObject;
|
|
12
12
|
allowedFields?: FieldFilter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TableHandler.d.ts","sourceRoot":"","sources":["TableHandler.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,SAAS,EAAU,YAAY,EAAE,WAAW,EAAW,YAAY,EAAY,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpJ,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAoC,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9H,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAY,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAqB,MAAM,6BAA6B,CAAC;AAE5E,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAKvD,
|
|
1
|
+
{"version":3,"file":"TableHandler.d.ts","sourceRoot":"","sources":["TableHandler.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,SAAS,EAAU,YAAY,EAAE,WAAW,EAAW,YAAY,EAAY,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpJ,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAoC,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC9H,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAY,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGvD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAqB,MAAM,6BAA6B,CAAC;AAE5E,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAKvD,KAAK,eAAe,GAAG;IACrB,GAAG,EAAE,SAAS,CAAC;IACf,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAA;AAED,qBAAa,YAAa,SAAQ,WAAW;IAC3C,QAAQ,EAAE;QACR,wBAAwB,EAAE,MAAM,CAAC;QACjC,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;KAC1B,CAAA;gBAEW,EAAE,EAAE,EAAE,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,SAAS;IAgB9I,SAAS,CAAC,KAAK,EAAE,MAAM;IAgBjB,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IAwBtI,gBAAgB,MAA+B;IAE/C,MAAM,MAAqB;IAE3B,eAAe,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,SAAiB,EAAE,EAAE,eAAe,GAAG;QAAE,IAAI,EAAE,GAAG,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE;IA2BzI,eAAe,yBAAmB;IAC5B,MAAM,CAAC,SAAS,EAAE,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC;IAIxL,gBAAgB,cAAqB,MAAM,GAAG,SAAS,iBAAiB,MAAM,EAAE,KAAG,QAAQ,UAAU,EAAE,CAAC,CAkBvG;IAED,eAAe,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE;IAK9B,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IAIjJ,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,WAAW;IAIpH,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC;IA2BnI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW;;;;;CAiG5H"}
|