Skip to content

Commit 08b0892

Browse files
authored
Merge pull request #40 from duckdb/jray/values-to-string
change nested value structure; add toString to all values
2 parents 7f15435 + 47ee8de commit 08b0892

25 files changed

+1113
-459
lines changed

api/src/DuckDBType.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,69 +23,89 @@ export class DuckDBTinyIntType extends BaseDuckDBType<DuckDBTypeId.TINYINT> {
2323
super(DuckDBTypeId.TINYINT);
2424
}
2525
public static readonly instance = new DuckDBTinyIntType();
26+
public static readonly Max = 2 ** 7 - 1;
27+
public static readonly Min = -(2 ** 7);
2628
}
2729

2830
export class DuckDBSmallIntType extends BaseDuckDBType<DuckDBTypeId.SMALLINT> {
2931
private constructor() {
3032
super(DuckDBTypeId.SMALLINT);
3133
}
3234
public static readonly instance = new DuckDBSmallIntType();
35+
public static readonly Max = 2 ** 15 - 1;
36+
public static readonly Min = -(2 ** 15);
3337
}
3438

3539
export class DuckDBIntegerType extends BaseDuckDBType<DuckDBTypeId.INTEGER> {
3640
private constructor() {
3741
super(DuckDBTypeId.INTEGER);
3842
}
3943
public static readonly instance = new DuckDBIntegerType();
44+
public static readonly Max = 2 ** 31 - 1;
45+
public static readonly Min = -(2 ** 31);
4046
}
4147

4248
export class DuckDBBigIntType extends BaseDuckDBType<DuckDBTypeId.BIGINT> {
4349
private constructor() {
4450
super(DuckDBTypeId.BIGINT);
4551
}
4652
public static readonly instance = new DuckDBBigIntType();
53+
public static readonly Max = 2n ** 63n - 1n;
54+
public static readonly Min = -(2n ** 63n);
4755
}
4856

4957
export class DuckDBUTinyIntType extends BaseDuckDBType<DuckDBTypeId.UTINYINT> {
5058
private constructor() {
5159
super(DuckDBTypeId.UTINYINT);
5260
}
5361
public static readonly instance = new DuckDBUTinyIntType();
62+
public static readonly Max = 2 ** 8 - 1;
63+
public static readonly Min = 0;
5464
}
5565

5666
export class DuckDBUSmallIntType extends BaseDuckDBType<DuckDBTypeId.USMALLINT> {
5767
private constructor() {
5868
super(DuckDBTypeId.USMALLINT);
5969
}
6070
public static readonly instance = new DuckDBUSmallIntType();
71+
public static readonly Max = 2 ** 16 - 1;
72+
public static readonly Min = 0;
6173
}
6274

6375
export class DuckDBUIntegerType extends BaseDuckDBType<DuckDBTypeId.UINTEGER> {
6476
private constructor() {
6577
super(DuckDBTypeId.UINTEGER);
6678
}
6779
public static readonly instance = new DuckDBUIntegerType();
80+
public static readonly Max = 2 ** 32 - 1;
81+
public static readonly Min = 0;
6882
}
6983

7084
export class DuckDBUBigIntType extends BaseDuckDBType<DuckDBTypeId.UBIGINT> {
7185
private constructor() {
7286
super(DuckDBTypeId.UBIGINT);
7387
}
7488
public static readonly instance = new DuckDBUBigIntType();
89+
public static readonly Max = 2n ** 64n - 1n;
90+
public static readonly Min = 0n;
7591
}
7692

7793
export class DuckDBFloatType extends BaseDuckDBType<DuckDBTypeId.FLOAT> {
7894
private constructor() {
7995
super(DuckDBTypeId.FLOAT);
8096
}
8197
public static readonly instance = new DuckDBFloatType();
98+
public static readonly Min = Math.fround(-3.4028235e+38);
99+
public static readonly Max = Math.fround( 3.4028235e+38);
82100
}
83101

84102
export class DuckDBDoubleType extends BaseDuckDBType<DuckDBTypeId.DOUBLE> {
85103
private constructor() {
86104
super(DuckDBTypeId.DOUBLE);
87105
}
88106
public static readonly instance = new DuckDBDoubleType();
107+
public static readonly Min = -Number.MAX_VALUE;
108+
public static readonly Max = Number.MAX_VALUE;
89109
}
90110

91111
export class DuckDBTimestampType extends BaseDuckDBType<DuckDBTypeId.TIMESTAMP> {
@@ -124,13 +144,17 @@ export class DuckDBHugeIntType extends BaseDuckDBType<DuckDBTypeId.HUGEINT> {
124144
super(DuckDBTypeId.HUGEINT);
125145
}
126146
public static readonly instance = new DuckDBHugeIntType();
147+
public static readonly Max = 2n ** 127n - 1n;
148+
public static readonly Min = -(2n ** 127n);
127149
}
128150

129151
export class DuckDBUHugeIntType extends BaseDuckDBType<DuckDBTypeId.UHUGEINT> {
130152
private constructor() {
131153
super(DuckDBTypeId.UHUGEINT);
132154
}
133155
public static readonly instance = new DuckDBUHugeIntType();
156+
public static readonly Max = 2n ** 128n - 1n;
157+
public static readonly Min = 0n;
134158
}
135159

136160
export class DuckDBVarCharType extends BaseDuckDBType<DuckDBTypeId.VARCHAR> {
@@ -314,6 +338,8 @@ export class DuckDBVarIntType extends BaseDuckDBType<DuckDBTypeId.VARINT> {
314338
super(DuckDBTypeId.VARINT);
315339
}
316340
public static readonly instance = new DuckDBVarIntType();
341+
public static readonly Max: bigint = 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368n;
342+
public static readonly Min: bigint = -179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368n;
317343
}
318344

319345
export class DuckDBSQLNullType extends BaseDuckDBType<DuckDBTypeId.SQLNULL> {

api/src/DuckDBVector.ts

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -193,22 +193,22 @@ const getBoolean = makeGetBoolean();
193193

194194
function getDecimal2(dataView: DataView, offset: number, type: DuckDBDecimalType): DuckDBDecimalValue<number> {
195195
const scaledValue = getInt16(dataView, offset);
196-
return new DuckDBDecimalValue(type, scaledValue);
196+
return new DuckDBDecimalValue(type.width, type.scale, scaledValue);
197197
}
198198

199199
function getDecimal4(dataView: DataView, offset: number, type: DuckDBDecimalType): DuckDBDecimalValue<number> {
200200
const scaledValue = getInt32(dataView, offset);
201-
return new DuckDBDecimalValue(type, scaledValue);
201+
return new DuckDBDecimalValue(type.width, type.scale, scaledValue);
202202
}
203203

204204
function getDecimal8(dataView: DataView, offset: number, type: DuckDBDecimalType): DuckDBDecimalValue<bigint> {
205205
const scaledValue = getInt64(dataView, offset);
206-
return new DuckDBDecimalValue(type, scaledValue);
206+
return new DuckDBDecimalValue(type.width, type.scale, scaledValue);
207207
}
208208

209209
function getDecimal16(dataView: DataView, offset: number, type: DuckDBDecimalType): DuckDBDecimalValue<bigint> {
210210
const scaledValue = getInt128(dataView, offset);
211-
return new DuckDBDecimalValue(type, scaledValue);
211+
return new DuckDBDecimalValue(type.width, type.scale, scaledValue);
212212
}
213213

214214
function vectorData(vector: duckdb.Vector, byteCount: number): Uint8Array {
@@ -391,6 +391,13 @@ export abstract class DuckDBVector<TValue extends DuckDBValue = DuckDBValue> {
391391
public abstract get itemCount(): number;
392392
public abstract getItem(itemIndex: number): TValue | null;
393393
public abstract slice(offset: number, length: number): DuckDBVector<TValue>;
394+
public toArray(): (TValue | null)[] {
395+
const items: (TValue | null)[] = [];
396+
for (let i = 0; i < this.itemCount; i++) {
397+
items.push(this.getItem(i));
398+
}
399+
return items;
400+
}
394401
}
395402

396403
export class DuckDBBooleanVector extends DuckDBVector<boolean> {
@@ -1302,17 +1309,17 @@ export class DuckDBEnum4Vector extends DuckDBVector<string> {
13021309
}
13031310
}
13041311

1305-
export class DuckDBListVector<TValue extends DuckDBValue = DuckDBValue> extends DuckDBVector<DuckDBListValue> {
1312+
export class DuckDBListVector extends DuckDBVector<DuckDBListValue> {
13061313
private readonly listType: DuckDBListType;
13071314
private readonly entryData: BigUint64Array;
13081315
private readonly validity: DuckDBValidity;
1309-
private readonly childData: DuckDBVector<TValue>;
1316+
private readonly childData: DuckDBVector;
13101317
private readonly _itemCount: number;
13111318
constructor(
13121319
listType: DuckDBListType,
13131320
entryData: BigUint64Array,
13141321
validity: DuckDBValidity,
1315-
childData: DuckDBVector<TValue>,
1322+
childData: DuckDBVector,
13161323
itemCount: number,
13171324
) {
13181325
super();
@@ -1340,7 +1347,7 @@ export class DuckDBListVector<TValue extends DuckDBValue = DuckDBValue> extends
13401347
public override get itemCount(): number {
13411348
return this._itemCount;
13421349
}
1343-
public getItemVector(itemIndex: number): DuckDBVector<TValue> | null {
1350+
public getItemVector(itemIndex: number): DuckDBVector | null {
13441351
if (!this.validity.itemValid(itemIndex)) {
13451352
return null;
13461353
}
@@ -1349,16 +1356,16 @@ export class DuckDBListVector<TValue extends DuckDBValue = DuckDBValue> extends
13491356
const length = Number(this.entryData[entryDataStartIndex + 1]);
13501357
return this.childData.slice(offset, length);
13511358
}
1352-
public override getItem(itemIndex: number): DuckDBListValue<TValue> | null {
1359+
public override getItem(itemIndex: number): DuckDBListValue | null {
13531360
const vector = this.getItemVector(itemIndex);
13541361
if (!vector) {
13551362
return null;
13561363
}
1357-
return new DuckDBListValue(this.listType, vector);
1364+
return new DuckDBListValue(vector.toArray());
13581365
}
1359-
public override slice(offset: number, length: number): DuckDBListVector<TValue> {
1366+
public override slice(offset: number, length: number): DuckDBListVector {
13601367
const entryDataStartIndex = offset * 2;
1361-
return new DuckDBListVector<TValue>(
1368+
return new DuckDBListVector(
13621369
this.listType,
13631370
this.entryData.slice(entryDataStartIndex, entryDataStartIndex + length * 2),
13641371
this.validity.slice(offset),
@@ -1401,12 +1408,12 @@ export class DuckDBStructVector extends DuckDBVector<DuckDBStructValue> {
14011408
if (!this.validity.itemValid(itemIndex)) {
14021409
return null;
14031410
}
1404-
const values: DuckDBValue[] = [];
1411+
const entries: { [name: string]: DuckDBValue } = {};
14051412
const entryCount = this.structType.entries.length;
14061413
for (let i = 0; i < entryCount; i++) {
1407-
values.push(this.entryVectors[i].getItem(itemIndex));
1414+
entries[this.structType.entries[i].name] = this.entryVectors[i].getItem(itemIndex);
14081415
}
1409-
return new DuckDBStructValue(this.structType, values);
1416+
return new DuckDBStructValue(entries);
14101417
}
14111418
public getItemValue(itemIndex: number, entryIndex: number): DuckDBValue | null {
14121419
if (!this.validity.itemValid(itemIndex)) {
@@ -1461,7 +1468,7 @@ export class DuckDBMapVector extends DuckDBVector<DuckDBMapValue> {
14611468
const value = itemVector.getItemValue(i, 1);
14621469
entries.push({ key, value });
14631470
}
1464-
return new DuckDBMapValue(this.mapType, entries);
1471+
return new DuckDBMapValue(entries);
14651472
}
14661473
public override slice(offset: number, length: number): DuckDBMapVector {
14671474
return new DuckDBMapVector(
@@ -1471,15 +1478,15 @@ export class DuckDBMapVector extends DuckDBVector<DuckDBMapValue> {
14711478
}
14721479
}
14731480

1474-
export class DuckDBArrayVector<TValue extends DuckDBValue = DuckDBValue> extends DuckDBVector<DuckDBArrayValue<TValue>> {
1481+
export class DuckDBArrayVector extends DuckDBVector<DuckDBArrayValue> {
14751482
private readonly arrayType: DuckDBArrayType;
14761483
private readonly validity: DuckDBValidity;
1477-
private readonly childData: DuckDBVector<TValue>;
1484+
private readonly childData: DuckDBVector;
14781485
private readonly _itemCount: number;
14791486
constructor(
14801487
arrayType: DuckDBArrayType,
14811488
validity: DuckDBValidity,
1482-
childData: DuckDBVector<TValue>,
1489+
childData: DuckDBVector,
14831490
itemCount: number,
14841491
) {
14851492
super();
@@ -1508,14 +1515,14 @@ export class DuckDBArrayVector<TValue extends DuckDBValue = DuckDBValue> extends
15081515
public override get itemCount(): number {
15091516
return this._itemCount;
15101517
}
1511-
public override getItem(itemIndex: number): DuckDBArrayValue<TValue> | null {
1518+
public override getItem(itemIndex: number): DuckDBArrayValue | null {
15121519
if (!this.validity.itemValid(itemIndex)) {
15131520
return null;
15141521
}
1515-
return new DuckDBArrayValue(this.arrayType, this.childData.slice(itemIndex * this.arrayType.length, this.arrayType.length));
1522+
return new DuckDBArrayValue(this.childData.slice(itemIndex * this.arrayType.length, this.arrayType.length).toArray());
15161523
}
1517-
public override slice(offset: number, length: number): DuckDBArrayVector<TValue> {
1518-
return new DuckDBArrayVector<TValue>(
1524+
public override slice(offset: number, length: number): DuckDBArrayVector {
1525+
return new DuckDBArrayVector(
15191526
this.arrayType,
15201527
this.validity.slice(offset),
15211528
this.childData.slice(offset * this.arrayType.length, length * this.arrayType.length),

0 commit comments

Comments
 (0)