Skip to content

Commit 613b35a

Browse files
committed
api for appender & other tweaks
1 parent be1c3e7 commit 613b35a

File tree

7 files changed

+131
-26
lines changed

7 files changed

+131
-26
lines changed

api/src/DuckDBAppender.ts

Lines changed: 88 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,100 @@
11
import duckdb from '@duckdb/node-bindings';
2+
import { DuckDBType } from './DuckDBType';
3+
import { DuckDBLogicalType } from './DuckDBLogicalType';
4+
import { Date_, Interval, Time, Timestamp } from './DuckDBValue';
5+
import { DuckDBDataChunk } from './DuckDBDataChunk';
26

37
export class DuckDBAppender {
48
private readonly appender: duckdb.Appender;
59
constructor(appender: duckdb.Appender) {
610
this.appender = appender;
711
}
8-
public async dispose() {
12+
public dispose() {
913
duckdb.appender_destroy(this.appender);
1014
}
11-
public async flush() {
15+
public close() {
16+
duckdb.appender_close(this.appender);
17+
}
18+
public flush() {
1219
duckdb.appender_flush(this.appender);
1320
}
14-
// TODO
21+
public get columnCount(): number {
22+
return duckdb.appender_column_count(this.appender);
23+
}
24+
public columnType(columnIndex: number): DuckDBType {
25+
return DuckDBLogicalType.consumeAsType(duckdb.appender_column_type(this.appender, columnIndex));
26+
}
27+
public endRow() {
28+
duckdb.appender_end_row(this.appender);
29+
}
30+
public appendBoolean(value: boolean) {
31+
duckdb.append_bool(this.appender, value);
32+
}
33+
public appendTinyInt(value: number) {
34+
duckdb.append_int8(this.appender, value);
35+
}
36+
public appendSmallInt(value: number) {
37+
duckdb.append_int16(this.appender, value);
38+
}
39+
public appendInteger(value: number) {
40+
duckdb.append_int32(this.appender, value);
41+
}
42+
public appendBigInt(value: bigint) {
43+
duckdb.append_int64(this.appender, value);
44+
}
45+
public appendHugeInt(value: bigint) {
46+
duckdb.append_hugeint(this.appender, value);
47+
}
48+
public appendUTinyInt(value: number) {
49+
duckdb.append_uint8(this.appender, value);
50+
}
51+
public appendUSmallInt(value: number) {
52+
duckdb.append_uint16(this.appender, value);
53+
}
54+
public appendUInteger(value: number) {
55+
duckdb.append_uint32(this.appender, value);
56+
}
57+
public appendUBigInt(value: bigint) {
58+
duckdb.append_uint64(this.appender, value);
59+
}
60+
public appendUHugeInt(value: bigint) {
61+
duckdb.append_uhugeint(this.appender, value);
62+
}
63+
// TODO: append DECIMAL?
64+
public appendFloat(value: number) {
65+
duckdb.append_float(this.appender, value);
66+
}
67+
public appendDouble(value: number) {
68+
duckdb.append_double(this.appender, value);
69+
}
70+
public appendDate(value: Date_) {
71+
duckdb.append_date(this.appender, value);
72+
}
73+
public appendTime(value: Time) {
74+
duckdb.append_time(this.appender, value);
75+
}
76+
public appendTimestamp(value: Timestamp) {
77+
duckdb.append_timestamp(this.appender, value);
78+
}
79+
// TODO: append TIMESTAMPS_S/_MS/_NS?
80+
// TODO: append TIME_TZ/TIMESTAMP_TZ?
81+
public appendInterval(value: Interval) {
82+
duckdb.append_interval(this.appender, value);
83+
}
84+
public appendVarchar(value: string) {
85+
duckdb.append_varchar(this.appender, value);
86+
}
87+
public appendBlob(value: Uint8Array) {
88+
duckdb.append_blob(this.appender, value);
89+
}
90+
// TODO: append ENUM?
91+
// TODO: append nested types? (ARRAY, LIST, STRUCT, MAP, UNION)
92+
// TODO: append UUID?
93+
// TODO: append BIT?
94+
public appendNull() {
95+
duckdb.append_null(this.appender);
96+
}
97+
public appendDataChunk(dataChunk: DuckDBDataChunk) {
98+
duckdb.append_data_chunk(this.appender, dataChunk.chunk);
99+
}
15100
}

api/src/DuckDBDataChunk.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import duckdb from '@duckdb/node-bindings';
22
import { DuckDBVector } from './DuckDBVector';
33

44
export class DuckDBDataChunk {
5-
private readonly chunk: duckdb.DataChunk;
5+
public readonly chunk: duckdb.DataChunk;
66
constructor(chunk: duckdb.DataChunk) {
77
this.chunk = chunk;
88
}

api/src/DuckDBPreparedStatement.ts

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,8 @@ import duckdb from '@duckdb/node-bindings';
22
import { DuckDBPendingResult } from './DuckDBPendingResult';
33
import { DuckDBResult } from './DuckDBResult';
44
import { DuckDBTypeId } from './DuckDBTypeId';
5-
6-
type Date_ = duckdb.Date_;
7-
type Decimal = duckdb.Decimal;
8-
type Interval = duckdb.Interval;
9-
type Time = duckdb.Time;
10-
type Timestamp = duckdb.Timestamp;
11-
12-
type StatementType = duckdb.StatementType;
13-
14-
export type { Date_, Decimal, Interval, Time, Timestamp };
5+
import { Date_, Decimal, Interval, Time, Timestamp } from './DuckDBValue';
6+
import { StatementType } from './enums';
157

168
export class DuckDBPreparedStatement {
179
private readonly prepared_statement: duckdb.PreparedStatement;
@@ -60,12 +52,6 @@ export class DuckDBPreparedStatement {
6052
public bindHugeInt(parameterIndex: number, value: bigint) {
6153
duckdb.bind_hugeint(this.prepared_statement, parameterIndex, value);
6254
}
63-
public bindUHugeInt(parameterIndex: number, value: bigint) {
64-
duckdb.bind_uhugeint(this.prepared_statement, parameterIndex, value);
65-
}
66-
public bindDecimal(parameterIndex: number, value: Decimal) {
67-
duckdb.bind_decimal(this.prepared_statement, parameterIndex, value);
68-
}
6955
public bindUTinyInt(parameterIndex: number, value: number) {
7056
duckdb.bind_uint8(this.prepared_statement, parameterIndex, value);
7157
}
@@ -78,6 +64,12 @@ export class DuckDBPreparedStatement {
7864
public bindUBigInt(parameterIndex: number, value: bigint) {
7965
duckdb.bind_uint64(this.prepared_statement, parameterIndex, value);
8066
}
67+
public bindUHugeInt(parameterIndex: number, value: bigint) {
68+
duckdb.bind_uhugeint(this.prepared_statement, parameterIndex, value);
69+
}
70+
public bindDecimal(parameterIndex: number, value: Decimal) {
71+
duckdb.bind_decimal(this.prepared_statement, parameterIndex, value);
72+
}
8173
public bindFloat(parameterIndex: number, value: number) {
8274
duckdb.bind_float(this.prepared_statement, parameterIndex, value);
8375
}
@@ -94,6 +86,7 @@ export class DuckDBPreparedStatement {
9486
duckdb.bind_timestamp(this.prepared_statement, parameterIndex, value);
9587
}
9688
// TODO: bind TIMESTAMPS_S/_MS/_NS?
89+
// TODO: bind TIME_TZ/TIMESTAMP_TZ?
9790
public bindInterval(parameterIndex: number, value: Interval) {
9891
duckdb.bind_interval(this.prepared_statement, parameterIndex, value);
9992
}
@@ -104,7 +97,7 @@ export class DuckDBPreparedStatement {
10497
duckdb.bind_blob(this.prepared_statement, parameterIndex, value);
10598
}
10699
// TODO: bind ENUM?
107-
// TODO: bind nested types? (LIST, STRUCT, MAP, UNION) (using bindValue?)
100+
// TODO: bind nested types? (ARRAY, LIST, STRUCT, MAP, UNION) (using bindValue?)
108101
// TODO: bind UUID?
109102
// TODO: bind BIT?
110103
public bindNull(parameterIndex: number) {

api/src/DuckDBResult.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,7 @@ import { DuckDBDataChunk } from './DuckDBDataChunk';
33
import { DuckDBLogicalType } from './DuckDBLogicalType';
44
import { DuckDBType } from './DuckDBType';
55
import { DuckDBTypeId } from './DuckDBTypeId';
6-
7-
type ResultReturnType = duckdb.ResultType;
8-
type StatementType = duckdb.StatementType;
9-
10-
export type { ResultReturnType, StatementType };
6+
import { ResultReturnType, StatementType } from './enums';
117

128
export class DuckDBResult {
139
private readonly result: duckdb.Result;

api/src/DuckDBValue.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import duckdb from '@duckdb/node-bindings';
2+
3+
type Date_ = duckdb.Date_;
4+
type Decimal = duckdb.Decimal;
5+
type Interval = duckdb.Interval;
6+
type Time = duckdb.Time;
7+
type Timestamp = duckdb.Timestamp;
8+
9+
export type { Date_, Decimal, Interval, Time, Timestamp };
10+
11+
export type DuckDBValue =
12+
| null
13+
| boolean
14+
| number
15+
| bigint
16+
| string
17+
| Uint8Array
18+
| Date_
19+
| Decimal
20+
| Interval
21+
| Time
22+
| Timestamp
23+
;

api/src/enums.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import duckdb from '@duckdb/node-bindings';
2+
3+
type ResultReturnType = duckdb.ResultType;
4+
type StatementType = duckdb.StatementType;
5+
6+
export type { ResultReturnType, StatementType };

api/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,7 @@ export * from './DuckDBPreparedStatement';
1010
export * from './DuckDBResult';
1111
export * from './DuckDBType';
1212
export * from './DuckDBTypeId';
13+
export * from './DuckDBValue';
1314
export * from './DuckDBVector';
15+
export * from './enums';
1416
export * from './version';

0 commit comments

Comments
 (0)