Skip to content

Commit 028497d

Browse files
Swap lz4 library
Add rowset slicing
1 parent 61d8f86 commit 028497d

File tree

5 files changed

+54
-99
lines changed

5 files changed

+54
-99
lines changed

package-lock.json

Lines changed: 7 additions & 96 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "sqlitecloud-js",
3-
"version": "0.0.19-beta",
3+
"version": "0.0.20-beta",
44
"description": "SQLiteCloud drivers for Typescript/Javascript in edge, web and node clients",
55
"main": "./lib/index.js",
66
"types": "./lib/index.d.ts",
@@ -42,7 +42,7 @@
4242
"homepage": "https://github.com/sqlitecloud/sqlitecloud-js#readme",
4343
"dependencies": {
4444
"eventemitter3": "^5.0.1",
45-
"lz4": "^0.6.5"
45+
"lz4js": "^0.2.0"
4646
},
4747
"devDependencies": {
4848
"@types/jest": "^29.5.7",

src/connection.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
*/
44

55
import tls from 'tls'
6-
import lz4 from 'lz4'
6+
7+
const lz4 = require('lz4js')
78

89
import { SQLiteCloudConfig, SQLCloudRowsetMetadata, SQLiteCloudError, SQLiteCloudDataTypes, ErrorCallback, ResultsCallback } from './types'
910
import { SQLiteCloudRowset } from './rowset'

src/rowset.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,23 @@ export class SQLiteCloudRowset extends Array<SQLiteCloudRow> {
101101
}
102102
return this.#data[row * this.numberOfColumns + column]
103103
}
104+
105+
/** Returns a subset of rows from this rowset */
106+
slice(start?: number, end?: number): SQLiteCloudRow[] {
107+
start = start && start > 0 ? start : 0
108+
if (end === undefined) {
109+
end = this.numberOfRows
110+
} else if (end < 0) {
111+
end = this.numberOfRows + end
112+
}
113+
if (end < start) {
114+
end = start
115+
} else if (end > this.numberOfRows) {
116+
end = this.numberOfRows
117+
}
118+
119+
const slicedData = this.#data.slice(start * this.numberOfColumns, end * this.numberOfColumns)
120+
const slicedMetadata = { ...this.#metadata, numberOfRows: end - start }
121+
return new SQLiteCloudRowset(slicedMetadata, slicedData)
122+
}
104123
}

test/rowset.test.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,30 @@ describe('rowset', () => {
3434
})
3535
})
3636

37+
it('can be sliced like an array', done => {
38+
const connection = getChinookConnection()
39+
connection.sendCommands('SELECT * FROM tracks LIMIT 50;', (error, rowset) => {
40+
expect(rowset).toBeInstanceOf(SQLiteCloudRowset)
41+
expect(rowset.numberOfColumns).toBe(9)
42+
expect(rowset.numberOfRows).toBe(50)
43+
expect(Array.isArray(rowset)).toBeTruthy()
44+
expect(rowset).toHaveLength(50)
45+
46+
const sliced = rowset.slice(10, 20)
47+
expect(sliced).toHaveLength(10)
48+
expect(sliced[0]).toMatchObject(rowset[10])
49+
50+
// slice more than actually exists!
51+
const largerSlice = rowset.slice(10, 100)
52+
expect(largerSlice).toHaveLength(40)
53+
expect(largerSlice[0]).toMatchObject(rowset[10])
54+
expect(largerSlice[39]).toMatchObject(rowset[49])
55+
56+
connection.close()
57+
done()
58+
})
59+
})
60+
3761
it('contains basic metadata', done => {
3862
const connection = getChinookConnection()
3963
connection.sendCommands('SELECT * FROM tracks LIMIT 10;', (error, rowset) => {

0 commit comments

Comments
 (0)