@@ -5,6 +5,10 @@ const { DatabaseSync } = require('node:sqlite');
55const { suite, test } = require ( 'node:test' ) ;
66
77const arrayBuffer = new Uint8Array ( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] ) . buffer ;
8+ const sharedArrayBuffer = new SharedArrayBuffer ( 8 ) ;
9+ const typedArrayOnSharedArrayBuffer = new Uint8Array ( sharedArrayBuffer ) ;
10+ typedArrayOnSharedArrayBuffer . set ( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ] ) ;
11+
812const TypedArrays = [
913 [ 'Int8Array' , Int8Array ] ,
1014 [ 'Uint8Array' , Uint8Array ] ,
@@ -51,3 +55,68 @@ suite('StatementSync with TypedArray/DataView', () => {
5155 } ) ;
5256 }
5357} ) ;
58+
59+ suite ( 'StatementSync with ArrayBuffer and SharedArrayBuffer' , ( ) => {
60+ const buffers = [
61+ [ 'ArrayBuffer' , arrayBuffer ] ,
62+ [ 'SharedArrayBuffer' , sharedArrayBuffer ] ,
63+ ] ;
64+
65+ for ( const [ displayName , buffer ] of buffers ) {
66+ test ( `${ displayName } - anonymous binding` , ( t ) => {
67+ const db = new DatabaseSync ( ':memory:' ) ;
68+ t . after ( ( ) => { db . close ( ) ; } ) ;
69+ db . exec ( 'CREATE TABLE test (data BLOB)' ) ;
70+ // insert
71+ {
72+ const stmt = db . prepare ( 'INSERT INTO test VALUES (?)' ) ;
73+ stmt . run ( buffer ) ;
74+ }
75+ // select all
76+ {
77+ const stmt = db . prepare ( 'SELECT * FROM test' ) ;
78+ const row = stmt . get ( ) ;
79+ t . assert . ok ( row . data instanceof Uint8Array ) ;
80+ t . assert . strictEqual ( row . data . length , 8 ) ;
81+ t . assert . deepStrictEqual ( row . data , new Uint8Array ( arrayBuffer ) ) ;
82+ }
83+ // query
84+ {
85+ const stmt = db . prepare ( 'SELECT * FROM test WHERE data = ?' ) ;
86+ const rows = stmt . all ( buffer ) ;
87+ t . assert . strictEqual ( rows . length , 1 ) ;
88+ t . assert . ok ( rows [ 0 ] . data instanceof Uint8Array ) ;
89+ t . assert . strictEqual ( rows [ 0 ] . data . length , 8 ) ;
90+ t . assert . deepStrictEqual ( rows [ 0 ] . data , new Uint8Array ( arrayBuffer ) ) ;
91+ }
92+ } ) ;
93+
94+ test ( `${ displayName } - named binding (object)` , ( t ) => {
95+ const db = new DatabaseSync ( ':memory:' ) ;
96+ t . after ( ( ) => { db . close ( ) ; } ) ;
97+ db . exec ( 'CREATE TABLE test (data BLOB)' ) ;
98+ // insert
99+ {
100+ const stmt = db . prepare ( 'INSERT INTO test VALUES ($data)' ) ;
101+ stmt . run ( { '$data' : buffer } ) ;
102+ }
103+ // select all
104+ {
105+ const stmt = db . prepare ( 'SELECT * FROM test' ) ;
106+ const row = stmt . get ( ) ;
107+ t . assert . ok ( row . data instanceof Uint8Array ) ;
108+ t . assert . strictEqual ( row . data . length , 8 ) ;
109+ t . assert . deepStrictEqual ( row . data , new Uint8Array ( arrayBuffer ) ) ;
110+ }
111+ // query
112+ {
113+ const stmt = db . prepare ( 'SELECT * FROM test WHERE data = $data' ) ;
114+ const rows = stmt . all ( { '$data' : buffer } ) ;
115+ t . assert . strictEqual ( rows . length , 1 ) ;
116+ t . assert . ok ( rows [ 0 ] . data instanceof Uint8Array ) ;
117+ t . assert . strictEqual ( rows [ 0 ] . data . length , 8 ) ;
118+ t . assert . deepStrictEqual ( rows [ 0 ] . data , new Uint8Array ( arrayBuffer ) ) ;
119+ }
120+ } ) ;
121+ }
122+ } ) ;
0 commit comments