From 519674290d71a220f91b93948feac4b8f39bf5c2 Mon Sep 17 00:00:00 2001 From: Pavel Grivachev Date: Thu, 10 Aug 2023 21:41:42 +0200 Subject: [PATCH] update zetasql (#1129) --- e2e/projects/test-fixture/models/new.sql | 13 ---------- e2e/projects/test-fixture/models/users.sql | 11 --------- server/package-lock.json | 28 +++++++++++----------- server/package.json | 4 ++-- server/src/ZetaSqlApi.ts | 14 +++++------ 5 files changed, 22 insertions(+), 48 deletions(-) delete mode 100644 e2e/projects/test-fixture/models/new.sql delete mode 100644 e2e/projects/test-fixture/models/users.sql diff --git a/e2e/projects/test-fixture/models/new.sql b/e2e/projects/test-fixture/models/new.sql deleted file mode 100644 index 133b746b..00000000 --- a/e2e/projects/test-fixture/models/new.sql +++ /dev/null @@ -1,13 +0,0 @@ -{% call set_sql_header(config) %} -CREATE TEMP FUNCTION Foo(x INT64, y INT64, arr ARRAY, s STRUCT) -- typo here, should be 'stRing' -RETURNS FLOAT64 -AS ( - (cast(x as int64) + 4) / y -); -{%- endcall %} - - -SELECT - val, Foo(val, 2, ['a'], STRUCT('h', 'b')) -FROM - UNNEST([2,3,5,8]) AS val; \ No newline at end of file diff --git a/e2e/projects/test-fixture/models/users.sql b/e2e/projects/test-fixture/models/users.sql deleted file mode 100644 index 8033811b..00000000 --- a/e2e/projects/test-fixture/models/users.sql +++ /dev/null @@ -1,11 +0,0 @@ -WITH raw_data AS ( - SELECT 5 AS x, 100 AS total - UNION ALL - SELECT 20, 200 - UNION ALL - SELECT 50, 500 -) -SELECT x, total, - x / (1.0 * total) AS probability, - ROUND(100 * probability, 1) AS pct -FROM raw_data; diff --git a/server/package-lock.json b/server/package-lock.json index d896816d..e795292c 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -8,8 +8,8 @@ "name": "dbt-language-server", "version": "0.0.1", "dependencies": { - "@fivetrandevelopers/zetasql": "^1.12.0", - "@fivetrandevelopers/zetasql-snowflake": "^0.8.0", + "@fivetrandevelopers/zetasql": "^1.13.0", + "@fivetrandevelopers/zetasql-snowflake": "^0.9.0", "@google-cloud/bigquery": "^7.1.1", "async-retry": "^1.3.3", "axios": "^1.4.0", @@ -206,18 +206,18 @@ } }, "node_modules/@fivetrandevelopers/zetasql": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@fivetrandevelopers/zetasql/-/zetasql-1.12.0.tgz", - "integrity": "sha512-51aQpw6yZW7nykOWmcFaQ+Ab29kLZtE+E+UWKMxHNWAp9lw7P7cmGj4I1mkRu6MPLGozjqfjxdkmqTbvTFLXoQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@fivetrandevelopers/zetasql/-/zetasql-1.13.0.tgz", + "integrity": "sha512-yX9Apa968np2Tc+Hrf4Bf6Gz77kQVLIDLaNwovM91VBwyDTDF1C6oglUqmlU6Fe5/TVCExsnIueWiPahrYEITQ==", "dependencies": { "@grpc/grpc-js": "^1.8.13", "@grpc/proto-loader": "0.7.6" } }, "node_modules/@fivetrandevelopers/zetasql-snowflake": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@fivetrandevelopers/zetasql-snowflake/-/zetasql-snowflake-0.8.0.tgz", - "integrity": "sha512-YTw08+K+e7kiPK3ZrKUhcXdT3EzjlM5jnLB8dY8W6X31gwj7jdqoBDDFOeTK7q024qB1njagaVr1nzbwe04lWQ==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@fivetrandevelopers/zetasql-snowflake/-/zetasql-snowflake-0.9.0.tgz", + "integrity": "sha512-Z0IJhTDW50/tCEi5KRUntDUeeIXRpp2lo4jrHVd3YTZX7IRHi5t45umljIKmKltoUTmmT+dzW1kFoksbOevo8Q==", "dependencies": { "@grpc/grpc-js": "^1.8.13", "@grpc/proto-loader": "0.7.6" @@ -4334,18 +4334,18 @@ } }, "@fivetrandevelopers/zetasql": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@fivetrandevelopers/zetasql/-/zetasql-1.12.0.tgz", - "integrity": "sha512-51aQpw6yZW7nykOWmcFaQ+Ab29kLZtE+E+UWKMxHNWAp9lw7P7cmGj4I1mkRu6MPLGozjqfjxdkmqTbvTFLXoQ==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/@fivetrandevelopers/zetasql/-/zetasql-1.13.0.tgz", + "integrity": "sha512-yX9Apa968np2Tc+Hrf4Bf6Gz77kQVLIDLaNwovM91VBwyDTDF1C6oglUqmlU6Fe5/TVCExsnIueWiPahrYEITQ==", "requires": { "@grpc/grpc-js": "^1.8.13", "@grpc/proto-loader": "0.7.6" } }, "@fivetrandevelopers/zetasql-snowflake": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@fivetrandevelopers/zetasql-snowflake/-/zetasql-snowflake-0.8.0.tgz", - "integrity": "sha512-YTw08+K+e7kiPK3ZrKUhcXdT3EzjlM5jnLB8dY8W6X31gwj7jdqoBDDFOeTK7q024qB1njagaVr1nzbwe04lWQ==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@fivetrandevelopers/zetasql-snowflake/-/zetasql-snowflake-0.9.0.tgz", + "integrity": "sha512-Z0IJhTDW50/tCEi5KRUntDUeeIXRpp2lo4jrHVd3YTZX7IRHi5t45umljIKmKltoUTmmT+dzW1kFoksbOevo8Q==", "requires": { "@grpc/grpc-js": "^1.8.13", "@grpc/proto-loader": "0.7.6" diff --git a/server/package.json b/server/package.json index 89c0f251..c1a60058 100644 --- a/server/package.json +++ b/server/package.json @@ -5,8 +5,8 @@ "node": "*" }, "dependencies": { - "@fivetrandevelopers/zetasql": "^1.12.0", - "@fivetrandevelopers/zetasql-snowflake": "^0.8.0", + "@fivetrandevelopers/zetasql": "^1.13.0", + "@fivetrandevelopers/zetasql-snowflake": "^0.9.0", "@google-cloud/bigquery": "^7.1.1", "async-retry": "^1.3.3", "axios": "^1.4.0", diff --git a/server/src/ZetaSqlApi.ts b/server/src/ZetaSqlApi.ts index 2c534c8a..80792d5a 100644 --- a/server/src/ZetaSqlApi.ts +++ b/server/src/ZetaSqlApi.ts @@ -1,5 +1,5 @@ import { TypeKind as SnowflakeTypeKind } from '@fivetrandevelopers/zetasql-snowflake/lib/index'; -import { TypeKind } from '@fivetrandevelopers/zetasql/lib/index'; +import { AnalyzeRequest, TypeKind } from '@fivetrandevelopers/zetasql/lib/index'; import { LanguageFeature } from '@fivetrandevelopers/zetasql/lib/types/zetasql/LanguageFeature'; import { LanguageOptionsProto } from '@fivetrandevelopers/zetasql/lib/types/zetasql/LanguageOptionsProto'; import { LanguageVersion } from '@fivetrandevelopers/zetasql/lib/types/zetasql/LanguageVersion'; @@ -68,10 +68,11 @@ export class ZetaSqlApi { this.zetaSql.terminateServer(); } - async analyze(request: import('@fivetrandevelopers/zetasql/lib/index').AnalyzeRequest): Promise { + async analyze(request: AnalyzeRequest): Promise { this.assertZetaSqlIsDefined(this.zetaSql); - const result = await this.zetaSql.ZetaSQLClient.getInstance().analyze(request); + /* eslint-disable @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any */ + const result = await this.zetaSql.ZetaSQLClient.getInstance().analyze(request as any); return result as AnalyzeResponse__Output | undefined; // TODO: Snowflake response is a bit different } @@ -108,6 +109,7 @@ export class ZetaSqlApi { options.enableLanguageFeature(LanguageFeature.FEATURE_JSON_VALUE_EXTRACTION_FUNCTIONS); options.enableLanguageFeature(LanguageFeature.FEATURE_INTERVAL_TYPE); options.enableLanguageFeature(LanguageFeature.FEATURE_CBRT_FUNCTIONS); + options.enableLanguageFeature(LanguageFeature.FEATURE_V_1_4_GROUPING_SETS); // https://github.com/google/zetasql/issues/115#issuecomment-1210881670 options.options.reservedKeywords = ['QUALIFY']; this.languageOptions = options.serialize() as LanguageOptionsProto; // TODO: Snowflake settings are a bit different @@ -125,11 +127,7 @@ export class ZetaSqlApi { createType(newColumn: ColumnDefinition): TypeProto { const lowerCaseType = newColumn.type.toLowerCase(); - let typeKind = this.zetaSql?.TypeFactory.SIMPLE_TYPE_KIND_NAMES.get(lowerCaseType) as TypeKind; // TODO: Snowflake TypeKind has more values - if (!typeKind && ['timestamp_tz', 'timestamp_ltz', 'timestamp_ntz'].includes(lowerCaseType)) { - // TODO: add to Snowflake npm - typeKind = TypeKind.TYPE_TIMESTAMP; - } + const typeKind = this.zetaSql?.TypeFactory.SIMPLE_TYPE_KIND_NAMES.get(lowerCaseType) as TypeKind; let resultType: TypeProto; if (typeKind) { resultType = {