11import { DataSourcePlugin } from "lowcoder-sdk/dataSource" ;
22import dataSourceConfig , { DataSourceDataType } from "./dataSourceConfig" ;
33import queryConfig , { ActionDataType } from "./queryConfig" ;
4- import { Database } from "duckdb-async " ;
4+ import { DuckDBInstance } from "@ duckdb/node-api " ;
55import { ServiceError } from "../../common/error" ;
66
77// Helper function to handle BigInt serialization
@@ -23,20 +23,22 @@ const duckdbPlugin: DataSourcePlugin<ActionDataType, DataSourceDataType> = {
2323 run : async function ( actionData , dataSourceConfig ) : Promise < any > {
2424 const { databaseFile, options } = dataSourceConfig ;
2525 const parsedOptions = JSON . parse ( options ) ;
26- const db = await Database . create ( databaseFile , parsedOptions ) ;
26+ const instance = await DuckDBInstance . create ( databaseFile , parsedOptions ) ;
27+ const db = await instance . connect ( ) ;
2728
2829 if ( actionData . actionName === "Query" ) {
2930 try {
30- const result = await db . all ( actionData . queryString ) ;
31+ const result = await db . runAndReadAll ( actionData . queryString ) ;
32+ const data = await result . getRows ( ) ;
3133 // Apply BigInt serialization to each row
32- return result . map ( serializeBigInts ) ;
34+ return data . map ( serializeBigInts ) ;
3335 } catch ( error ) {
3436 throw new ServiceError ( ( error as Error ) . message ) ;
3537 } finally {
36- await db . close ( ) ;
38+ await db . closeSync ( ) ;
3739 }
3840 }
3941 } ,
4042} ;
4143
42- export default duckdbPlugin ;
44+ export default duckdbPlugin ;
0 commit comments