@malloydata/malloy 0.0.126-dev240221165840 → 0.0.126
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 +1 -0
- package/dist/dialect/dialect.d.ts +1 -0
- package/dist/dialect/dialect_map.js +2 -0
- package/dist/dialect/functions/concat.js +2 -2
- package/dist/dialect/functions/length.js +1 -0
- package/dist/dialect/index.d.ts +1 -0
- package/dist/dialect/index.js +3 -1
- package/dist/dialect/snowflake/functions/chr.d.ts +2 -0
- package/dist/dialect/snowflake/functions/chr.js +36 -0
- package/dist/dialect/snowflake/functions/div.d.ts +2 -0
- package/dist/dialect/snowflake/functions/div.js +37 -0
- package/dist/dialect/snowflake/functions/index.d.ts +1 -0
- package/dist/dialect/snowflake/functions/index.js +28 -0
- package/dist/dialect/snowflake/functions/is_inf.d.ts +2 -0
- package/dist/dialect/snowflake/functions/is_inf.js +34 -0
- package/dist/dialect/snowflake/functions/is_nan.d.ts +2 -0
- package/dist/dialect/snowflake/functions/is_nan.js +33 -0
- package/dist/dialect/snowflake/functions/length.d.ts +3 -0
- package/dist/dialect/snowflake/functions/length.js +39 -0
- package/dist/dialect/snowflake/functions/log.d.ts +2 -0
- package/dist/dialect/snowflake/functions/log.js +37 -0
- package/dist/dialect/snowflake/functions/rand.d.ts +2 -0
- package/dist/dialect/snowflake/functions/rand.js +33 -0
- package/dist/dialect/snowflake/functions/regexp_extract.d.ts +2 -0
- package/dist/dialect/snowflake/functions/regexp_extract.js +35 -0
- package/dist/dialect/snowflake/functions/snowflake_functions.d.ts +1 -0
- package/dist/dialect/snowflake/functions/snowflake_functions.js +56 -0
- package/dist/dialect/snowflake/functions/starts_ends_with.d.ts +3 -0
- package/dist/dialect/snowflake/functions/starts_ends_with.js +43 -0
- package/dist/dialect/snowflake/functions/string_agg.d.ts +3 -0
- package/dist/dialect/snowflake/functions/string_agg.js +47 -0
- package/dist/dialect/snowflake/functions/strpos.d.ts +2 -0
- package/dist/dialect/snowflake/functions/strpos.js +35 -0
- package/dist/dialect/snowflake/functions/trunc.d.ts +2 -0
- package/dist/dialect/snowflake/functions/trunc.js +39 -0
- package/dist/dialect/snowflake/index.d.ts +1 -0
- package/dist/dialect/snowflake/index.js +40 -0
- package/dist/dialect/snowflake/snowflake.d.ts +62 -0
- package/dist/dialect/snowflake/snowflake.js +408 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +3 -2
- package/dist/malloy.d.ts +2 -0
- package/dist/malloy.js +7 -0
- package/dist/model/malloy_query.js +16 -11
- package/package.json +1 -1
|
@@ -562,7 +562,7 @@ class QueryField extends QueryNode {
|
|
|
562
562
|
throw new Error(`Join ${joinName} not found in result set`);
|
|
563
563
|
}
|
|
564
564
|
if (!join.leafiest || join.makeUniqueKey) {
|
|
565
|
-
func = 'COUNT(DISTINCT';
|
|
565
|
+
func = 'COUNT(DISTINCT ';
|
|
566
566
|
thing = struct.getDistinctKey().generateExpression(resultSet);
|
|
567
567
|
}
|
|
568
568
|
// const distinctKeySQL = this.generateDistinctKeyIfNecessary(
|
|
@@ -576,10 +576,10 @@ class QueryField extends QueryNode {
|
|
|
576
576
|
// }
|
|
577
577
|
// find the structDef and return the path to the field...
|
|
578
578
|
if (state.whereSQL) {
|
|
579
|
-
return `${func}
|
|
579
|
+
return `${func}CASE WHEN ${state.whereSQL} THEN ${thing} END)`;
|
|
580
580
|
}
|
|
581
581
|
else {
|
|
582
|
-
return `${func}
|
|
582
|
+
return `${func}${thing})`;
|
|
583
583
|
}
|
|
584
584
|
}
|
|
585
585
|
generateDialect(resultSet, context, expr, state) {
|
|
@@ -927,7 +927,7 @@ function sqlSumDistinct(dialect, sqlExp, sqlDistintKey) {
|
|
|
927
927
|
SUM(DISTINCT ${uniqueInt})
|
|
928
928
|
)`;
|
|
929
929
|
let ret = `(${sumSQL}/(${multiplier}*1.0))`;
|
|
930
|
-
ret = `CAST(${ret}
|
|
930
|
+
ret = `CAST(${ret} AS ${dialect.defaultNumberType})`;
|
|
931
931
|
return ret;
|
|
932
932
|
}
|
|
933
933
|
class FieldInstanceField {
|
|
@@ -1416,6 +1416,7 @@ class JoinInstance {
|
|
|
1416
1416
|
dialectFieldList.push({
|
|
1417
1417
|
type: f.type,
|
|
1418
1418
|
sqlExpression: (0, malloy_types_1.getIdentifier)(f),
|
|
1419
|
+
rawName: (0, malloy_types_1.getIdentifier)(f),
|
|
1419
1420
|
sqlOutputName: (0, malloy_types_1.getIdentifier)(f),
|
|
1420
1421
|
});
|
|
1421
1422
|
}
|
|
@@ -1953,7 +1954,7 @@ class QueryQuery extends QueryField {
|
|
|
1953
1954
|
const matrixOperation = structRelationship.matrixOperation.toUpperCase();
|
|
1954
1955
|
if (ji.makeUniqueKey) {
|
|
1955
1956
|
const passKeys = this.generateSQLPassthroughKeys(qs);
|
|
1956
|
-
structSQL = `(SELECT ${qs.dialect.sqlGenerateUUID()} as __distinct_key, x.* ${passKeys} FROM ${structSQL} as x)`;
|
|
1957
|
+
structSQL = `(SELECT ${qs.dialect.sqlGenerateUUID()} as ${qs.dialect.sqlMaybeQuoteIdentifier('__distinct_key')}, x.* ${passKeys} FROM ${structSQL} as x)`;
|
|
1957
1958
|
}
|
|
1958
1959
|
let onCondition = '';
|
|
1959
1960
|
if (qs.parent === undefined) {
|
|
@@ -2050,7 +2051,7 @@ class QueryQuery extends QueryField {
|
|
|
2050
2051
|
if (structRelationship.type === 'basetable') {
|
|
2051
2052
|
if (ji.makeUniqueKey) {
|
|
2052
2053
|
const passKeys = this.generateSQLPassthroughKeys(qs);
|
|
2053
|
-
structSQL = `(SELECT ${qs.dialect.sqlGenerateUUID()} as __distinct_key, x.* ${passKeys} FROM ${structSQL} as x)`;
|
|
2054
|
+
structSQL = `(SELECT ${qs.dialect.sqlGenerateUUID()} as ${qs.dialect.sqlMaybeQuoteIdentifier('__distinct_key')}, x.* ${passKeys} FROM ${structSQL} as x)`;
|
|
2054
2055
|
}
|
|
2055
2056
|
s += `FROM ${structSQL} as ${ji.alias}\n`;
|
|
2056
2057
|
}
|
|
@@ -2472,6 +2473,7 @@ class QueryQuery extends QueryField {
|
|
|
2472
2473
|
? field.f.fieldDef.type
|
|
2473
2474
|
: 'struct',
|
|
2474
2475
|
sqlExpression: this.parent.dialect.sqlMaybeQuoteIdentifier(`${name}__${resultStruct.groupSet}`),
|
|
2476
|
+
rawName: name,
|
|
2475
2477
|
sqlOutputName: sqlName,
|
|
2476
2478
|
});
|
|
2477
2479
|
}
|
|
@@ -2484,6 +2486,7 @@ class QueryQuery extends QueryField {
|
|
|
2484
2486
|
dialectFieldList.push({
|
|
2485
2487
|
type: field.type,
|
|
2486
2488
|
sqlExpression: field.f.generateExpression(resultStruct),
|
|
2489
|
+
rawName: name,
|
|
2487
2490
|
sqlOutputName: sqlName,
|
|
2488
2491
|
});
|
|
2489
2492
|
}
|
|
@@ -2664,6 +2667,7 @@ class QueryQueryIndexStage extends QueryQuery {
|
|
|
2664
2667
|
const fieldValueColumn = dialect.sqlMaybeQuoteIdentifier('fieldValue');
|
|
2665
2668
|
const fieldTypeColumn = dialect.sqlMaybeQuoteIdentifier('fieldType');
|
|
2666
2669
|
const fieldRangeColumn = dialect.sqlMaybeQuoteIdentifier('fieldRange');
|
|
2670
|
+
const weightColumn = dialect.sqlMaybeQuoteIdentifier('weight');
|
|
2667
2671
|
const measureName = this.firstSegment.weightMeasure;
|
|
2668
2672
|
if (measureName) {
|
|
2669
2673
|
measureSQL = this.rootResult
|
|
@@ -2703,7 +2707,7 @@ class QueryQueryIndexStage extends QueryQuery {
|
|
|
2703
2707
|
}
|
|
2704
2708
|
}
|
|
2705
2709
|
s += ` END as ${fieldValueColumn},\n`;
|
|
2706
|
-
s += ` ${measureSQL} as
|
|
2710
|
+
s += ` ${measureSQL} as ${weightColumn},\n`;
|
|
2707
2711
|
// just in case we don't have any field types, force the case statement to have at least one value.
|
|
2708
2712
|
s += " CASE group_set\n WHEN 99999 THEN ''";
|
|
2709
2713
|
for (let i = 0; i < fields.length; i++) {
|
|
@@ -2737,7 +2741,7 @@ class QueryQueryIndexStage extends QueryQuery {
|
|
|
2737
2741
|
${fieldPathColumn},
|
|
2738
2742
|
${fieldTypeColumn},
|
|
2739
2743
|
COALESCE(${fieldValueColumn}, ${fieldRangeColumn}) as ${fieldValueColumn},
|
|
2740
|
-
|
|
2744
|
+
${weightColumn}
|
|
2741
2745
|
FROM ${resultStage}\n`);
|
|
2742
2746
|
return this.resultStage;
|
|
2743
2747
|
}
|
|
@@ -3390,6 +3394,7 @@ class QueryModel {
|
|
|
3390
3394
|
const fieldPathColumn = struct.dialect.sqlMaybeQuoteIdentifier('fieldPath');
|
|
3391
3395
|
const fieldValueColumn = struct.dialect.sqlMaybeQuoteIdentifier('fieldValue');
|
|
3392
3396
|
const fieldTypeColumn = struct.dialect.sqlMaybeQuoteIdentifier('fieldType');
|
|
3397
|
+
const weightColumn = struct.dialect.sqlMaybeQuoteIdentifier('weight');
|
|
3393
3398
|
// if we've compiled the SQL before use it otherwise
|
|
3394
3399
|
let sqlPDT = this.exploreSearchSQLMap.get(explore);
|
|
3395
3400
|
if (sqlPDT === undefined) {
|
|
@@ -3401,13 +3406,13 @@ class QueryModel {
|
|
|
3401
3406
|
${fieldPathColumn},
|
|
3402
3407
|
${fieldValueColumn},
|
|
3403
3408
|
${fieldTypeColumn},
|
|
3404
|
-
|
|
3409
|
+
${weightColumn},
|
|
3405
3410
|
CASE WHEN lower(${fieldValueColumn}) LIKE lower(${generateSQLStringLiteral(searchValue + '%')}) THEN 1 ELSE 0 END as match_first
|
|
3406
3411
|
FROM ${await connection.manifestTemporaryTable(sqlPDT)}
|
|
3407
3412
|
WHERE lower(${fieldValueColumn}) LIKE lower(${generateSQLStringLiteral('%' + searchValue + '%')}) ${searchField !== undefined
|
|
3408
3413
|
? ` AND ${fieldNameColumn} = '` + searchField + "' \n"
|
|
3409
3414
|
: ''}
|
|
3410
|
-
ORDER BY CASE WHEN lower(${fieldValueColumn}) LIKE lower(${generateSQLStringLiteral(searchValue + '%')}) THEN 1 ELSE 0 END DESC,
|
|
3415
|
+
ORDER BY CASE WHEN lower(${fieldValueColumn}) LIKE lower(${generateSQLStringLiteral(searchValue + '%')}) THEN 1 ELSE 0 END DESC, ${weightColumn} DESC
|
|
3411
3416
|
LIMIT ${limit}
|
|
3412
3417
|
`;
|
|
3413
3418
|
if (struct.dialect.hasFinalStage) {
|
|
@@ -3416,7 +3421,7 @@ class QueryModel {
|
|
|
3416
3421
|
fieldPathColumn,
|
|
3417
3422
|
fieldValueColumn,
|
|
3418
3423
|
fieldTypeColumn,
|
|
3419
|
-
|
|
3424
|
+
weightColumn,
|
|
3420
3425
|
'match_first',
|
|
3421
3426
|
])}`;
|
|
3422
3427
|
}
|