@@ -757,68 +757,121 @@ test('PRAGMAs are supported', (t) => {
757
757
) ;
758
758
} ) ;
759
759
760
- test ( 'creating and applying a changeset' , ( t ) => {
761
- const createDatabase = ( ) => {
762
- const database = new DatabaseSync ( ':memory:' ) ;
763
- database . exec ( `
760
+ suite ( 'session extension' , ( ) => {
761
+ test ( 'creating and applying a changeset' , ( t ) => {
762
+ const createDataTableSql = `
764
763
CREATE TABLE data(
765
764
key INTEGER PRIMARY KEY,
766
765
value TEXT
767
- ) STRICT
768
- ` ) ;
769
- return database ;
770
- } ;
766
+ ) STRICT` ;
771
767
772
- const databaseFrom = createDatabase ( ) ;
773
- const session = databaseFrom . createSession ( ) ;
768
+ const createDatabase = ( ) => {
769
+ const database = new DatabaseSync ( ':memory:' ) ;
770
+ database . exec ( createDataTableSql ) ;
771
+ return database ;
772
+ } ;
774
773
775
- const select = 'SELECT * FROM data ORDER BY key' ;
774
+ const databaseFrom = createDatabase ( ) ;
775
+ const session = databaseFrom . createSession ( ) ;
776
776
777
- const insert = databaseFrom . prepare ( 'INSERT INTO data (key, value) VALUES (?, ?)' ) ;
778
- insert . run ( 1 , 'hello' ) ;
779
- insert . run ( 2 , 'world' ) ;
777
+ const select = 'SELECT * FROM data ORDER BY key' ;
780
778
781
- const databaseTo = createDatabase ( ) ;
779
+ const insert = databaseFrom . prepare ( 'INSERT INTO data (key, value) VALUES (?, ?)' ) ;
780
+ insert . run ( 1 , 'hello' ) ;
781
+ insert . run ( 2 , 'world' ) ;
782
782
783
- databaseTo . applyChangeset ( session . changeset ( ) ) ;
784
- t . assert . deepStrictEqual (
785
- databaseFrom . prepare ( select ) . all ( ) ,
786
- databaseTo . prepare ( select ) . all ( )
787
- ) ;
788
- } ) ;
783
+ const databaseTo = createDatabase ( ) ;
789
784
790
- test ( 'trying to create session when database is closed results in exception' , ( t ) => {
791
- const database = new DatabaseSync ( ':memory:' ) ;
792
- database . close ( ) ;
793
- t . assert . throws ( ( ) => {
794
- database . createSession ( ) ;
795
- } , {
796
- name : 'Error' ,
797
- message : 'database is not open' ,
785
+ databaseTo . applyChangeset ( session . changeset ( ) ) ;
786
+ t . assert . deepStrictEqual (
787
+ databaseFrom . prepare ( select ) . all ( ) ,
788
+ databaseTo . prepare ( select ) . all ( )
789
+ ) ;
798
790
} ) ;
799
- } ) ;
800
791
801
- test ( 'trying to create changeset when database is closed results in exception' , ( t ) => {
802
- const database = new DatabaseSync ( ':memory:' ) ;
803
- const session = database . createSession ( ) ;
804
- database . close ( ) ;
805
- t . assert . throws ( ( ) => {
806
- session . changeset ( ) ;
807
- } , {
808
- name : 'Error ' ,
809
- message : 'database is not open' ,
792
+ test ( 'trying to create session when database is closed results in exception' , ( t ) => {
793
+ const database = new DatabaseSync ( ':memory:' ) ;
794
+ database . close ( ) ;
795
+ t . assert . throws ( ( ) => {
796
+ database . createSession ( ) ;
797
+ } , {
798
+ name : 'Error' ,
799
+ message : 'database is not open ' ,
800
+ } ) ;
810
801
} ) ;
811
- } ) ;
812
802
813
- test ( 'trying to apply a changeset when database is closed results in exception' , ( t ) => {
814
- const database = new DatabaseSync ( ':memory:' ) ;
815
- const session = database . createSession ( ) ;
816
- const changeset = session . changeset ( ) ;
817
- database . close ( ) ;
818
- t . assert . throws ( ( ) => {
819
- database . applyChangeset ( changeset ) ;
820
- } , {
821
- name : 'Error' ,
822
- message : 'database is not open' ,
803
+ test ( 'trying to create changeset when database is closed results in exception' , ( t ) => {
804
+ const database = new DatabaseSync ( ':memory:' ) ;
805
+ const session = database . createSession ( ) ;
806
+ database . close ( ) ;
807
+ t . assert . throws ( ( ) => {
808
+ session . changeset ( ) ;
809
+ } , {
810
+ name : 'Error' ,
811
+ message : 'database is not open' ,
812
+ } ) ;
813
+ } ) ;
814
+
815
+ test ( 'trying to apply a changeset when database is closed results in exception' , ( t ) => {
816
+ const database = new DatabaseSync ( ':memory:' ) ;
817
+ const session = database . createSession ( ) ;
818
+ const changeset = session . changeset ( ) ;
819
+ database . close ( ) ;
820
+ t . assert . throws ( ( ) => {
821
+ database . applyChangeset ( changeset ) ;
822
+ } , {
823
+ name : 'Error' ,
824
+ message : 'database is not open' ,
825
+ } ) ;
826
+ } ) ;
827
+
828
+ test ( 'set table with wrong type when creating session' , ( t ) => {
829
+ const database = new DatabaseSync ( ':memory:' ) ;
830
+ t . assert . throws ( ( ) => {
831
+ database . createSession ( {
832
+ table : true
833
+ } ) ;
834
+ } , {
835
+ name : 'TypeError' ,
836
+ message : 'The "table" property must be a string.'
837
+ } ) ;
823
838
} ) ;
824
- } ) ;
839
+
840
+ test ( 'setting options.table causes only one table to be tracked' , ( t ) => {
841
+ const database1 = new DatabaseSync ( ':memory:' ) ;
842
+ const database2 = new DatabaseSync ( ':memory:' ) ;
843
+
844
+ const createData1TableSql = `CREATE TABLE data1 (
845
+ key INTEGER PRIMARY KEY,
846
+ value TEXT
847
+ ) STRICT
848
+ ` ;
849
+ const createData2TableSql = `CREATE TABLE data2 (
850
+ key INTEGER PRIMARY KEY,
851
+ value TEXT
852
+ ) STRICT
853
+ ` ;
854
+ database1 . exec ( createData1TableSql ) ;
855
+ database1 . exec ( createData2TableSql ) ;
856
+ database2 . exec ( createData1TableSql ) ;
857
+ database2 . exec ( createData2TableSql ) ;
858
+
859
+ const session = database1 . createSession ( {
860
+ table : 'data1'
861
+ } ) ;
862
+ const insert1 = database1 . prepare ( 'INSERT INTO data1 (key, value) VALUES (?, ?)' ) ;
863
+ insert1 . run ( 1 , 'hello' ) ;
864
+ insert1 . run ( 2 , 'world' ) ;
865
+ const insert2 = database1 . prepare ( 'INSERT INTO data2 (key, value) VALUES (?, ?)' ) ;
866
+ insert2 . run ( 1 , 'hello' ) ;
867
+ insert2 . run ( 2 , 'world' ) ;
868
+ const select1 = 'SELECT * FROM data1 ORDER BY key' ;
869
+ const select2 = 'SELECT * FROM data2 ORDER BY key' ;
870
+ database2 . applyChangeset ( session . changeset ( ) ) ;
871
+ t . assert . deepStrictEqual (
872
+ database1 . prepare ( select1 ) . all ( ) ,
873
+ database2 . prepare ( select1 ) . all ( ) ) ; // data1 table should be equal
874
+ t . assert . deepStrictEqual ( database2 . prepare ( select2 ) . all ( ) , [ ] ) ; // data2 should be empty in database2
875
+ t . assert . strictEqual ( database1 . prepare ( select2 ) . all ( ) . length , 2 ) ; // data1 should have values in database1
876
+ } ) ;
877
+ } ) ;
0 commit comments