Changeset: 23602fa6a4db for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=23602fa6a4db
Modified Files:
        sql/test/Tests/seq-default.stable.out
        sql/test/seq-default.sql
Branch: Aug2018
Log Message:

Extended sequence default test with usage of explicitly created sequence which 
is used in two tables as default next value for seq_####
The sequence should not be dropped when the table is dropped, despite its name 
being the same format as the system generated sequence names.
Now the insert on the second table - which still references the sequence - 
causes a server crash.
This should not be allowed.


diffs (188 lines):

diff --git a/sql/test/Tests/seq-default.stable.out 
b/sql/test/Tests/seq-default.stable.out
--- a/sql/test/Tests/seq-default.stable.out
+++ b/sql/test/Tests/seq-default.stable.out
@@ -15,19 +15,6 @@ stdout of test 'seq-default` in director
 # MonetDB/SQL module v2.27.0 loaded
 
 Ready.
-# falling back to direct mode 
-# falling back to direct mode 
-# falling back to direct mode 
-# falling back to direct mode 
-# falling back to direct mode 
-# falling back to direct mode 
-# falling back to direct mode 
-# falling back to direct mode 
-# falling back to direct mode 
-#function user.main():void;
-#    clients.quit();
-#end main;
-
 
 # 12:37:18 >  
 # 12:37:18 >  Mtimeout -timeout 60 MapiClient -lsql -u monetdb -P monetdb 
--host=localhost --port=45579  < seq-default.sql
@@ -49,12 +36,28 @@ Ready.
 [ 2005-09-23 12:34:26.736000,  4       ]
 [ 2005-09-23 12:34:26.736000,  5       ]
 [ 2005-09-23 12:34:26.736000,  6       ]
+TABLE     sys.seqdeftest
+SEQUENCE  sys.test_seq
+#drop table seqdeftest;
+#drop sequence test_seq;
+#create table seqdeftest (
+#      d date,
+#      id serial,
+#      count int auto_increment,
+#      bla int generated always as identity (
+#              start with 100 increment by 2 no minvalue maxvalue 1000
+#              cache 2 cycle)
+#);
+#insert into seqdeftest(d) values ('2005-10-01');
+[ 1    ]
+#insert into seqdeftest(d) values ('2005-10-01');
+[ 1    ]
+#insert into seqdeftest(d) values ('2005-10-01');
 [ 1    ]
 [ 1    ]
 [ 1    ]
 [ 1    ]
-[ 1    ]
-[ 1    ]
+#select * from seqdeftest;
 % sys.seqdeftest,      sys.seqdeftest, sys.seqdeftest, sys.seqdeftest # 
table_name
 % d,   id,     count,  bla # name
 % date,        int,    int,    int # type
@@ -65,8 +68,68 @@ Ready.
 [ 2005-10-01,  4,      4,      106     ]
 [ 2005-10-01,  5,      5,      108     ]
 [ 2005-10-01,  6,      6,      110     ]
+SEQUENCE  sys.seq_8499
+SEQUENCE  sys.seq_8501
+SEQUENCE  sys.seq_8503
+TABLE     sys.seqdeftest
+#drop table seqdeftest;
+#CREATE SEQUENCE seq_5700 AS INTEGER;
+#CREATE TABLE kvk (
+#        id                INTEGER       NOT NULL       DEFAULT next value for 
seq_5700,
+#        kvk               BIGINT,
+#        bedrijfsnaam      VARCHAR(256),
+#        CONSTRAINT kvk_id_pkey PRIMARY KEY (id)
+#);
+#insert into kvk(kvk, bedrijfsnaam) values (1, 'ones');
+[ 1    ]
+#insert into kvk(kvk, bedrijfsnaam) values (2, 'toos');
+[ 1    ]
+#select * from kvk;
+% sys.kvk,     sys.kvk,        sys.kvk # table_name
+% id,  kvk,    bedrijfsnaam # name
+% int, bigint, varchar # type
+% 1,   1,      4 # length
+[ 1,   1,      "ones"  ]
+[ 2,   2,      "toos"  ]
+#CREATE TABLE kvk_cp (
+#        id                INTEGER       NOT NULL       DEFAULT next value for 
seq_5700,
+#        kvk               BIGINT,
+#        bedrijfsnaam      VARCHAR(256),
+#        CONSTRAINT kvk_cp_id_pkey PRIMARY KEY (id)
+#);
+#insert into kvk_cp(kvk, bedrijfsnaam) values (3, 'dries');
+[ 1    ]
+#insert into kvk_cp(kvk, bedrijfsnaam) values (4, 'viers');
+[ 1    ]
+#select * from kvk_cp;
+% sys.kvk_cp,  sys.kvk_cp,     sys.kvk_cp # table_name
+% id,  kvk,    bedrijfsnaam # name
+% int, bigint, varchar # type
+% 1,   1,      5 # length
+[ 3,   3,      "dries" ]
+[ 4,   4,      "viers" ]
+TABLE     sys.kvk
+TABLE     sys.kvk_cp
+SEQUENCE  sys.seq_5700
+#drop TABLE kvk;
+#insert into kvk_cp(kvk, bedrijfsnaam) values (5, 'vijfs');
+[ 1    ]
+#select * from kvk_cp;
+% sys.kvk_cp,  sys.kvk_cp,     sys.kvk_cp # table_name
+% id,  kvk,    bedrijfsnaam # name
+% int, bigint, varchar # type
+% 1,   1,      5 # length
+[ 3,   3,      "dries" ]
+[ 4,   4,      "viers" ]
+[ 5,   5,      "vijfs" ]
+TABLE     sys.kvk_cp
+SEQUENCE  sys.seq_5700
+#drop TABLE kvk_cp;
+SEQUENCE  sys.seq_5700
+#drop SEQUENCE seq_5700;
+#ROLLBACK;
 
-# 12:37:18 >  
-# 12:37:18 >  Done.
-# 12:37:18 >  
+# 12:44:28 >  
+# 12:44:28 >  "Done."
+# 12:44:28 >  
 
diff --git a/sql/test/seq-default.sql b/sql/test/seq-default.sql
--- a/sql/test/seq-default.sql
+++ b/sql/test/seq-default.sql
@@ -10,9 +10,12 @@ insert into seqdeftest(ts) values ('2005
 insert into seqdeftest(ts) values ('2005-09-23 12:34:26.736');
 select * from seqdeftest;
 
+\dts
+
 drop table seqdeftest;
 drop sequence test_seq;
 
+
 create table seqdeftest (
        d date,
        id serial,
@@ -29,4 +32,45 @@ insert into seqdeftest(d) values ('2005-
 insert into seqdeftest(d) values ('2005-10-01');
 select * from seqdeftest;
 
+\dts
+
+drop table seqdeftest;
+
+
+-- create a user created sequence with name pattern 'seq_####' similar to the 
system generated sequences as in the above table seqdeftest
+CREATE SEQUENCE seq_5700 AS INTEGER;
+CREATE TABLE kvk (
+        id                INTEGER       NOT NULL       DEFAULT next value for 
seq_5700,
+        kvk               BIGINT,
+        bedrijfsnaam      VARCHAR(256),
+        CONSTRAINT kvk_id_pkey PRIMARY KEY (id)
+);
+insert into kvk(kvk, bedrijfsnaam) values (1, 'ones');
+insert into kvk(kvk, bedrijfsnaam) values (2, 'toos');
+select * from kvk;
+
+-- use the same sequence also in another table
+CREATE TABLE kvk_cp (
+        id                INTEGER       NOT NULL       DEFAULT next value for 
seq_5700,
+        kvk               BIGINT,
+        bedrijfsnaam      VARCHAR(256),
+        CONSTRAINT kvk_cp_id_pkey PRIMARY KEY (id)
+);
+insert into kvk_cp(kvk, bedrijfsnaam) values (3, 'dries');
+insert into kvk_cp(kvk, bedrijfsnaam) values (4, 'viers');
+select * from kvk_cp;
+
+\dts
+
+-- when dropping the tables the user defined sequence should *not* be dropped 
implicitly
+drop TABLE kvk;
+
+insert into kvk_cp(kvk, bedrijfsnaam) values (5, 'vijfs');
+select * from kvk_cp;
+drop TABLE kvk_cp;
+
+-- the user created sequence should not have been implicitly dropped at this 
point
+\dts
+drop SEQUENCE seq_5700;
+
 ROLLBACK;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to