@devrev/meerkat-core 0.0.117 → 0.0.118
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/package.json +1 -1
- package/src/joins/joins.js +99 -13
- package/src/joins/joins.js.map +1 -1
package/package.json
CHANGED
package/src/joins/joins.js
CHANGED
|
@@ -3,6 +3,55 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getCombinedTableSchema = exports.checkLoopInJoinPath = exports.createDirectedGraph = exports.generateSqlQuery = exports.parseTableColumnReference = exports.quoteIdentifierIfNeeded = void 0;
|
|
4
4
|
const get_used_table_schema_1 = require("../get-used-table-schema/get-used-table-schema");
|
|
5
5
|
const cube_types_1 = require("../types/cube-types");
|
|
6
|
+
/**
|
|
7
|
+
* Regex pattern to match a CONTAINS function call in join SQL.
|
|
8
|
+
*
|
|
9
|
+
* Matches: CONTAINS(arg1, arg2)
|
|
10
|
+
*
|
|
11
|
+
* Pattern breakdown:
|
|
12
|
+
* - ^\s* : Start of string, optional leading whitespace
|
|
13
|
+
* - CONTAINS : Literal "CONTAINS" (case-insensitive due to 'i' flag)
|
|
14
|
+
* - \s*\(\s* : Opening parenthesis with optional whitespace
|
|
15
|
+
* - (.+?) : Capture group 1 - first argument (non-greedy)
|
|
16
|
+
* - \s*,\s* : Comma separator with optional whitespace
|
|
17
|
+
* - (.+?) : Capture group 2 - second argument (non-greedy)
|
|
18
|
+
* - \s*\)\s*$ : Closing parenthesis with optional whitespace, end of string
|
|
19
|
+
*
|
|
20
|
+
* Examples that match:
|
|
21
|
+
* - "CONTAINS(table1.col, table2.col)"
|
|
22
|
+
* - " contains( table1.items , table2.id ) "
|
|
23
|
+
* - "CONTAINS(\"quoted.table\".col, other.col)"
|
|
24
|
+
*/
|
|
25
|
+
const CONTAINS_FUNCTION_REGEX = /^\s*CONTAINS\s*\(\s*(.+?)\s*,\s*(.+?)\s*\)\s*$/i;
|
|
26
|
+
/**
|
|
27
|
+
* Regex pattern to validate table.column reference format.
|
|
28
|
+
*
|
|
29
|
+
* Matches: tableName.columnName or "quotedTableName".columnName
|
|
30
|
+
* Also supports composite fields with multiple dots (e.g., table.field.subfield)
|
|
31
|
+
*
|
|
32
|
+
* Pattern breakdown:
|
|
33
|
+
* - ^ : Start of string
|
|
34
|
+
* - (?: : Non-capturing group for table name alternatives:
|
|
35
|
+
* - "[^"]+" : Quoted identifier (e.g., "table.name")
|
|
36
|
+
* - | : OR
|
|
37
|
+
* - [^.]+ : Unquoted identifier (any chars except dot)
|
|
38
|
+
* - ) : End of non-capturing group
|
|
39
|
+
* - \. : Literal dot separator
|
|
40
|
+
* - .+ : Column/field path (one or more chars, allows dots for composite fields)
|
|
41
|
+
* - $ : End of string
|
|
42
|
+
*
|
|
43
|
+
* Examples that match:
|
|
44
|
+
* - "table1.column"
|
|
45
|
+
* - "myTable.myColumn"
|
|
46
|
+
* - "\"quoted.table\".column"
|
|
47
|
+
* - "table.field.subfield" (composite field)
|
|
48
|
+
* - "table.nested.deep.field" (deeply nested composite field)
|
|
49
|
+
*
|
|
50
|
+
* Examples that do NOT match:
|
|
51
|
+
* - "just_a_column" (no dot)
|
|
52
|
+
* - ".column" (empty table name)
|
|
53
|
+
*/
|
|
54
|
+
const TABLE_COLUMN_REFERENCE_REGEX = /^(?:"[^"]+"|[^.]+)\..+$/;
|
|
6
55
|
/**
|
|
7
56
|
* Quotes an identifier if it contains dots or other special characters.
|
|
8
57
|
* Used for table aliases in SQL that may contain dots when useDotNotation is true.
|
|
@@ -94,6 +143,50 @@ function generateSqlQuery(path, tableSchemaSqlMap, directedGraph) {
|
|
|
94
143
|
exports.generateSqlQuery = generateSqlQuery;
|
|
95
144
|
const createDirectedGraph = (tableSchema, tableSchemaSqlMap) => {
|
|
96
145
|
const directedGraph = {};
|
|
146
|
+
/**
|
|
147
|
+
* Parses a join SQL condition and extracts the table and column names
|
|
148
|
+
* from each side of the binary operator.
|
|
149
|
+
*
|
|
150
|
+
* Supported forms (whitespace and case-insensitive for operators):
|
|
151
|
+
* - tableA.column = tableB.column
|
|
152
|
+
* - CONTAINS(tableA.column, tableB.column)
|
|
153
|
+
*
|
|
154
|
+
* The full, original join SQL string is still stored as the join condition
|
|
155
|
+
* in the directed graph; this helper is only responsible for figuring out
|
|
156
|
+
* which tables and columns participate in the join.
|
|
157
|
+
*/
|
|
158
|
+
function parseJoinSqlColumns(joinSql) {
|
|
159
|
+
let leftPart;
|
|
160
|
+
let rightPart;
|
|
161
|
+
const containsFnMatch = joinSql.match(CONTAINS_FUNCTION_REGEX);
|
|
162
|
+
if (containsFnMatch) {
|
|
163
|
+
leftPart = containsFnMatch[1];
|
|
164
|
+
rightPart = containsFnMatch[2];
|
|
165
|
+
// Validate that both arguments follow the table.column structure
|
|
166
|
+
if (!TABLE_COLUMN_REFERENCE_REGEX.test(leftPart.trim())) {
|
|
167
|
+
throw new Error(`Invalid CONTAINS argument: "${leftPart}". Expected format: table.column`);
|
|
168
|
+
}
|
|
169
|
+
if (!TABLE_COLUMN_REFERENCE_REGEX.test(rightPart.trim())) {
|
|
170
|
+
throw new Error(`Invalid CONTAINS argument: "${rightPart}". Expected format: table.column`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
// Try equality join: tableA.col = tableB.col
|
|
175
|
+
const equalsParts = joinSql.split('=');
|
|
176
|
+
if (equalsParts.length === 2) {
|
|
177
|
+
[leftPart, rightPart] = equalsParts;
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
throw new Error(`Invalid join SQL: ${joinSql}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const leftRef = parseTableColumnReference(leftPart);
|
|
184
|
+
const rightRef = parseTableColumnReference(rightPart);
|
|
185
|
+
return {
|
|
186
|
+
tables: [leftRef.tableName, rightRef.tableName],
|
|
187
|
+
conditions: [leftRef.columnName, rightRef.columnName],
|
|
188
|
+
};
|
|
189
|
+
}
|
|
97
190
|
function addEdge(table1, table2, joinOn, joinCondition) {
|
|
98
191
|
if (table1 === table2 ||
|
|
99
192
|
(directedGraph[table1] &&
|
|
@@ -110,25 +203,18 @@ const createDirectedGraph = (tableSchema, tableSchemaSqlMap) => {
|
|
|
110
203
|
/**
|
|
111
204
|
* Iterate through the table schema and add the edges to the directed graph.
|
|
112
205
|
* The edges are added based on the join conditions provided in the table schema.
|
|
113
|
-
* The SQL is
|
|
206
|
+
* The SQL is parsed to extract the tables and columns involved in the joins,
|
|
207
|
+
* supporting both '=' equality joins and CONTAINS(arg1, arg2) function syntax.
|
|
114
208
|
* The tables are then added as edges to the directed graph.
|
|
115
209
|
* Supports quoted identifiers for table names that contain dots (e.g., "table.name".column).
|
|
116
210
|
*/
|
|
117
211
|
tableSchema.forEach((schema) => {
|
|
118
212
|
var _a;
|
|
119
213
|
(_a = schema === null || schema === void 0 ? void 0 : schema.joins) === null || _a === void 0 ? void 0 : _a.forEach((join) => {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
if (parts.length !== 2) {
|
|
125
|
-
throw new Error(`Invalid join SQL: ${join.sql}`);
|
|
126
|
-
}
|
|
127
|
-
// Parse the table and column from each side of the join condition
|
|
128
|
-
const leftRef = parseTableColumnReference(parts[0]);
|
|
129
|
-
const rightRef = parseTableColumnReference(parts[1]);
|
|
130
|
-
const tables = [leftRef.tableName, rightRef.tableName];
|
|
131
|
-
const conditions = [leftRef.columnName, rightRef.columnName];
|
|
214
|
+
// Parse the table and column from each side of the join condition.
|
|
215
|
+
// Supports both equality joins (tableA.col = tableB.col) and
|
|
216
|
+
// CONTAINS-style joins (tableA.col contains tableB.col).
|
|
217
|
+
const { tables, conditions } = parseJoinSqlColumns(join.sql);
|
|
132
218
|
/**
|
|
133
219
|
* If the tables are the same, then the join is invalid.
|
|
134
220
|
*/
|
package/src/joins/joins.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"joins.js","sourceRoot":"","sources":["../../../../meerkat-core/src/joins/joins.ts"],"names":[],"mappings":";;;AAAA,0FAAoF;AACpF,oDAA+E;AAM/
|
|
1
|
+
{"version":3,"file":"joins.js","sourceRoot":"","sources":["../../../../meerkat-core/src/joins/joins.ts"],"names":[],"mappings":"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"}
|