@hypequery/clickhouse 1.2.9 → 1.3.0
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/README.md +2 -1
- package/dist/core/connection.d.ts.map +1 -1
- package/dist/core/connection.js +4 -3
- package/dist/core/cross-filter.d.ts +3 -7
- package/dist/core/cross-filter.d.ts.map +1 -1
- package/dist/core/cross-filter.js +3 -2
- package/dist/core/env/auto-client.browser.d.ts +3 -0
- package/dist/core/env/auto-client.browser.d.ts.map +1 -0
- package/dist/core/env/auto-client.browser.js +3 -0
- package/dist/core/env/auto-client.d.ts +9 -0
- package/dist/core/env/auto-client.d.ts.map +1 -0
- package/dist/core/env/auto-client.js +21 -0
- package/dist/core/features/aggregations.d.ts +11 -11
- package/dist/core/features/aggregations.d.ts.map +1 -1
- package/dist/core/features/analytics.d.ts +4 -4
- package/dist/core/features/analytics.d.ts.map +1 -1
- package/dist/core/features/cross-filtering.d.ts +3 -7
- package/dist/core/features/cross-filtering.d.ts.map +1 -1
- package/dist/core/features/executor.d.ts +1 -1
- package/dist/core/features/executor.d.ts.map +1 -1
- package/dist/core/features/filtering.d.ts +21 -1
- package/dist/core/features/filtering.d.ts.map +1 -1
- package/dist/core/features/filtering.js +17 -0
- package/dist/core/features/joins.d.ts +3 -2
- package/dist/core/features/joins.d.ts.map +1 -1
- package/dist/core/features/pagination.d.ts +2 -1
- package/dist/core/features/pagination.d.ts.map +1 -1
- package/dist/core/features/query-modifiers.d.ts +2 -1
- package/dist/core/features/query-modifiers.d.ts.map +1 -1
- package/dist/core/formatters/sql-formatter.d.ts.map +1 -1
- package/dist/core/formatters/sql-formatter.js +6 -0
- package/dist/core/join-relationships.d.ts +2 -1
- package/dist/core/join-relationships.d.ts.map +1 -1
- package/dist/core/query-builder.d.ts +6 -2
- package/dist/core/query-builder.d.ts.map +1 -1
- package/dist/core/query-builder.js +22 -3
- package/dist/core/utils/predicate-builder.d.ts +27 -0
- package/dist/core/utils/predicate-builder.d.ts.map +1 -0
- package/dist/core/utils/predicate-builder.js +91 -0
- package/dist/core/validators/filter-validator.d.ts +2 -1
- package/dist/core/validators/filter-validator.d.ts.map +1 -1
- package/dist/core/validators/value-validator.d.ts +2 -1
- package/dist/core/validators/value-validator.d.ts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/types/base.d.ts +10 -15
- package/dist/types/base.d.ts.map +1 -1
- package/dist/types/clickhouse-types.d.ts +2 -2
- package/dist/types/clickhouse-types.d.ts.map +1 -1
- package/dist/types/filters.d.ts +1 -1
- package/dist/types/filters.d.ts.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/schema.d.ts +19 -0
- package/dist/types/schema.d.ts.map +1 -0
- package/dist/types/schema.js +1 -0
- package/package.json +7 -3
package/README.md
CHANGED
|
@@ -184,6 +184,7 @@ const tripsWithDrivers = await db.table('trips')
|
|
|
184
184
|
.join('drivers', 'trips.driver_id', 'drivers.id')
|
|
185
185
|
.execute();
|
|
186
186
|
|
|
187
|
+
|
|
187
188
|
```
|
|
188
189
|
|
|
189
190
|
|
|
@@ -250,4 +251,4 @@ This project is licensed under the Apache-2.0 License - see the [LICENSE](LICENS
|
|
|
250
251
|
|
|
251
252
|
<div align="center">
|
|
252
253
|
<sub>Built with ❤️ by the hypequery team</sub>
|
|
253
|
-
</div>
|
|
254
|
+
</div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/core/connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,IAAI,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,KAAK,EAAE,gBAAgB,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/core/connection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,IAAI,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,KAAK,EAAE,gBAAgB,IAAI,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAM3D,KAAK,gBAAgB,GAAG,oBAAoB,GAAG,mBAAmB,CAAC;AAsCnE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAiC;IACxD,OAAO,CAAC,MAAM,CAAC,YAAY,CAAuC;IAElE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA6BG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,oBAAoB;IAaxE;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,SAAS,IAAI,gBAAgB;IAOpC;;;;;OAKG;IACH,MAAM,CAAC,qBAAqB,IAAI,kBAAkB;CAGnD"}
|
package/dist/core/connection.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { createClient as createNodeClient } from '@clickhouse/client';
|
|
2
1
|
import { isClientConfig } from './query-builder.js';
|
|
2
|
+
import { getAutoClientModule } from './env/auto-client.js';
|
|
3
3
|
// Function to synchronously get the appropriate client
|
|
4
4
|
function getClickHouseClientSync() {
|
|
5
5
|
const isDev = process.env.NODE_ENV === 'development';
|
|
@@ -9,9 +9,10 @@ function getClickHouseClientSync() {
|
|
|
9
9
|
if (isDev) {
|
|
10
10
|
console.log('hypequery: Using @clickhouse/client for Node.js environment');
|
|
11
11
|
}
|
|
12
|
+
const clientModule = getAutoClientModule();
|
|
12
13
|
return {
|
|
13
|
-
createClient:
|
|
14
|
-
ClickHouseSettings: {}
|
|
14
|
+
createClient: clientModule.createClient,
|
|
15
|
+
ClickHouseSettings: clientModule.ClickHouseSettings || {}
|
|
15
16
|
};
|
|
16
17
|
}
|
|
17
18
|
// For browser environments, require() doesn't work, so we can't auto-detect
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { FilterConditionInput, FilterOperator, OperatorValueMap } from '../types/index.js';
|
|
2
|
-
import type {
|
|
3
|
-
export interface FilterGroup<Schema extends
|
|
2
|
+
import type { AnySchema, InferColumnType } from '../types/schema.js';
|
|
3
|
+
export interface FilterGroup<Schema extends AnySchema = AnySchema, OriginalT extends Record<string, any> = Record<string, any>> {
|
|
4
4
|
operator: 'AND' | 'OR';
|
|
5
5
|
conditions: Array<FilterConditionInput<any, Schema, OriginalT> | FilterGroup<Schema, OriginalT>>;
|
|
6
6
|
limit?: number;
|
|
@@ -14,11 +14,7 @@ export interface FilterGroup<Schema extends Record<string, Record<string, any>>
|
|
|
14
14
|
* @template Schema - The full database schema type
|
|
15
15
|
* @template TableName - The specific table being filtered
|
|
16
16
|
*/
|
|
17
|
-
export declare class CrossFilter<Schema extends {
|
|
18
|
-
[tableName: string]: {
|
|
19
|
-
[columnName: string]: ColumnType;
|
|
20
|
-
};
|
|
21
|
-
} = any, TableName extends keyof Schema = Extract<keyof Schema, string>> {
|
|
17
|
+
export declare class CrossFilter<Schema extends AnySchema = AnySchema, TableName extends keyof Schema & string = Extract<keyof Schema, string>> {
|
|
22
18
|
private schema?;
|
|
23
19
|
private rootGroup;
|
|
24
20
|
constructor(schema?: Schema | undefined);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cross-filter.d.ts","sourceRoot":"","sources":["../../src/core/cross-filter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"cross-filter.d.ts","sourceRoot":"","sources":["../../src/core/cross-filter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC3F,OAAO,KAAK,EAAE,SAAS,EAAc,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGjF,MAAM,WAAW,WAAW,CAC1B,MAAM,SAAS,SAAS,GAAG,SAAS,EACpC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;IAE3D,QAAQ,EAAE,KAAK,GAAG,IAAI,CAAC;IACvB,UAAU,EAAE,KAAK,CACf,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,CAC9E,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE;QACR,MAAM,EAAE,MAAM,SAAS,CAAC;QACxB,SAAS,EAAE,KAAK,GAAG,MAAM,CAAC;KAC3B,CAAC;CACH;AAED;;;;GAIG;AACH,qBAAa,WAAW,CACtB,MAAM,SAAS,SAAS,GAAG,SAAS,EACpC,SAAS,SAAS,MAAM,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,MAAM,EAAE,MAAM,CAAC;IAM3D,OAAO,CAAC,MAAM,CAAC;IAH3B,OAAO,CAAC,SAAS,CAAyC;gBAGtC,MAAM,CAAC,EAAE,MAAM,YAAA;IAInC;;;OAGG;IACH,GAAG,CACD,UAAU,SAAS,OAAO,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,EAC3D,EAAE,SAAS,cAAc,EAEzB,SAAS,EAAE,oBAAoB,CAC7B,gBAAgB,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EACpE,MAAM,EACN,MAAM,CAAC,SAAS,CAAC,CAClB,GACA,IAAI;IA0BP;;OAEG;IACH,WAAW,CACT,UAAU,EAAE,KAAK,CAAC,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,GACtE,IAAI;IAQP;;;;OAIG;IACH,QAAQ,CACN,eAAe,EAAE,KAAK,CACpB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAC9F,EACD,QAAQ,EAAE,KAAK,GAAG,IAAI,GACrB,IAAI;IAYP;;OAEG;IACH,aAAa,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAIvD;;;;OAIG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,aAAa;IAqBrB;;OAEG;IACH,OAAO,CAAC,OAAO;IAMf;;;;;OAKG;IACH,IAAI,CAAC,CAAC,SAAS,MAAM,MAAM,CAAC,SAAS,CAAC,EACpC,WAAW,EAAE,CAAC,EACd,CAAC,EAAE,MAAM,EACT,OAAO,GAAE,MAAM,GAAG,KAAc,GAC/B,IAAI;CAmBR"}
|
|
@@ -77,10 +77,11 @@ export class CrossFilter {
|
|
|
77
77
|
if (!this.schema) {
|
|
78
78
|
return 'String';
|
|
79
79
|
}
|
|
80
|
-
for (const table
|
|
80
|
+
for (const table of Object.keys(this.schema)) {
|
|
81
81
|
const tableSchema = this.schema[table];
|
|
82
82
|
if (column in tableSchema) {
|
|
83
|
-
|
|
83
|
+
const columnKey = column;
|
|
84
|
+
return tableSchema[columnKey];
|
|
84
85
|
}
|
|
85
86
|
}
|
|
86
87
|
throw new Error(`Column '${column}' not found in schema`);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-client.browser.d.ts","sourceRoot":"","sources":["../../../src/core/env/auto-client.browser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,wBAAgB,mBAAmB,IAAI,gBAAgB,CAEtD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ClickHouseSettings } from '@clickhouse/client-common';
|
|
2
|
+
type NodeClientModule = typeof import('@clickhouse/client');
|
|
3
|
+
export interface AutoClientModule {
|
|
4
|
+
createClient: NodeClientModule['createClient'];
|
|
5
|
+
ClickHouseSettings?: ClickHouseSettings;
|
|
6
|
+
}
|
|
7
|
+
export declare function getAutoClientModule(): AutoClientModule;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=auto-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auto-client.d.ts","sourceRoot":"","sources":["../../../src/core/env/auto-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,KAAK,gBAAgB,GAAG,cAAc,oBAAoB,CAAC,CAAC;AAE5D,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,gBAAgB,CAAC,cAAc,CAAC,CAAC;IAC/C,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAID,wBAAgB,mBAAmB,IAAI,gBAAgB,CAqBtD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createRequire } from 'module';
|
|
2
|
+
let cachedModule;
|
|
3
|
+
export function getAutoClientModule() {
|
|
4
|
+
if (!cachedModule) {
|
|
5
|
+
try {
|
|
6
|
+
const nodeRequire = createRequire(`${process.cwd()}/noop.js`);
|
|
7
|
+
const clientModule = nodeRequire('@clickhouse/client');
|
|
8
|
+
const settings = clientModule.ClickHouseSettings;
|
|
9
|
+
cachedModule = {
|
|
10
|
+
createClient: clientModule.createClient,
|
|
11
|
+
ClickHouseSettings: settings ?? {}
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
throw new Error('@clickhouse/client is required for Node.js environments.\n\n' +
|
|
16
|
+
'Install with: npm install @clickhouse/client\n\n' +
|
|
17
|
+
'Alternatively, you can provide a client instance directly in the config.client option.', { cause: error instanceof Error ? error : undefined });
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return cachedModule;
|
|
21
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { QueryBuilder } from '../query-builder.js';
|
|
2
|
-
import { ColumnType } from '../../types/
|
|
2
|
+
import { ColumnType } from '../../types/schema.js';
|
|
3
3
|
export declare class AggregationFeature<Schema extends {
|
|
4
4
|
[tableName: string]: {
|
|
5
5
|
[columnName: string]: ColumnType;
|
|
@@ -17,8 +17,8 @@ export declare class AggregationFeature<Schema extends {
|
|
|
17
17
|
offset?: number;
|
|
18
18
|
distinct?: boolean;
|
|
19
19
|
orderBy?: {
|
|
20
|
-
column: keyof T | import("../../types/
|
|
21
|
-
direction: import("../../
|
|
20
|
+
column: keyof T | import("../../types/schema.js").TableColumn<Schema>;
|
|
21
|
+
direction: import("../../index.js").OrderDirection;
|
|
22
22
|
}[] | undefined;
|
|
23
23
|
joins?: import("../../types/base.js").JoinClause[];
|
|
24
24
|
parameters?: any[];
|
|
@@ -35,8 +35,8 @@ export declare class AggregationFeature<Schema extends {
|
|
|
35
35
|
offset?: number;
|
|
36
36
|
distinct?: boolean;
|
|
37
37
|
orderBy?: {
|
|
38
|
-
column: keyof T | import("../../types/
|
|
39
|
-
direction: import("../../
|
|
38
|
+
column: keyof T | import("../../types/schema.js").TableColumn<Schema>;
|
|
39
|
+
direction: import("../../index.js").OrderDirection;
|
|
40
40
|
}[] | undefined;
|
|
41
41
|
joins?: import("../../types/base.js").JoinClause[];
|
|
42
42
|
parameters?: any[];
|
|
@@ -53,8 +53,8 @@ export declare class AggregationFeature<Schema extends {
|
|
|
53
53
|
offset?: number;
|
|
54
54
|
distinct?: boolean;
|
|
55
55
|
orderBy?: {
|
|
56
|
-
column: keyof T | import("../../types/
|
|
57
|
-
direction: import("../../
|
|
56
|
+
column: keyof T | import("../../types/schema.js").TableColumn<Schema>;
|
|
57
|
+
direction: import("../../index.js").OrderDirection;
|
|
58
58
|
}[] | undefined;
|
|
59
59
|
joins?: import("../../types/base.js").JoinClause[];
|
|
60
60
|
parameters?: any[];
|
|
@@ -71,8 +71,8 @@ export declare class AggregationFeature<Schema extends {
|
|
|
71
71
|
offset?: number;
|
|
72
72
|
distinct?: boolean;
|
|
73
73
|
orderBy?: {
|
|
74
|
-
column: keyof T | import("../../types/
|
|
75
|
-
direction: import("../../
|
|
74
|
+
column: keyof T | import("../../types/schema.js").TableColumn<Schema>;
|
|
75
|
+
direction: import("../../index.js").OrderDirection;
|
|
76
76
|
}[] | undefined;
|
|
77
77
|
joins?: import("../../types/base.js").JoinClause[];
|
|
78
78
|
parameters?: any[];
|
|
@@ -89,8 +89,8 @@ export declare class AggregationFeature<Schema extends {
|
|
|
89
89
|
offset?: number;
|
|
90
90
|
distinct?: boolean;
|
|
91
91
|
orderBy?: {
|
|
92
|
-
column: keyof T | import("../../types/
|
|
93
|
-
direction: import("../../
|
|
92
|
+
column: keyof T | import("../../types/schema.js").TableColumn<Schema>;
|
|
93
|
+
direction: import("../../index.js").OrderDirection;
|
|
94
94
|
}[] | undefined;
|
|
95
95
|
joins?: import("../../types/base.js").JoinClause[];
|
|
96
96
|
parameters?: any[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aggregations.d.ts","sourceRoot":"","sources":["../../../src/core/features/aggregations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"aggregations.d.ts","sourceRoot":"","sources":["../../../src/core/features/aggregations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,qBAAa,kBAAkB,CAC7B,MAAM,SAAS;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,CAAA;CAAE,EAC5E,CAAC,EACD,SAAS,SAAS,OAAO,GAAG,KAAK,EACjC,YAAY,GAAG,EAAE,EACjB,SAAS,GAAG,CAAC;IAED,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC;IAExF,OAAO,CAAC,iBAAiB;IAsBzB,GAAG,CAAC,MAAM,SAAS,MAAM,SAAS,EAAE,KAAK,SAAS,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,MAAM,EACjF,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,KAAK;;;;;;;;;;;;;;;;;;IASf,KAAK,CAAC,MAAM,SAAS,MAAM,SAAS,EAAE,KAAK,SAAS,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,QAAQ,EACrF,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,KAAK;;;;;;;;;;;;;;;;;;IASf,GAAG,CAAC,MAAM,SAAS,MAAM,SAAS,EAAE,KAAK,SAAS,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,MAAM,EACjF,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,KAAK;;;;;;;;;;;;;;;;;;IASf,GAAG,CAAC,MAAM,SAAS,MAAM,SAAS,EAAE,KAAK,SAAS,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,MAAM,EACjF,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,KAAK;;;;;;;;;;;;;;;;;;IASf,GAAG,CAAC,MAAM,SAAS,MAAM,SAAS,EAAE,KAAK,SAAS,MAAM,GAAG,GAAG,MAAM,GAAG,MAAM,MAAM,EACjF,MAAM,EAAE,MAAM,EACd,KAAK,CAAC,EAAE,KAAK;;;;;;;;;;;;;;;;;;CAQhB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { QueryBuilder } from '../query-builder.js';
|
|
2
|
-
import { ColumnType, TableColumn } from '../../types/
|
|
2
|
+
import { ColumnType, TableColumn } from '../../types/schema.js';
|
|
3
3
|
import { ClickHouseSettings } from '@clickhouse/client-common';
|
|
4
4
|
export declare class AnalyticsFeature<Schema extends {
|
|
5
5
|
[tableName: string]: {
|
|
@@ -19,7 +19,7 @@ export declare class AnalyticsFeature<Schema extends {
|
|
|
19
19
|
distinct?: boolean;
|
|
20
20
|
orderBy?: {
|
|
21
21
|
column: keyof T | TableColumn<Schema>;
|
|
22
|
-
direction: import("../../
|
|
22
|
+
direction: import("../../index.js").OrderDirection;
|
|
23
23
|
}[] | undefined;
|
|
24
24
|
joins?: import("../../types/base.js").JoinClause[];
|
|
25
25
|
parameters?: any[];
|
|
@@ -36,7 +36,7 @@ export declare class AnalyticsFeature<Schema extends {
|
|
|
36
36
|
distinct?: boolean;
|
|
37
37
|
orderBy?: {
|
|
38
38
|
column: keyof T | TableColumn<Schema>;
|
|
39
|
-
direction: import("../../
|
|
39
|
+
direction: import("../../index.js").OrderDirection;
|
|
40
40
|
}[] | undefined;
|
|
41
41
|
joins?: import("../../types/base.js").JoinClause[];
|
|
42
42
|
parameters?: any[];
|
|
@@ -55,7 +55,7 @@ export declare class AnalyticsFeature<Schema extends {
|
|
|
55
55
|
distinct?: boolean;
|
|
56
56
|
orderBy?: {
|
|
57
57
|
column: keyof T | TableColumn<Schema>;
|
|
58
|
-
direction: import("../../
|
|
58
|
+
direction: import("../../index.js").OrderDirection;
|
|
59
59
|
}[] | undefined;
|
|
60
60
|
joins?: import("../../types/base.js").JoinClause[];
|
|
61
61
|
parameters?: any[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../../src/core/features/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../../src/core/features/analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAE9D,qBAAa,gBAAgB,CAC3B,MAAM,SAAS;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,CAAA;CAAE,EAC5E,CAAC,EACD,SAAS,SAAS,OAAO,GAAG,KAAK,EACjC,YAAY,GAAG,EAAE,EACjB,SAAS,GAAG,CAAC;IAED,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC;IAExF,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM;;;;;;;;;;;;;;;;;;IAS/D,eAAe,CACb,MAAM,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,EACrC,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,mBAAmB,GAAG,iBAAiB,GAAG,eAAe,GAAG,cAAc,GAAG,eAAe,GAAG,gBAAgB,GAAG,kBAAkB,GAAG,eAAe;;;;;;;;;;;;;;;;;;IAiBhK,WAAW,CAAC,IAAI,EAAE,kBAAkB;;;;;;;;;;;;;;;;;;CAQrC"}
|
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
import { QueryBuilder } from '../query-builder.js';
|
|
2
2
|
import { CrossFilter } from '../cross-filter.js';
|
|
3
|
-
import {
|
|
3
|
+
import { AnySchema } from '../../types/schema.js';
|
|
4
4
|
/**
|
|
5
5
|
* Feature for handling cross-filter operations on queries
|
|
6
6
|
*/
|
|
7
|
-
export declare class CrossFilteringFeature<Schema extends {
|
|
8
|
-
[tableName: string]: {
|
|
9
|
-
[columnName: string]: ColumnType;
|
|
10
|
-
};
|
|
11
|
-
}, T, HasSelect extends boolean = false, Aggregations = {}, OriginalT = T> {
|
|
7
|
+
export declare class CrossFilteringFeature<Schema extends AnySchema, T, HasSelect extends boolean = false, Aggregations = {}, OriginalT = T> {
|
|
12
8
|
private builder;
|
|
13
9
|
constructor(builder: QueryBuilder<Schema, T, HasSelect, Aggregations, OriginalT>);
|
|
14
10
|
/**
|
|
@@ -16,7 +12,7 @@ export declare class CrossFilteringFeature<Schema extends {
|
|
|
16
12
|
* @param crossFilter - An instance of CrossFilter containing shared filter conditions
|
|
17
13
|
* @returns Updated query config
|
|
18
14
|
*/
|
|
19
|
-
applyCrossFilters(crossFilter: CrossFilter<Schema, keyof Schema
|
|
15
|
+
applyCrossFilters(crossFilter: CrossFilter<Schema, Extract<keyof Schema, string>>): import("../../types/base.js").QueryConfig<T, Schema>;
|
|
20
16
|
/**
|
|
21
17
|
* Apply AND conditions - each condition is applied with WHERE
|
|
22
18
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cross-filtering.d.ts","sourceRoot":"","sources":["../../../src/core/features/cross-filtering.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAe,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"cross-filtering.d.ts","sourceRoot":"","sources":["../../../src/core/features/cross-filtering.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAe,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAe,MAAM,uBAAuB,CAAC;AAgB/D;;GAEG;AACH,qBAAa,qBAAqB,CAChC,MAAM,SAAS,SAAS,EACxB,CAAC,EACD,SAAS,SAAS,OAAO,GAAG,KAAK,EACjC,YAAY,GAAG,EAAE,EACjB,SAAS,GAAG,CAAC;IAED,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC;IAExF;;;;OAIG;IACH,iBAAiB,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,MAAM,EAAE,MAAM,CAAC,CAAC;IAsBjF;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA4B1B;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;CAqD1B"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { QueryBuilder } from '../query-builder.js';
|
|
2
|
-
import { ColumnType } from '../../types/
|
|
2
|
+
import { ColumnType } from '../../types/schema.js';
|
|
3
3
|
export declare class ExecutorFeature<Schema extends {
|
|
4
4
|
[tableName: string]: {
|
|
5
5
|
[columnName: string]: ColumnType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/core/features/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/core/features/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAKnD,qBAAa,eAAe,CAC1B,MAAM,SAAS;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,CAAA;CAAE,EAC5E,CAAC,EACD,SAAS,SAAS,OAAO,GAAG,KAAK,EACjC,YAAY,GAAG,EAAE,EACjB,SAAS,GAAG,CAAC;IAED,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC;IAExF,eAAe,IAAI;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,GAAG,EAAE,CAAA;KAAE;IAOrD,KAAK,IAAI,MAAM;IAKT,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IAgDvB,MAAM,IAAI,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;IA+C5C,OAAO,CAAC,sBAAsB;CA0C/B"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { QueryBuilder } from '../query-builder.js';
|
|
2
|
-
import {
|
|
2
|
+
import { FilterOperator } from '../../types/index.js';
|
|
3
|
+
import { ColumnType, TableColumn } from '../../types/schema.js';
|
|
4
|
+
import { PredicateExpression } from '../utils/predicate-builder.js';
|
|
3
5
|
export declare class FilteringFeature<Schema extends {
|
|
4
6
|
[tableName: string]: {
|
|
5
7
|
[columnName: string]: ColumnType;
|
|
@@ -25,6 +27,24 @@ export declare class FilteringFeature<Schema extends {
|
|
|
25
27
|
unionQueries?: string[];
|
|
26
28
|
settings?: string;
|
|
27
29
|
};
|
|
30
|
+
addExpressionCondition(conjunction: 'AND' | 'OR', expression: PredicateExpression): {
|
|
31
|
+
where: import("../../types/base.js").WhereCondition[];
|
|
32
|
+
parameters: any[];
|
|
33
|
+
select?: (string | keyof T)[] | undefined;
|
|
34
|
+
groupBy?: string[];
|
|
35
|
+
having?: string[];
|
|
36
|
+
limit?: number;
|
|
37
|
+
offset?: number;
|
|
38
|
+
distinct?: boolean;
|
|
39
|
+
orderBy?: {
|
|
40
|
+
column: TableColumn<Schema> | keyof T;
|
|
41
|
+
direction: import("../../types/base.js").OrderDirection;
|
|
42
|
+
}[] | undefined;
|
|
43
|
+
joins?: import("../../types/base.js").JoinClause[];
|
|
44
|
+
ctes?: string[];
|
|
45
|
+
unionQueries?: string[];
|
|
46
|
+
settings?: string;
|
|
47
|
+
};
|
|
28
48
|
/**
|
|
29
49
|
* Adds a group-start marker to start a parenthesized group of conditions with AND conjunction
|
|
30
50
|
* @returns The updated query config
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filtering.d.ts","sourceRoot":"","sources":["../../../src/core/features/filtering.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"filtering.d.ts","sourceRoot":"","sources":["../../../src/core/features/filtering.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,qBAAa,gBAAgB,CAC3B,MAAM,SAAS;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,CAAA;CAAE,EAC5E,CAAC,EACD,SAAS,SAAS,OAAO,GAAG,KAAK,EACjC,YAAY,GAAG,EAAE,EACjB,SAAS,GAAG,CAAC;IAED,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC;IAExF,YAAY,CAAC,CAAC,SAAS,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,EAC1D,WAAW,EAAE,KAAK,GAAG,IAAI,EACzB,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EACf,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,GAAG;;;;;;;;;;;;;;;;;;IA4DZ,sBAAsB,CACpB,WAAW,EAAE,KAAK,GAAG,IAAI,EACzB,UAAU,EAAE,mBAAmB;;;;;;;;;;;;;;;;;;IAsBjC;;;OAGG;IACH,eAAe;;;;;;;;;;;;;;;;;;IAkBf;;;OAGG;IACH,iBAAiB;;;;;;;;;;;;;;;;;;IAkBjB;;;OAGG;IACH,aAAa;;;;;;;;;;;;;;;;;;CAiBd"}
|
|
@@ -57,6 +57,23 @@ export class FilteringFeature {
|
|
|
57
57
|
parameters
|
|
58
58
|
};
|
|
59
59
|
}
|
|
60
|
+
addExpressionCondition(conjunction, expression) {
|
|
61
|
+
const config = this.builder.getConfig();
|
|
62
|
+
const where = config.where || [];
|
|
63
|
+
const parameters = config.parameters || [];
|
|
64
|
+
where.push({
|
|
65
|
+
type: 'expression',
|
|
66
|
+
expression: expression.sql,
|
|
67
|
+
parameters: expression.parameters,
|
|
68
|
+
conjunction
|
|
69
|
+
});
|
|
70
|
+
parameters.push(...expression.parameters);
|
|
71
|
+
return {
|
|
72
|
+
...config,
|
|
73
|
+
where,
|
|
74
|
+
parameters
|
|
75
|
+
};
|
|
76
|
+
}
|
|
60
77
|
/**
|
|
61
78
|
* Adds a group-start marker to start a parenthesized group of conditions with AND conjunction
|
|
62
79
|
* @returns The updated query config
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { QueryBuilder } from '../query-builder.js';
|
|
2
|
-
import {
|
|
2
|
+
import { JoinType } from '../../types/index.js';
|
|
3
|
+
import { ColumnType } from '../../types/schema.js';
|
|
3
4
|
export declare class JoinFeature<Schema extends {
|
|
4
5
|
[tableName: string]: {
|
|
5
6
|
[columnName: string]: ColumnType;
|
|
@@ -17,7 +18,7 @@ export declare class JoinFeature<Schema extends {
|
|
|
17
18
|
offset?: number;
|
|
18
19
|
distinct?: boolean;
|
|
19
20
|
orderBy?: {
|
|
20
|
-
column: keyof T | import("../../types/
|
|
21
|
+
column: keyof T | import("../../types/schema.js").TableColumn<Schema>;
|
|
21
22
|
direction: import("../../types/base.js").OrderDirection;
|
|
22
23
|
}[] | undefined;
|
|
23
24
|
parameters?: any[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"joins.d.ts","sourceRoot":"","sources":["../../../src/core/features/joins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"joins.d.ts","sourceRoot":"","sources":["../../../src/core/features/joins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,qBAAa,WAAW,CACtB,MAAM,SAAS;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,CAAA;CAAE,EAC5E,CAAC,EACD,SAAS,SAAS,OAAO,GAAG,KAAK,EACjC,YAAY,GAAG,EAAE,EACjB,SAAS,GAAG,CAAC;IAED,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC;IAExF,OAAO,CAAC,SAAS,SAAS,MAAM,MAAM,EACpC,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,SAAS,EAChB,UAAU,EAAE,MAAM,SAAS,EAC3B,WAAW,EAAE,GAAG,SAAS,GAAG,MAAM,IAAI,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,EACxE,KAAK,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;CAYjB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { QueryBuilder } from '../query-builder.js';
|
|
2
|
-
import {
|
|
2
|
+
import { PaginatedResult, PaginationOptions } from '../../types/index.js';
|
|
3
|
+
import { ColumnType } from '../../types/schema.js';
|
|
3
4
|
export declare class PaginationFeature<Schema extends {
|
|
4
5
|
[tableName: string]: {
|
|
5
6
|
[columnName: string]: ColumnType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../src/core/features/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../src/core/features/pagination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAY,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACpF,OAAO,EAAE,UAAU,EAAe,MAAM,uBAAuB,CAAC;AAEhE,qBAAa,iBAAiB,CAC5B,MAAM,SAAS;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,CAAA;CAAE,EAC5E,CAAC,EACD,SAAS,SAAS,OAAO,GAAG,KAAK,EACjC,YAAY,GAAG,EAAE,EACjB,SAAS,GAAG,CAAC;IAKD,OAAO,CAAC,OAAO;IAH3B,OAAO,CAAC,MAAM,CAAC,YAAY,CAAiE;IAC5F,OAAO,CAAC,QAAQ,CAAS;gBAEL,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC;IAQxF,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,WAAW,QAGtB;IAED,OAAO,KAAK,eAAe,GAE1B;IAED,OAAO,KAAK,eAAe,QAG1B;IAED,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IAId,QAAQ,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IA0I1E,OAAO,CAAC,cAAc;IAmBhB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IAIvD,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;CAkB1E"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { QueryBuilder } from '../query-builder.js';
|
|
2
|
-
import {
|
|
2
|
+
import { OrderDirection } from '../../types/index.js';
|
|
3
|
+
import { ColumnType, TableColumn } from '../../types/schema.js';
|
|
3
4
|
export declare class QueryModifiersFeature<Schema extends {
|
|
4
5
|
[tableName: string]: {
|
|
5
6
|
[columnName: string]: ColumnType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-modifiers.d.ts","sourceRoot":"","sources":["../../../src/core/features/query-modifiers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"query-modifiers.d.ts","sourceRoot":"","sources":["../../../src/core/features/query-modifiers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEhE,qBAAa,qBAAqB,CAChC,MAAM,SAAS;IAAE,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE,CAAA;CAAE,EAC5E,CAAC,EACD,SAAS,SAAS,OAAO,GAAG,KAAK,EACjC,YAAY,GAAG,EAAE,EACjB,SAAS,GAAG,CAAC;IAED,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,CAAC;IAExF,UAAU,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;;;;;;;;;;;;;;;;;;IAQ1F,QAAQ,CAAC,KAAK,EAAE,MAAM;;;;;;;;;;;;;;;;;;IAQtB,SAAS,CAAC,KAAK,EAAE,MAAM;;;;;;;;;;;;;;;;;;IAQvB,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,GAAE,cAAsB;;;;;;;;;;;;;;;;;;IAQhG,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,GAAG,EAAE;;;;;;;;;;;;;;;;;;IAY/C,WAAW;;;;;;;;;;;;;;;;;;CAOZ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sql-formatter.d.ts","sourceRoot":"","sources":["../../../src/core/formatters/sql-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AAEnE,qBAAa,YAAY;IACvB,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM;IAMnD,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM;IASpD,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM;
|
|
1
|
+
{"version":3,"file":"sql-formatter.d.ts","sourceRoot":"","sources":["../../../src/core/formatters/sql-formatter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAkB,MAAM,sBAAsB,CAAC;AAEnE,qBAAa,YAAY;IACvB,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM;IAMnD,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM;IASpD,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM;IAoGlD,OAAO,CAAC,cAAc;IActB,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,MAAM;CAUnD"}
|
|
@@ -20,6 +20,12 @@ export class SQLFormatter {
|
|
|
20
20
|
let afterGroupStart = false; // Track whether we're immediately after a group-start
|
|
21
21
|
// First pass - generate the SQL fragments for each condition
|
|
22
22
|
const fragments = config.where.map((condition, index) => {
|
|
23
|
+
// Handle expression predicates
|
|
24
|
+
if (condition.type === 'expression') {
|
|
25
|
+
const prefix = index === 0 || afterGroupStart ? '' : ` ${condition.conjunction} `;
|
|
26
|
+
afterGroupStart = false;
|
|
27
|
+
return `${prefix}${condition.expression}`.trim();
|
|
28
|
+
}
|
|
23
29
|
// Handle special group markers
|
|
24
30
|
if (condition.type === 'group-start') {
|
|
25
31
|
const prefix = index === 0 ? '' : ` ${condition.conjunction} `;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"join-relationships.d.ts","sourceRoot":"","sources":["../../src/core/join-relationships.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"join-relationships.d.ts","sourceRoot":"","sources":["../../src/core/join-relationships.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,WAAW,QAAQ,CAAC,MAAM;IAC9B,IAAI,EAAE,MAAM,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC/B;AAED,qBAAa,iBAAiB,CAAC,MAAM,SAAS;KAAG,CAAC,IAAI,MAAM,MAAM,GAAG;QAAE,CAAC,UAAU,EAAE,MAAM,GAAG,UAAU,CAAA;KAAE;CAAE;IACzG,OAAO,CAAC,KAAK,CAA4D;IAEzE;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI;IAOlD;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI;IAU1D;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,GAAG,SAAS;IAIpE;;OAEG;IACH,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B;;OAEG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI7B;;OAEG;IACH,KAAK,IAAI,IAAI;IAIb;;OAEG;IACH,uBAAuB,IAAI,MAAM,EAAE;CAGpC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { CrossFilter } from './cross-filter.js';
|
|
2
|
-
import {
|
|
2
|
+
import { AggregationType, FilterOperator, InferClickHouseType, OperatorValueMap, OrderDirection, PaginatedResult, PaginationOptions, QueryConfig } from '../types/index.js';
|
|
3
|
+
import { ColumnType, InferColumnType, TableColumn } from '../types/schema.js';
|
|
3
4
|
import { SQLFormatter } from './formatters/sql-formatter.js';
|
|
4
5
|
import { JoinRelationships, JoinPathOptions } from './join-relationships.js';
|
|
5
6
|
import { SqlExpression } from './utils/sql-expressions.js';
|
|
7
|
+
import { PredicateBuilder, PredicateExpression } from './utils/predicate-builder.js';
|
|
6
8
|
import type { ClickHouseSettings, BaseClickHouseClientConfigOptions } from '@clickhouse/client-common';
|
|
7
9
|
import type { ClickHouseClient as NodeClickHouseClient } from '@clickhouse/client';
|
|
8
10
|
import type { ClickHouseClient as WebClickHouseClient } from '@clickhouse/client-web';
|
|
@@ -77,7 +79,7 @@ export declare class QueryBuilder<Schema extends {
|
|
|
77
79
|
* @param crossFilter - An instance of CrossFilter containing shared filter conditions.
|
|
78
80
|
* @returns The current QueryBuilder instance.
|
|
79
81
|
*/
|
|
80
|
-
applyCrossFilters(crossFilter: CrossFilter<Schema, keyof Schema
|
|
82
|
+
applyCrossFilters(crossFilter: CrossFilter<Schema, Extract<keyof Schema, string>>): this;
|
|
81
83
|
/**
|
|
82
84
|
* Selects specific columns from the table.
|
|
83
85
|
* @template K - The keys/columns to select
|
|
@@ -124,6 +126,7 @@ export declare class QueryBuilder<Schema extends {
|
|
|
124
126
|
* builder.where('age', 'gt', 18)
|
|
125
127
|
* ```
|
|
126
128
|
*/
|
|
129
|
+
where(expressionBuilder: (expr: PredicateBuilder<Schema, OriginalT>) => PredicateExpression): this;
|
|
127
130
|
where<K extends keyof OriginalT | TableColumn<Schema>, Op extends keyof OperatorValueMap<any, Schema>>(columnOrColumns: K | K[], operator: Op, value: K extends keyof OriginalT ? OperatorValueMap<OriginalT[K] extends ColumnType ? InferColumnType<OriginalT[K]> : never, Schema>[Op] : any): this;
|
|
128
131
|
/**
|
|
129
132
|
* Adds a WHERE clause for tuple IN operations.
|
|
@@ -138,6 +141,7 @@ export declare class QueryBuilder<Schema extends {
|
|
|
138
141
|
* ```
|
|
139
142
|
*/
|
|
140
143
|
where<K extends keyof OriginalT | TableColumn<Schema>>(columns: K[], operator: 'inTuple' | 'globalInTuple', value: any): this;
|
|
144
|
+
orWhere(expressionBuilder: (expr: PredicateBuilder<Schema, OriginalT>) => PredicateExpression): this;
|
|
141
145
|
orWhere<K extends keyof OriginalT | TableColumn<Schema>>(column: K, operator: FilterOperator, value: any): this;
|
|
142
146
|
/**
|
|
143
147
|
* Adds an OR WHERE clause for tuple IN operations.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/core/query-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/core/query-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,12 +8,13 @@ import { ExecutorFeature } from './features/executor.js';
|
|
|
8
8
|
import { QueryModifiersFeature } from './features/query-modifiers.js';
|
|
9
9
|
import { FilterValidator } from './validators/filter-validator.js';
|
|
10
10
|
import { PaginationFeature } from './features/pagination.js';
|
|
11
|
+
import { createPredicateBuilder, } from './utils/predicate-builder.js';
|
|
11
12
|
import { CrossFilteringFeature } from './features/cross-filtering.js';
|
|
12
13
|
/**
|
|
13
14
|
* Type guard to check if a config is a client-based configuration.
|
|
14
15
|
*/
|
|
15
16
|
export function isClientConfig(config) {
|
|
16
|
-
return 'client' in config &&
|
|
17
|
+
return 'client' in config && config.client !== undefined;
|
|
17
18
|
}
|
|
18
19
|
/**
|
|
19
20
|
* A type-safe query builder for ClickHouse databases.
|
|
@@ -252,6 +253,14 @@ export class QueryBuilder {
|
|
|
252
253
|
FilterValidator.validateFilterCondition({ column: String(column), operator, value }, columnType);
|
|
253
254
|
}
|
|
254
255
|
where(columnOrColumns, operator, value) {
|
|
256
|
+
if (typeof columnOrColumns === 'function') {
|
|
257
|
+
const expression = columnOrColumns(createPredicateBuilder());
|
|
258
|
+
this.config = this.filtering.addExpressionCondition('AND', expression);
|
|
259
|
+
return this;
|
|
260
|
+
}
|
|
261
|
+
if (operator === undefined) {
|
|
262
|
+
throw new Error('Operator is required when specifying a column for where()');
|
|
263
|
+
}
|
|
255
264
|
// Handle tuple operations
|
|
256
265
|
if (Array.isArray(columnOrColumns) && (operator === 'inTuple' || operator === 'globalInTuple')) {
|
|
257
266
|
// For tuple operations, we need to handle the column array specially
|
|
@@ -267,6 +276,14 @@ export class QueryBuilder {
|
|
|
267
276
|
return this;
|
|
268
277
|
}
|
|
269
278
|
orWhere(columnOrColumns, operator, value) {
|
|
279
|
+
if (typeof columnOrColumns === 'function') {
|
|
280
|
+
const expression = columnOrColumns(createPredicateBuilder());
|
|
281
|
+
this.config = this.filtering.addExpressionCondition('OR', expression);
|
|
282
|
+
return this;
|
|
283
|
+
}
|
|
284
|
+
if (operator === undefined) {
|
|
285
|
+
throw new Error('Operator is required when specifying a column for orWhere()');
|
|
286
|
+
}
|
|
270
287
|
// Handle tuple operations
|
|
271
288
|
if (Array.isArray(columnOrColumns) && (operator === 'inTuple' || operator === 'globalInTuple')) {
|
|
272
289
|
// For tuple operations, we need to handle the column array specially
|
|
@@ -435,7 +452,8 @@ export class QueryBuilder {
|
|
|
435
452
|
const type = options?.type || joinPath.type || 'INNER';
|
|
436
453
|
const alias = options?.alias || joinPath.alias;
|
|
437
454
|
const table = String(joinPath.to);
|
|
438
|
-
|
|
455
|
+
const rightColumn = `${table}.${joinPath.rightColumn}`;
|
|
456
|
+
this.config = this.joins.addJoin(type, table, joinPath.leftColumn, rightColumn, alias);
|
|
439
457
|
});
|
|
440
458
|
}
|
|
441
459
|
else {
|
|
@@ -443,7 +461,8 @@ export class QueryBuilder {
|
|
|
443
461
|
const type = options?.type || path.type || 'INNER';
|
|
444
462
|
const alias = options?.alias || path.alias;
|
|
445
463
|
const table = String(path.to);
|
|
446
|
-
|
|
464
|
+
const rightColumn = `${table}.${path.rightColumn}`;
|
|
465
|
+
this.config = this.joins.addJoin(type, table, path.leftColumn, rightColumn, alias);
|
|
447
466
|
}
|
|
448
467
|
return this;
|
|
449
468
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { TableColumn } from '../../types/schema.js';
|
|
2
|
+
export type PredicatePrimitive = string | number | boolean | Date | null;
|
|
3
|
+
type PredicateValue = Exclude<PredicatePrimitive, string>;
|
|
4
|
+
export interface PredicateExpression {
|
|
5
|
+
__type: 'predicate_expression';
|
|
6
|
+
sql: string;
|
|
7
|
+
parameters: any[];
|
|
8
|
+
}
|
|
9
|
+
export interface PredicateLiteral<T = PredicatePrimitive> {
|
|
10
|
+
__type: 'predicate_literal';
|
|
11
|
+
value: T;
|
|
12
|
+
}
|
|
13
|
+
export type ColumnReference<Schema, OriginalT> = keyof OriginalT | TableColumn<Schema>;
|
|
14
|
+
export type PredicateArg<Schema, OriginalT> = ColumnReference<Schema, OriginalT> | PredicateExpression | PredicateLiteral | PredicateValue | PredicatePrimitive[];
|
|
15
|
+
export interface PredicateBuilder<Schema, OriginalT> {
|
|
16
|
+
fn(name: string, ...args: Array<PredicateArg<Schema, OriginalT>>): PredicateExpression;
|
|
17
|
+
col(column: ColumnReference<Schema, OriginalT>): PredicateExpression;
|
|
18
|
+
value<T extends PredicatePrimitive>(value: T): PredicateLiteral<T>;
|
|
19
|
+
literal<T extends PredicatePrimitive>(value: T): PredicateLiteral<T>;
|
|
20
|
+
array(values: Array<PredicatePrimitive | PredicateLiteral>): PredicateExpression;
|
|
21
|
+
raw(sql: string): PredicateExpression;
|
|
22
|
+
and(expressions: PredicateExpression[]): PredicateExpression;
|
|
23
|
+
or(expressions: PredicateExpression[]): PredicateExpression;
|
|
24
|
+
}
|
|
25
|
+
export declare function createPredicateBuilder<Schema, OriginalT>(): PredicateBuilder<Schema, OriginalT>;
|
|
26
|
+
export {};
|
|
27
|
+
//# sourceMappingURL=predicate-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"predicate-builder.d.ts","sourceRoot":"","sources":["../../../src/core/utils/predicate-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;AACzE,KAAK,cAAc,GAAG,OAAO,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,sBAAsB,CAAC;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,GAAG,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB,CAAC,CAAC,GAAG,kBAAkB;IACtD,MAAM,EAAE,mBAAmB,CAAC;IAC5B,KAAK,EAAE,CAAC,CAAC;CACV;AAED,MAAM,MAAM,eAAe,CAAC,MAAM,EAAE,SAAS,IAAI,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;AAEvF,MAAM,MAAM,YAAY,CAAC,MAAM,EAAE,SAAS,IACtC,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,GAClC,mBAAmB,GACnB,gBAAgB,GAChB,cAAc,GACd,kBAAkB,EAAE,CAAC;AAEzB,MAAM,WAAW,gBAAgB,CAAC,MAAM,EAAE,SAAS;IACjD,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,GAAG,mBAAmB,CAAC;IACvF,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,mBAAmB,CAAC;IACrE,KAAK,CAAC,CAAC,SAAS,kBAAkB,EAAE,KAAK,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACnE,OAAO,CAAC,CAAC,SAAS,kBAAkB,EAAE,KAAK,EAAE,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACrE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,kBAAkB,GAAG,gBAAgB,CAAC,GAAG,mBAAmB,CAAC;IACjF,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB,CAAC;IACtC,GAAG,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,mBAAmB,CAAC;IAC7D,EAAE,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,mBAAmB,CAAC;CAC7D;AA2GD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,KAAK,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,CAW/F"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
function createExpression(sql, parameters = []) {
|
|
2
|
+
return {
|
|
3
|
+
__type: 'predicate_expression',
|
|
4
|
+
sql,
|
|
5
|
+
parameters
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
function literal(value) {
|
|
9
|
+
return {
|
|
10
|
+
__type: 'predicate_literal',
|
|
11
|
+
value
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function isPredicateExpression(value) {
|
|
15
|
+
return value?.__type === 'predicate_expression';
|
|
16
|
+
}
|
|
17
|
+
function isPredicateLiteral(value) {
|
|
18
|
+
return value?.__type === 'predicate_literal';
|
|
19
|
+
}
|
|
20
|
+
function buildArrayLiteral(values) {
|
|
21
|
+
const parts = [];
|
|
22
|
+
const parameters = [];
|
|
23
|
+
values.forEach(value => {
|
|
24
|
+
const normalized = normalizeLiteralValue(value);
|
|
25
|
+
parts.push(normalized.sql);
|
|
26
|
+
parameters.push(...normalized.parameters);
|
|
27
|
+
});
|
|
28
|
+
return createExpression(`[${parts.join(', ')}]`, parameters);
|
|
29
|
+
}
|
|
30
|
+
function normalizeLiteralValue(value) {
|
|
31
|
+
if (isPredicateLiteral(value)) {
|
|
32
|
+
return createExpression('?', [value.value]);
|
|
33
|
+
}
|
|
34
|
+
if (value === null) {
|
|
35
|
+
return createExpression('NULL');
|
|
36
|
+
}
|
|
37
|
+
if (value instanceof Date || typeof value === 'number' || typeof value === 'boolean' || typeof value === 'string') {
|
|
38
|
+
return createExpression('?', [value]);
|
|
39
|
+
}
|
|
40
|
+
throw new Error('Unsupported literal value in predicate array');
|
|
41
|
+
}
|
|
42
|
+
function normalizeArgument(arg) {
|
|
43
|
+
if (isPredicateExpression(arg)) {
|
|
44
|
+
return arg;
|
|
45
|
+
}
|
|
46
|
+
if (isPredicateLiteral(arg)) {
|
|
47
|
+
return createExpression('?', [arg.value]);
|
|
48
|
+
}
|
|
49
|
+
if (Array.isArray(arg)) {
|
|
50
|
+
return buildArrayLiteral(arg);
|
|
51
|
+
}
|
|
52
|
+
if (arg === null) {
|
|
53
|
+
return createExpression('NULL');
|
|
54
|
+
}
|
|
55
|
+
if (arg instanceof Date || typeof arg === 'number' || typeof arg === 'boolean') {
|
|
56
|
+
return createExpression('?', [arg]);
|
|
57
|
+
}
|
|
58
|
+
if (typeof arg === 'string') {
|
|
59
|
+
return createExpression(arg);
|
|
60
|
+
}
|
|
61
|
+
throw new Error('Unsupported predicate argument type');
|
|
62
|
+
}
|
|
63
|
+
function buildFunctionExpression(name, args) {
|
|
64
|
+
const builtArgs = args.map(arg => normalizeArgument(arg));
|
|
65
|
+
const sql = `${name}(${builtArgs.map(arg => arg.sql).join(', ')})`;
|
|
66
|
+
const parameters = builtArgs.flatMap(arg => arg.parameters);
|
|
67
|
+
return createExpression(sql, parameters);
|
|
68
|
+
}
|
|
69
|
+
function buildLogical(operator, expressions) {
|
|
70
|
+
if (!expressions.length) {
|
|
71
|
+
throw new Error(`${operator} requires at least one expression`);
|
|
72
|
+
}
|
|
73
|
+
if (expressions.length === 1) {
|
|
74
|
+
return expressions[0];
|
|
75
|
+
}
|
|
76
|
+
const sql = expressions.map(expr => `(${expr.sql})`).join(` ${operator} `);
|
|
77
|
+
const parameters = expressions.flatMap(expr => expr.parameters);
|
|
78
|
+
return createExpression(sql, parameters);
|
|
79
|
+
}
|
|
80
|
+
export function createPredicateBuilder() {
|
|
81
|
+
return {
|
|
82
|
+
fn: (name, ...args) => buildFunctionExpression(name, args),
|
|
83
|
+
col: column => createExpression(String(column)),
|
|
84
|
+
value: value => literal(value),
|
|
85
|
+
literal: value => literal(value),
|
|
86
|
+
array: values => buildArrayLiteral(values),
|
|
87
|
+
raw: sql => createExpression(sql),
|
|
88
|
+
and: expressions => buildLogical('AND', expressions),
|
|
89
|
+
or: expressions => buildLogical('OR', expressions)
|
|
90
|
+
};
|
|
91
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FilterConditionInput } from '../../types/index.js';
|
|
2
|
+
import { ColumnType } from '../../types/schema.js';
|
|
2
3
|
export declare class FilterValidator {
|
|
3
4
|
static validateFilterCondition<T = any>(condition: FilterConditionInput<T>, columnType?: ColumnType, options?: {
|
|
4
5
|
allowNull?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-validator.d.ts","sourceRoot":"","sources":["../../../src/core/validators/filter-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"filter-validator.d.ts","sourceRoot":"","sources":["../../../src/core/validators/filter-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,qBAAa,eAAe;IAC1B,MAAM,CAAC,uBAAuB,CAAC,CAAC,GAAG,GAAG,EACpC,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAClC,UAAU,CAAC,EAAE,UAAU,EACvB,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO,GACpC,IAAI;IAgBP,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;CAGrD"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FilterOperator } from '../../types/index.js';
|
|
2
|
+
import { ColumnType } from '../../types/schema.js';
|
|
2
3
|
export declare class ValueValidator {
|
|
3
4
|
static validateFilterValue(columnType: ColumnType, operator: FilterOperator, value: any, columnName: string): void;
|
|
4
5
|
private static validateSingleValue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"value-validator.d.ts","sourceRoot":"","sources":["../../../src/core/validators/value-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"value-validator.d.ts","sourceRoot":"","sources":["../../../src/core/validators/value-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,qBAAa,cAAc;IACzB,MAAM,CAAC,mBAAmB,CACxB,UAAU,EAAE,UAAU,EACtB,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,GAAG,EACV,UAAU,EAAE,MAAM,GACjB,IAAI;IAqBP,OAAO,CAAC,MAAM,CAAC,mBAAmB;CA4BnC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,11 +3,13 @@ export { ClickHouseConnection } from './core/connection.js';
|
|
|
3
3
|
export { JoinRelationships } from './core/join-relationships.js';
|
|
4
4
|
export type { ClickHouseConfig, ClickHouseClientConfig } from './core/query-builder.js';
|
|
5
5
|
export { isClientConfig } from './core/query-builder.js';
|
|
6
|
-
export type { ColumnType, TableColumn,
|
|
6
|
+
export type { ColumnType, TableColumn, TableSchema, TableRecord, DatabaseSchema, InferColumnType, } from './types/schema.js';
|
|
7
|
+
export type { OrderDirection, QueryConfig, PaginationOptions, PaginatedResult, PageInfo, AggregationType } from './types/base.js';
|
|
7
8
|
export type { FilterOperator, OperatorValueMap, FilterConditionInput } from './types/filters.js';
|
|
8
9
|
export type { JoinPath, JoinPathOptions } from './core/join-relationships.js';
|
|
9
10
|
export { CrossFilter } from './core/cross-filter.js';
|
|
10
11
|
export { logger } from './core/utils/logger.js';
|
|
11
12
|
export { raw, rawAs, toDateTime, formatDateTime, toStartOfInterval, datePart } from './core/utils/sql-expressions.js';
|
|
12
13
|
export type { SqlExpression, FormatDateTimeOptions } from './core/utils/sql-expressions.js';
|
|
14
|
+
export type { PredicateExpression, PredicateLiteral, PredicateBuilder, PredicateArg } from './core/utils/predicate-builder.js';
|
|
13
15
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGjE,YAAY,EACV,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAGzD,YAAY,EACV,UAAU,EACV,WAAW,EACX,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC3E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGjE,YAAY,EACV,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAGzD,YAAY,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,WAAW,EACX,cAAc,EACd,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,QAAQ,EACR,eAAe,EAChB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACrB,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAGhD,OAAO,EACL,GAAG,EACH,KAAK,EACL,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,QAAQ,EACT,MAAM,iCAAiC,CAAC;AAGzC,YAAY,EACV,aAAa,EACb,qBAAqB,EACtB,MAAM,iCAAiC,CAAC;AAGzC,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACb,MAAM,mCAAmC,CAAC"}
|
package/dist/types/base.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { ClickHouseType, InferClickHouseType } from "./clickhouse-types.js";
|
|
2
1
|
import { FilterOperator } from "./filters.js";
|
|
2
|
+
import type { TableColumn } from './schema.js';
|
|
3
3
|
export interface QueryConfig<T, Schema> {
|
|
4
4
|
select?: Array<keyof T | string>;
|
|
5
5
|
where?: WhereCondition[];
|
|
@@ -18,26 +18,24 @@ export interface QueryConfig<T, Schema> {
|
|
|
18
18
|
unionQueries?: string[];
|
|
19
19
|
settings?: string;
|
|
20
20
|
}
|
|
21
|
-
export
|
|
22
|
-
name: string;
|
|
23
|
-
columns: T;
|
|
24
|
-
}
|
|
25
|
-
export type DatabaseSchema = Record<string, Record<string, ColumnType>>;
|
|
21
|
+
export type { ColumnType, TableSchema, DatabaseSchema, TableRecord, InferColumnType, TableColumn } from './schema.js';
|
|
26
22
|
export type WhereExpression = string;
|
|
27
23
|
export type GroupByExpression<T> = keyof T | Array<keyof T>;
|
|
28
|
-
export type TableRecord<T> = {
|
|
29
|
-
[K in keyof T]: T[K] extends ColumnType ? InferColumnType<T[K]> : never;
|
|
30
|
-
};
|
|
31
|
-
export type ColumnType = ClickHouseType;
|
|
32
|
-
export type InferColumnType<T extends ColumnType> = InferClickHouseType<T>;
|
|
33
24
|
export type OrderDirection = 'ASC' | 'DESC';
|
|
34
|
-
export interface
|
|
25
|
+
export interface StandardWhereCondition {
|
|
35
26
|
column: string;
|
|
36
27
|
operator: FilterOperator;
|
|
37
28
|
value: any;
|
|
38
29
|
conjunction: 'AND' | 'OR';
|
|
39
30
|
type?: 'condition' | 'group-start' | 'group-end';
|
|
40
31
|
}
|
|
32
|
+
export interface ExpressionWhereCondition {
|
|
33
|
+
type: 'expression';
|
|
34
|
+
expression: string;
|
|
35
|
+
parameters: any[];
|
|
36
|
+
conjunction: 'AND' | 'OR';
|
|
37
|
+
}
|
|
38
|
+
export type WhereCondition = StandardWhereCondition | ExpressionWhereCondition;
|
|
41
39
|
export type JoinType = 'INNER' | 'LEFT' | 'RIGHT' | 'FULL';
|
|
42
40
|
export interface JoinClause {
|
|
43
41
|
type: JoinType;
|
|
@@ -46,9 +44,6 @@ export interface JoinClause {
|
|
|
46
44
|
rightColumn: string;
|
|
47
45
|
alias?: string;
|
|
48
46
|
}
|
|
49
|
-
export type TableColumn<Schema> = {
|
|
50
|
-
[Table in keyof Schema]: `${string & Table}.${string & keyof Schema[Table]}`;
|
|
51
|
-
}[keyof Schema] | keyof Schema[keyof Schema];
|
|
52
47
|
export type AggregationType<T, Aggregations, Column, A extends string, Suffix extends string, HasSelect extends boolean> = HasSelect extends true ? {
|
|
53
48
|
[K in keyof T | A]: K extends keyof T ? T[K] : string;
|
|
54
49
|
} : Aggregations extends Record<string, string> ? Aggregations & Record<A extends undefined ? `${Column & string}_${Suffix}` : A, string> : Record<A extends undefined ? `${Column & string}_${Suffix}` : A, string>;
|
package/dist/types/base.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/types/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/types/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,8 @@ export type ClickHouseString = 'String' | `FixedString(${number})` | 'UUID';
|
|
|
6
6
|
export type ClickHouseBoolean = 'Bool' | 'Boolean';
|
|
7
7
|
export type ClickHouseEnum = `Enum8(${string})` | `Enum16(${string})`;
|
|
8
8
|
export type ClickHouseBaseType = ClickHouseInteger | ClickHouseFloat | ClickHouseDecimal | ClickHouseDateTime | ClickHouseString | ClickHouseBoolean | ClickHouseEnum;
|
|
9
|
-
export type ClickHouseType = ClickHouseBaseType | `Array(${ClickHouseBaseType})` | `Array(Nullable(${ClickHouseBaseType}))` | `Array(LowCardinality(String))` | `Array(LowCardinality(${ClickHouseEnum}))` | `Nullable(${ClickHouseBaseType})` | `Nullable(Array(${ClickHouseBaseType}))` | `LowCardinality(${ClickHouseString})` | `LowCardinality(${ClickHouseEnum})` | `Map(String, ${ClickHouseBaseType})` | `Map(String, Array(${ClickHouseBaseType}))` | `Map(String, Nullable(${ClickHouseBaseType}))` | `Map(LowCardinality(String), ${ClickHouseBaseType})` | `Map(LowCardinality(String), Array(${ClickHouseBaseType}))` | `Map(LowCardinality(String), Nullable(${ClickHouseBaseType}))` | `Map(${ClickHouseInteger}, ${ClickHouseBaseType})` | `Map(${ClickHouseInteger}, Array(${ClickHouseBaseType}))` | `Map(${ClickHouseInteger}, Nullable(${ClickHouseBaseType}))` | `Array(Map(String, ${ClickHouseBaseType}))` | `Array(Map(LowCardinality(String), ${ClickHouseBaseType}))` | `Array(Map(${ClickHouseInteger}, ${ClickHouseBaseType}))` | `Nullable(Map(String, ${ClickHouseBaseType}))` | `Nullable(Map(LowCardinality(String), ${ClickHouseBaseType}))`;
|
|
10
|
-
export type InferClickHouseType<T extends ClickHouseType, Depth extends number = 0> = Depth extends 5 ? unknown : T extends ClickHouseInteger ? number : T extends ClickHouseFloat ? number : T extends ClickHouseDecimal ? number : T extends ClickHouseDateTime ? Date : T extends ClickHouseString ? string : T extends ClickHouseEnum ? string : T extends ClickHouseBoolean ? boolean : T extends `Array(${infer U})` ? U extends ClickHouseType ? Array<InferClickHouseType<U, Add1<Depth>>> : unknown[] : T extends `Nullable(${infer U})` ? U extends ClickHouseType ? InferClickHouseType<U, Add1<Depth>> | null : unknown | null : T extends `LowCardinality(${infer U})` ? U extends ClickHouseString | ClickHouseEnum ? InferClickHouseType<U, Add1<Depth>> : unknown : T extends `Map(${string}, ${infer V})` ? V extends ClickHouseType ? Record<string, InferClickHouseType<V, Add1<Depth>>> : Record<string, unknown> : unknown;
|
|
9
|
+
export type ClickHouseType = ClickHouseBaseType | `Array(${ClickHouseBaseType})` | `Array(Nullable(${ClickHouseBaseType}))` | `Array(LowCardinality(String))` | `Array(LowCardinality(${ClickHouseEnum}))` | `Nullable(${ClickHouseBaseType})` | `Nullable(Array(${ClickHouseBaseType}))` | `LowCardinality(${ClickHouseString})` | `LowCardinality(${ClickHouseEnum})` | `LowCardinality(Nullable(${ClickHouseString}))` | `LowCardinality(Nullable(${ClickHouseEnum}))` | `Map(String, ${ClickHouseBaseType})` | `Map(String, Array(${ClickHouseBaseType}))` | `Map(String, Nullable(${ClickHouseBaseType}))` | `Map(LowCardinality(String), ${ClickHouseBaseType})` | `Map(LowCardinality(String), Array(${ClickHouseBaseType}))` | `Map(LowCardinality(String), Nullable(${ClickHouseBaseType}))` | `Map(${ClickHouseInteger}, ${ClickHouseBaseType})` | `Map(${ClickHouseInteger}, Array(${ClickHouseBaseType}))` | `Map(${ClickHouseInteger}, Nullable(${ClickHouseBaseType}))` | `Array(Map(String, ${ClickHouseBaseType}))` | `Array(Map(LowCardinality(String), ${ClickHouseBaseType}))` | `Array(Map(${ClickHouseInteger}, ${ClickHouseBaseType}))` | `Nullable(Map(String, ${ClickHouseBaseType}))` | `Nullable(Map(LowCardinality(String), ${ClickHouseBaseType}))`;
|
|
10
|
+
export type InferClickHouseType<T extends ClickHouseType, Depth extends number = 0> = Depth extends 5 ? unknown : T extends ClickHouseInteger ? number : T extends ClickHouseFloat ? number : T extends ClickHouseDecimal ? number : T extends ClickHouseDateTime ? Date : T extends ClickHouseString ? string : T extends ClickHouseEnum ? string : T extends ClickHouseBoolean ? boolean : T extends `Array(${infer U})` ? U extends ClickHouseType ? Array<InferClickHouseType<U, Add1<Depth>>> : unknown[] : T extends `Nullable(${infer U})` ? U extends ClickHouseType ? InferClickHouseType<U, Add1<Depth>> | null : unknown | null : T extends `LowCardinality(${infer U})` ? U extends `Nullable(${infer V})` ? V extends ClickHouseString | ClickHouseEnum ? InferClickHouseType<V, Add1<Depth>> | null : unknown | null : U extends ClickHouseString | ClickHouseEnum ? InferClickHouseType<U, Add1<Depth>> : unknown : T extends `Map(${string}, ${infer V})` ? V extends ClickHouseType ? Record<string, InferClickHouseType<V, Add1<Depth>>> : Record<string, unknown> : unknown;
|
|
11
11
|
type Add1<T extends number> = T extends 0 ? 1 : T extends 1 ? 2 : T extends 2 ? 3 : T extends 3 ? 4 : 5;
|
|
12
12
|
export type ClickHouseSchema = Record<string, ClickHouseType>;
|
|
13
13
|
export type InferSchemaType<T extends ClickHouseSchema> = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clickhouse-types.d.ts","sourceRoot":"","sources":["../../src/types/clickhouse-types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"clickhouse-types.d.ts","sourceRoot":"","sources":["../../src/types/clickhouse-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GACzB,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAC1D,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAErE,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpD,MAAM,MAAM,iBAAiB,GACzB,WAAW,GAAG,WAAW,GAAG,YAAY,GAAG,YAAY,GACvD,WAAW,MAAM,KAAK,MAAM,GAAG,CAAC;AAEpC,MAAM,MAAM,kBAAkB,GAC1B,MAAM,GAAG,QAAQ,GACjB,UAAU,GACV,aAAa,MAAM,IAAI,GACvB,cAAc,MAAM,GAAG,GACvB,cAAc,MAAM,MAAM,MAAM,IAAI,CAAC;AAEzC,MAAM,MAAM,gBAAgB,GACxB,QAAQ,GACR,eAAe,MAAM,GAAG,GACxB,MAAM,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,SAAS,CAAC;AAEnD,MAAM,MAAM,cAAc,GACtB,SAAS,MAAM,GAAG,GAClB,UAAU,MAAM,GAAG,CAAC;AAExB,MAAM,MAAM,kBAAkB,GAC1B,iBAAiB,GACjB,eAAe,GACf,iBAAiB,GACjB,kBAAkB,GAClB,gBAAgB,GAChB,iBAAiB,GACjB,cAAc,CAAC;AAEnB,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,SAAS,kBAAkB,GAAG,GAC9B,kBAAkB,kBAAkB,IAAI,GACxC,+BAA+B,GAC/B,wBAAwB,cAAc,IAAI,GAC1C,YAAY,kBAAkB,GAAG,GACjC,kBAAkB,kBAAkB,IAAI,GACxC,kBAAkB,gBAAgB,GAAG,GACrC,kBAAkB,cAAc,GAAG,GACnC,2BAA2B,gBAAgB,IAAI,GAC/C,2BAA2B,cAAc,IAAI,GAC7C,eAAe,kBAAkB,GAAG,GACpC,qBAAqB,kBAAkB,IAAI,GAC3C,wBAAwB,kBAAkB,IAAI,GAC9C,+BAA+B,kBAAkB,GAAG,GACpD,qCAAqC,kBAAkB,IAAI,GAC3D,wCAAwC,kBAAkB,IAAI,GAC9D,OAAO,iBAAiB,KAAK,kBAAkB,GAAG,GAClD,OAAO,iBAAiB,WAAW,kBAAkB,IAAI,GACzD,OAAO,iBAAiB,cAAc,kBAAkB,IAAI,GAC5D,qBAAqB,kBAAkB,IAAI,GAC3C,qCAAqC,kBAAkB,IAAI,GAC3D,aAAa,iBAAiB,KAAK,kBAAkB,IAAI,GACzD,wBAAwB,kBAAkB,IAAI,GAC9C,wCAAwC,kBAAkB,IAAI,CAAC;AAEnE,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,cAAc,EAAE,KAAK,SAAS,MAAM,GAAG,CAAC,IAChF,KAAK,SAAS,CAAC,GACb,OAAO,GACP,CAAC,SAAS,iBAAiB,GAAG,MAAM,GACpC,CAAC,SAAS,eAAe,GAAG,MAAM,GAClC,CAAC,SAAS,iBAAiB,GAAG,MAAM,GACpC,CAAC,SAAS,kBAAkB,GAAG,IAAI,GACnC,CAAC,SAAS,gBAAgB,GAAG,MAAM,GACnC,CAAC,SAAS,cAAc,GAAG,MAAM,GACjC,CAAC,SAAS,iBAAiB,GAAG,OAAO,GACrC,CAAC,SAAS,SAAS,MAAM,CAAC,GAAG,GAC7B,CAAC,SAAS,cAAc,GACxB,KAAK,CAAC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAC1C,OAAO,EAAE,GACT,CAAC,SAAS,YAAY,MAAM,CAAC,GAAG,GAChC,CAAC,SAAS,cAAc,GACxB,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,GAC1C,OAAO,GAAG,IAAI,GACd,CAAC,SAAS,kBAAkB,MAAM,CAAC,GAAG,GACtC,CAAC,SAAS,YAAY,MAAM,CAAC,GAAG,GAC9B,CAAC,SAAS,gBAAgB,GAAG,cAAc,GACzC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,GAC1C,OAAO,GAAG,IAAI,GAChB,CAAC,SAAS,gBAAgB,GAAG,cAAc,GACzC,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GACnC,OAAO,GACX,CAAC,SAAS,OAAO,MAAM,KAAK,MAAM,CAAC,GAAG,GACtC,CAAC,SAAS,cAAc,GACxB,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GACnD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,OAAO,CAAC;AAEZ,KAAK,IAAI,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAGxG,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAG9D,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,gBAAgB,IAAI;KACvD,CAAC,IAAI,MAAM,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC1C,CAAC"}
|
package/dist/types/filters.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TableColumn } from
|
|
1
|
+
import { TableColumn } from './schema.js';
|
|
2
2
|
export type FilterValue<T> = T extends Date ? Date | string : T extends number ? number : T extends string ? string : T extends boolean ? boolean : never;
|
|
3
3
|
export type FilterCondition<T> = {
|
|
4
4
|
eq: FilterValue<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/types/filters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/types/filters.ts"],"names":[],"mappings":"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"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,aAAa,CAAC"}
|
package/dist/types/index.js
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ClickHouseType, InferClickHouseType } from './clickhouse-types.js';
|
|
2
|
+
export type ColumnType = ClickHouseType;
|
|
3
|
+
export type InferColumnType<T extends ColumnType> = InferClickHouseType<T>;
|
|
4
|
+
export type DatabaseSchema = Record<string, Record<string, ColumnType>>;
|
|
5
|
+
export type AnySchema = Record<string, Record<string, ColumnType>>;
|
|
6
|
+
export interface TableSchema<TColumns> {
|
|
7
|
+
name: string;
|
|
8
|
+
columns: TColumns;
|
|
9
|
+
}
|
|
10
|
+
export type TableRecord<TColumns> = {
|
|
11
|
+
[K in keyof TColumns]: TColumns[K] extends ColumnType ? InferColumnType<TColumns[K]> : never;
|
|
12
|
+
};
|
|
13
|
+
export type QualifiedColumn<Schema, TableName extends keyof Schema> = `${string & TableName}.${string & keyof Schema[TableName]}`;
|
|
14
|
+
export type ColumnIdentifier<Schema, TableName extends keyof Schema> = QualifiedColumn<Schema, TableName> | keyof Schema[TableName];
|
|
15
|
+
export type TableColumnForTables<Schema, Tables extends keyof Schema = keyof Schema> = {
|
|
16
|
+
[TableName in Tables]: ColumnIdentifier<Schema, TableName>;
|
|
17
|
+
}[Tables];
|
|
18
|
+
export type TableColumn<Schema> = TableColumnForTables<Schema>;
|
|
19
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/types/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5E,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC;AAExC,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,UAAU,IAAI,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAE3E,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAExE,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;AAEnE,MAAM,WAAW,WAAW,CAAC,QAAQ;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,QAAQ,CAAC;CACnB;AAED,MAAM,MAAM,WAAW,CAAC,QAAQ,IAAI;KACjC,CAAC,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,UAAU,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK;CAC7F,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,MAAM,EAAE,SAAS,SAAS,MAAM,MAAM,IAChE,GAAG,MAAM,GAAG,SAAS,IAAI,MAAM,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;AAE9D,MAAM,MAAM,gBAAgB,CAAC,MAAM,EAAE,SAAS,SAAS,MAAM,MAAM,IACjE,eAAe,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;AAE/D,MAAM,MAAM,oBAAoB,CAAC,MAAM,EAAE,MAAM,SAAS,MAAM,MAAM,GAAG,MAAM,MAAM,IAAI;KACpF,SAAS,IAAI,MAAM,GAAG,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC;CAC3D,CAAC,MAAM,CAAC,CAAC;AAEV,MAAM,MAAM,WAAW,CAAC,MAAM,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hypequery/clickhouse",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "ClickHouse typescript query builder",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"type": "module",
|
|
8
|
+
"browser": {
|
|
9
|
+
"./dist/core/env/auto-client.js": "./dist/core/env/auto-client.browser.js"
|
|
10
|
+
},
|
|
8
11
|
"exports": {
|
|
9
12
|
".": {
|
|
10
13
|
"types": "./dist/index.d.ts",
|
|
@@ -21,8 +24,9 @@
|
|
|
21
24
|
"verify-build": "node scripts/verify-build.js",
|
|
22
25
|
"diagnose-ci": "node scripts/diagnose-ci.js",
|
|
23
26
|
"dev": "tsc --watch",
|
|
24
|
-
"test": "npm run test:unit",
|
|
25
|
-
"test:unit": "jest --testPathIgnorePatterns='integration' --config=jest.config.cjs",
|
|
27
|
+
"test": "npm run test:types && npm run test:unit",
|
|
28
|
+
"test:unit": "jest --testPathIgnorePatterns='integration|type-tests' --config=jest.config.cjs",
|
|
29
|
+
"test:types": "tsc --project tsconfig.type-tests.json",
|
|
26
30
|
"test:integration": "node scripts/run-integration-tests.js",
|
|
27
31
|
"test:watch": "jest --testPathIgnorePatterns='integration' --watch --config=jest.config.cjs",
|
|
28
32
|
"test:coverage": "jest --coverage --config=jest.config.cjs",
|