@visactor/vquery 0.1.50 → 0.2.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.
@@ -1,4 +1,4 @@
1
- import { DatasetColumn, QueryDSL } from '../types';
1
+ import { DatasetColumn, DatasetSource, QueryDSL } from '../types';
2
2
  import { DuckDB } from '../db/duckDb';
3
3
  import { IndexedDB } from '../db/indexedDb';
4
4
  export declare class Dataset {
@@ -6,8 +6,8 @@ export declare class Dataset {
6
6
  private indexedDB;
7
7
  private _datasetId;
8
8
  constructor(duckDB: DuckDB, indexedDB: IndexedDB, datasetId: string);
9
- init(temporaryColumns?: DatasetColumn[]): Promise<void>;
10
- createOrReplaceView(columns?: DatasetColumn[]): Promise<void>;
9
+ init(temporaryColumns?: DatasetColumn[], temporaryDatasetSource?: DatasetSource): Promise<void>;
10
+ createOrReplaceView(columns: DatasetColumn[], datasetSource: DatasetSource): Promise<void>;
11
11
  query<T extends Record<string, number | string>>(queryDSL: QueryDSL<T>): Promise<{
12
12
  performance: {
13
13
  startAt: string;
package/dist/index.cjs CHANGED
@@ -185,13 +185,14 @@ class Dataset {
185
185
  this.indexedDB = indexedDB1;
186
186
  this._datasetId = datasetId;
187
187
  }
188
- async init(temporaryColumns = []) {
188
+ async init(temporaryColumns, temporaryDatasetSource) {
189
189
  const datasetInfo = await this.indexedDB.readDataset(this._datasetId);
190
190
  if (!datasetInfo) throw new Error(`Dataset ${this._datasetId} not found`);
191
- const columns = temporaryColumns.length > 0 ? temporaryColumns : datasetInfo.datasetSchema.columns;
192
- if (columns.length > 0) await this.createOrReplaceView(columns);
191
+ const columns = temporaryColumns ? temporaryColumns : datasetInfo.datasetSchema.columns;
192
+ const datasetSource = temporaryDatasetSource || datasetInfo.datasetSource;
193
+ if (columns.length > 0 && datasetSource) await this.createOrReplaceView(columns, datasetSource);
193
194
  }
194
- async createOrReplaceView(columns = []) {
195
+ async createOrReplaceView(columns, datasetSource) {
195
196
  const readFunctionMap = {
196
197
  csv: 'read_csv_auto',
197
198
  json: 'read_json_auto',
@@ -205,13 +206,10 @@ class Dataset {
205
206
  datetime: 'TIMESTAMP',
206
207
  timestamp: 'TIMESTAMP'
207
208
  };
208
- const datasetInfo = await this.indexedDB.readDataset(this._datasetId);
209
- if (!datasetInfo) throw new Error(`Dataset ${this._datasetId} not found`);
210
- const { datasetSource: dataSource } = datasetInfo;
211
- if (dataSource) {
212
- const readFunction = readFunctionMap[dataSource.type];
213
- if (!readFunction) throw new Error(`Unsupported dataSource type: ${dataSource.type}`);
214
- await this.duckDB.writeFile(this._datasetId, dataSource.blob);
209
+ if (datasetSource) {
210
+ const readFunction = readFunctionMap[datasetSource.type];
211
+ if (!readFunction) throw new Error(`Unsupported dataSource type: ${datasetSource.type}`);
212
+ await this.duckDB.writeFile(this._datasetId, datasetSource.blob);
215
213
  const columnsStruct = `{${columns.map((c)=>`'${c.name}': '${dataTypeMap[c.type] || 'VARCHAR'}'`).join(', ')}}`;
216
214
  const columnNames = columns.map((c)=>`"${c.name}"`).join(', ');
217
215
  const createViewSql = `CREATE OR REPLACE VIEW "${this._datasetId}" AS SELECT ${columnNames} FROM ${readFunction}('${this._datasetId}', columns=${columnsStruct})`;
@@ -536,11 +534,12 @@ class VQuery {
536
534
  await this.checkDatasetExists(datasetId);
537
535
  await this.indexedDB.deleteDataset(datasetId);
538
536
  }
539
- async connectDataset(datasetId, temporaryColumns = []) {
537
+ async connectDataset(datasetId, temporaryColumns, temporaryRawDatasetSource) {
540
538
  await this.checkInitialized();
541
539
  await this.checkDatasetExists(datasetId);
542
540
  const dataset = new Dataset(this.duckDB, this.indexedDB, datasetId);
543
- await dataset.init(temporaryColumns);
541
+ const temporaryDatasetSource = temporaryRawDatasetSource ? await DatasetSourceBuilder.from(temporaryRawDatasetSource).build() : void 0;
542
+ await dataset.init(temporaryColumns, temporaryDatasetSource);
544
543
  return dataset;
545
544
  }
546
545
  async hasDataset(datasetId) {
package/dist/index.js CHANGED
@@ -150,13 +150,14 @@ class Dataset {
150
150
  this.indexedDB = indexedDB1;
151
151
  this._datasetId = datasetId;
152
152
  }
153
- async init(temporaryColumns = []) {
153
+ async init(temporaryColumns, temporaryDatasetSource) {
154
154
  const datasetInfo = await this.indexedDB.readDataset(this._datasetId);
155
155
  if (!datasetInfo) throw new Error(`Dataset ${this._datasetId} not found`);
156
- const columns = temporaryColumns.length > 0 ? temporaryColumns : datasetInfo.datasetSchema.columns;
157
- if (columns.length > 0) await this.createOrReplaceView(columns);
156
+ const columns = temporaryColumns ? temporaryColumns : datasetInfo.datasetSchema.columns;
157
+ const datasetSource = temporaryDatasetSource || datasetInfo.datasetSource;
158
+ if (columns.length > 0 && datasetSource) await this.createOrReplaceView(columns, datasetSource);
158
159
  }
159
- async createOrReplaceView(columns = []) {
160
+ async createOrReplaceView(columns, datasetSource) {
160
161
  const readFunctionMap = {
161
162
  csv: 'read_csv_auto',
162
163
  json: 'read_json_auto',
@@ -170,13 +171,10 @@ class Dataset {
170
171
  datetime: 'TIMESTAMP',
171
172
  timestamp: 'TIMESTAMP'
172
173
  };
173
- const datasetInfo = await this.indexedDB.readDataset(this._datasetId);
174
- if (!datasetInfo) throw new Error(`Dataset ${this._datasetId} not found`);
175
- const { datasetSource: dataSource } = datasetInfo;
176
- if (dataSource) {
177
- const readFunction = readFunctionMap[dataSource.type];
178
- if (!readFunction) throw new Error(`Unsupported dataSource type: ${dataSource.type}`);
179
- await this.duckDB.writeFile(this._datasetId, dataSource.blob);
174
+ if (datasetSource) {
175
+ const readFunction = readFunctionMap[datasetSource.type];
176
+ if (!readFunction) throw new Error(`Unsupported dataSource type: ${datasetSource.type}`);
177
+ await this.duckDB.writeFile(this._datasetId, datasetSource.blob);
180
178
  const columnsStruct = `{${columns.map((c)=>`'${c.name}': '${dataTypeMap[c.type] || 'VARCHAR'}'`).join(', ')}}`;
181
179
  const columnNames = columns.map((c)=>`"${c.name}"`).join(', ');
182
180
  const createViewSql = `CREATE OR REPLACE VIEW "${this._datasetId}" AS SELECT ${columnNames} FROM ${readFunction}('${this._datasetId}', columns=${columnsStruct})`;
@@ -500,11 +498,12 @@ class VQuery {
500
498
  await this.checkDatasetExists(datasetId);
501
499
  await this.indexedDB.deleteDataset(datasetId);
502
500
  }
503
- async connectDataset(datasetId, temporaryColumns = []) {
501
+ async connectDataset(datasetId, temporaryColumns, temporaryRawDatasetSource) {
504
502
  await this.checkInitialized();
505
503
  await this.checkDatasetExists(datasetId);
506
504
  const dataset = new Dataset(this.duckDB, this.indexedDB, datasetId);
507
- await dataset.init(temporaryColumns);
505
+ const temporaryDatasetSource = temporaryRawDatasetSource ? await DatasetSourceBuilder.from(temporaryRawDatasetSource).build() : void 0;
506
+ await dataset.init(temporaryColumns, temporaryDatasetSource);
508
507
  return dataset;
509
508
  }
510
509
  async hasDataset(datasetId) {
package/dist/vquery.d.ts CHANGED
@@ -10,7 +10,7 @@ export declare class VQuery {
10
10
  createDataset(datasetId: string, columns?: DatasetColumn[], rawDatasetSource?: RawDatasetSource): Promise<void>;
11
11
  updateDatasetSource(datasetId: string, columns?: DatasetColumn[], rawDatasetSource?: RawDatasetSource): Promise<void>;
12
12
  dropDataset(datasetId: string): Promise<void>;
13
- connectDataset(datasetId: string, temporaryColumns?: DatasetColumn[]): Promise<Dataset>;
13
+ connectDataset(datasetId: string, temporaryColumns?: DatasetColumn[], temporaryRawDatasetSource?: RawDatasetSource): Promise<Dataset>;
14
14
  hasDataset(datasetId: string): Promise<boolean>;
15
15
  listDatasets(): Promise<{
16
16
  datasetId: string;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visactor/vquery",
3
- "version": "0.1.50",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {