mirror of
https://github.com/Kaelio/ktx.git
synced 2026-06-13 08:15:14 +02:00
42 lines
2 KiB
TypeScript
42 lines
2 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { KtxSnowflakeDialect } from '../../../src/connectors/snowflake/dialect.js';
|
|
|
|
describe('KtxSnowflakeDialect', () => {
|
|
const dialect = new KtxSnowflakeDialect();
|
|
|
|
it('quotes identifiers and formats database.schema.table names', () => {
|
|
expect(dialect.quoteIdentifier('order"items')).toBe('"order""items"');
|
|
expect(dialect.formatTableName({ catalog: 'ANALYTICS', db: 'PUBLIC', name: 'ORDERS' })).toBe(
|
|
'"ANALYTICS"."PUBLIC"."ORDERS"',
|
|
);
|
|
expect(dialect.formatTableName({ db: 'PUBLIC', name: 'ORDERS' })).toBe('"PUBLIC"."ORDERS"');
|
|
expect(dialect.formatTableName({ name: 'ORDERS' })).toBe('"ORDERS"');
|
|
});
|
|
|
|
it('maps native Snowflake types to scan dimensions', () => {
|
|
expect(dialect.mapDataType('NUMBER(38,0)')).toBe('NUMBER(38,0)');
|
|
expect(dialect.mapToDimensionType('TIMESTAMP_NTZ')).toBe('time');
|
|
expect(dialect.mapToDimensionType('NUMBER(38,0)')).toBe('number');
|
|
expect(dialect.mapToDimensionType('BOOLEAN')).toBe('boolean');
|
|
expect(dialect.mapToDimensionType('VARIANT')).toBe('string');
|
|
});
|
|
|
|
it('generates sampling and dictionary SQL', () => {
|
|
expect(dialect.generateSampleQuery('"PUBLIC"."ORDERS"', 5, ['ID', 'STATUS'])).toBe(
|
|
'SELECT "ID", "STATUS" FROM "PUBLIC"."ORDERS" SAMPLE ROW (5 ROWS)',
|
|
);
|
|
expect(dialect.generateColumnSampleQuery('"PUBLIC"."ORDERS"', 'STATUS', 10)).toBe(
|
|
'SELECT "STATUS" FROM "PUBLIC"."ORDERS" WHERE "STATUS" IS NOT NULL AND TRIM(CAST("STATUS" AS STRING)) != \'\' LIMIT 10',
|
|
);
|
|
expect(dialect.generateCardinalitySampleQuery('"PUBLIC"."ORDERS"', '"STATUS"', 100)).toContain(
|
|
'SELECT COUNT(DISTINCT val) AS cardinality',
|
|
);
|
|
expect(dialect.generateDistinctValuesQuery('"PUBLIC"."ORDERS"', '"STATUS"', 20)).toContain(
|
|
'SELECT DISTINCT "STATUS"::VARCHAR AS val',
|
|
);
|
|
});
|
|
|
|
it('keeps unsupported statistics explicit', () => {
|
|
expect(dialect.generateColumnStatisticsQuery('PUBLIC', 'ORDERS')).toBeNull();
|
|
});
|
|
});
|