@@ -193,22 +193,22 @@ const getBoolean = makeGetBoolean();
193
193
194
194
function getDecimal2 ( dataView : DataView , offset : number , type : DuckDBDecimalType ) : DuckDBDecimalValue < number > {
195
195
const scaledValue = getInt16 ( dataView , offset ) ;
196
- return new DuckDBDecimalValue ( type , scaledValue ) ;
196
+ return new DuckDBDecimalValue ( type . width , type . scale , scaledValue ) ;
197
197
}
198
198
199
199
function getDecimal4 ( dataView : DataView , offset : number , type : DuckDBDecimalType ) : DuckDBDecimalValue < number > {
200
200
const scaledValue = getInt32 ( dataView , offset ) ;
201
- return new DuckDBDecimalValue ( type , scaledValue ) ;
201
+ return new DuckDBDecimalValue ( type . width , type . scale , scaledValue ) ;
202
202
}
203
203
204
204
function getDecimal8 ( dataView : DataView , offset : number , type : DuckDBDecimalType ) : DuckDBDecimalValue < bigint > {
205
205
const scaledValue = getInt64 ( dataView , offset ) ;
206
- return new DuckDBDecimalValue ( type , scaledValue ) ;
206
+ return new DuckDBDecimalValue ( type . width , type . scale , scaledValue ) ;
207
207
}
208
208
209
209
function getDecimal16 ( dataView : DataView , offset : number , type : DuckDBDecimalType ) : DuckDBDecimalValue < bigint > {
210
210
const scaledValue = getInt128 ( dataView , offset ) ;
211
- return new DuckDBDecimalValue ( type , scaledValue ) ;
211
+ return new DuckDBDecimalValue ( type . width , type . scale , scaledValue ) ;
212
212
}
213
213
214
214
function vectorData ( vector : duckdb . Vector , byteCount : number ) : Uint8Array {
@@ -391,6 +391,13 @@ export abstract class DuckDBVector<TValue extends DuckDBValue = DuckDBValue> {
391
391
public abstract get itemCount ( ) : number ;
392
392
public abstract getItem ( itemIndex : number ) : TValue | null ;
393
393
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
+ }
394
401
}
395
402
396
403
export class DuckDBBooleanVector extends DuckDBVector < boolean > {
@@ -1302,17 +1309,17 @@ export class DuckDBEnum4Vector extends DuckDBVector<string> {
1302
1309
}
1303
1310
}
1304
1311
1305
- export class DuckDBListVector < TValue extends DuckDBValue = DuckDBValue > extends DuckDBVector < DuckDBListValue > {
1312
+ export class DuckDBListVector extends DuckDBVector < DuckDBListValue > {
1306
1313
private readonly listType : DuckDBListType ;
1307
1314
private readonly entryData : BigUint64Array ;
1308
1315
private readonly validity : DuckDBValidity ;
1309
- private readonly childData : DuckDBVector < TValue > ;
1316
+ private readonly childData : DuckDBVector ;
1310
1317
private readonly _itemCount : number ;
1311
1318
constructor (
1312
1319
listType : DuckDBListType ,
1313
1320
entryData : BigUint64Array ,
1314
1321
validity : DuckDBValidity ,
1315
- childData : DuckDBVector < TValue > ,
1322
+ childData : DuckDBVector ,
1316
1323
itemCount : number ,
1317
1324
) {
1318
1325
super ( ) ;
@@ -1340,7 +1347,7 @@ export class DuckDBListVector<TValue extends DuckDBValue = DuckDBValue> extends
1340
1347
public override get itemCount ( ) : number {
1341
1348
return this . _itemCount ;
1342
1349
}
1343
- public getItemVector ( itemIndex : number ) : DuckDBVector < TValue > | null {
1350
+ public getItemVector ( itemIndex : number ) : DuckDBVector | null {
1344
1351
if ( ! this . validity . itemValid ( itemIndex ) ) {
1345
1352
return null ;
1346
1353
}
@@ -1349,16 +1356,16 @@ export class DuckDBListVector<TValue extends DuckDBValue = DuckDBValue> extends
1349
1356
const length = Number ( this . entryData [ entryDataStartIndex + 1 ] ) ;
1350
1357
return this . childData . slice ( offset , length ) ;
1351
1358
}
1352
- public override getItem ( itemIndex : number ) : DuckDBListValue < TValue > | null {
1359
+ public override getItem ( itemIndex : number ) : DuckDBListValue | null {
1353
1360
const vector = this . getItemVector ( itemIndex ) ;
1354
1361
if ( ! vector ) {
1355
1362
return null ;
1356
1363
}
1357
- return new DuckDBListValue ( this . listType , vector ) ;
1364
+ return new DuckDBListValue ( vector . toArray ( ) ) ;
1358
1365
}
1359
- public override slice ( offset : number , length : number ) : DuckDBListVector < TValue > {
1366
+ public override slice ( offset : number , length : number ) : DuckDBListVector {
1360
1367
const entryDataStartIndex = offset * 2 ;
1361
- return new DuckDBListVector < TValue > (
1368
+ return new DuckDBListVector (
1362
1369
this . listType ,
1363
1370
this . entryData . slice ( entryDataStartIndex , entryDataStartIndex + length * 2 ) ,
1364
1371
this . validity . slice ( offset ) ,
@@ -1401,12 +1408,12 @@ export class DuckDBStructVector extends DuckDBVector<DuckDBStructValue> {
1401
1408
if ( ! this . validity . itemValid ( itemIndex ) ) {
1402
1409
return null ;
1403
1410
}
1404
- const values : DuckDBValue [ ] = [ ] ;
1411
+ const entries : { [ name : string ] : DuckDBValue } = { } ;
1405
1412
const entryCount = this . structType . entries . length ;
1406
1413
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 ) ;
1408
1415
}
1409
- return new DuckDBStructValue ( this . structType , values ) ;
1416
+ return new DuckDBStructValue ( entries ) ;
1410
1417
}
1411
1418
public getItemValue ( itemIndex : number , entryIndex : number ) : DuckDBValue | null {
1412
1419
if ( ! this . validity . itemValid ( itemIndex ) ) {
@@ -1461,7 +1468,7 @@ export class DuckDBMapVector extends DuckDBVector<DuckDBMapValue> {
1461
1468
const value = itemVector . getItemValue ( i , 1 ) ;
1462
1469
entries . push ( { key, value } ) ;
1463
1470
}
1464
- return new DuckDBMapValue ( this . mapType , entries ) ;
1471
+ return new DuckDBMapValue ( entries ) ;
1465
1472
}
1466
1473
public override slice ( offset : number , length : number ) : DuckDBMapVector {
1467
1474
return new DuckDBMapVector (
@@ -1471,15 +1478,15 @@ export class DuckDBMapVector extends DuckDBVector<DuckDBMapValue> {
1471
1478
}
1472
1479
}
1473
1480
1474
- export class DuckDBArrayVector < TValue extends DuckDBValue = DuckDBValue > extends DuckDBVector < DuckDBArrayValue < TValue > > {
1481
+ export class DuckDBArrayVector extends DuckDBVector < DuckDBArrayValue > {
1475
1482
private readonly arrayType : DuckDBArrayType ;
1476
1483
private readonly validity : DuckDBValidity ;
1477
- private readonly childData : DuckDBVector < TValue > ;
1484
+ private readonly childData : DuckDBVector ;
1478
1485
private readonly _itemCount : number ;
1479
1486
constructor (
1480
1487
arrayType : DuckDBArrayType ,
1481
1488
validity : DuckDBValidity ,
1482
- childData : DuckDBVector < TValue > ,
1489
+ childData : DuckDBVector ,
1483
1490
itemCount : number ,
1484
1491
) {
1485
1492
super ( ) ;
@@ -1508,14 +1515,14 @@ export class DuckDBArrayVector<TValue extends DuckDBValue = DuckDBValue> extends
1508
1515
public override get itemCount ( ) : number {
1509
1516
return this . _itemCount ;
1510
1517
}
1511
- public override getItem ( itemIndex : number ) : DuckDBArrayValue < TValue > | null {
1518
+ public override getItem ( itemIndex : number ) : DuckDBArrayValue | null {
1512
1519
if ( ! this . validity . itemValid ( itemIndex ) ) {
1513
1520
return null ;
1514
1521
}
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 ( ) ) ;
1516
1523
}
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 (
1519
1526
this . arrayType ,
1520
1527
this . validity . slice ( offset ) ,
1521
1528
this . childData . slice ( offset * this . arrayType . length , length * this . arrayType . length ) ,
0 commit comments