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> = {
2323run :async function ( actionData , dataSourceConfig ) :Promise < any > {
2424const { databaseFile, options} = dataSourceConfig ;
2525const 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
2829if ( actionData . actionName === "Query" ) {
2930try {
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 ) {
3436throw 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 ;