table.slt 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510
  1. # Copyright 2015 - 2019 The Cockroach Authors. All rights reserved.
  2. # Copyright Materialize, Inc. and contributors. All rights reserved.
  3. #
  4. # Use of this software is governed by the Business Source License
  5. # included in the LICENSE file at the root of this repository.
  6. #
  7. # As of the Change Date specified in that file, in accordance with
  8. # the Business Source License, use of this software will be governed
  9. # by the Apache License, Version 2.0.
  10. #
  11. # This file is derived from the logic test suite in CockroachDB. The
  12. # original file was retrieved on June 10, 2019 from:
  13. #
  14. # https://github.com/cockroachdb/cockroach/blob/d2f7fbf5dd1fc1a099bbad790a2e1f7c60a66cc3/pkg/sql/logictest/testdata/logic_test/table
  15. #
  16. # The original source code is subject to the terms of the Apache
  17. # 2.0 license, a copy of which can be found in the LICENSE file at the
  18. # root of this repository.
  19. # not supported yet
  20. halt
  21. mode cockroach
  22. simple conn=mz_system,user=mz_system
  23. ALTER SYSTEM SET unsafe_enable_table_keys = true
  24. ----
  25. COMPLETE 0
  26. statement ok
  27. SET DATABASE = ""
  28. statement error no database specified
  29. CREATE TABLE a (id INT PRIMARY KEY)
  30. statement error invalid table name: test.""
  31. CREATE TABLE test."" (id INT PRIMARY KEY)
  32. statement ok
  33. CREATE TABLE test.a (id INT PRIMARY KEY)
  34. statement error pgcode 42P07 relation "a" already exists
  35. CREATE TABLE test.a (id INT PRIMARY KEY)
  36. statement ok
  37. SET DATABASE = test
  38. statement error invalid table name: ""
  39. CREATE TABLE "" (id INT PRIMARY KEY)
  40. statement error pgcode 42P07 relation "a" already exists
  41. CREATE TABLE a (id INT PRIMARY KEY)
  42. statement error duplicate column name: "id"
  43. CREATE TABLE b (id INT PRIMARY KEY, id INT)
  44. statement error multiple primary keys for table "b" are not allowed
  45. CREATE TABLE b (id INT PRIMARY KEY, id2 INT PRIMARY KEY)
  46. statement error index \"primary\" contains duplicate column \"a\"
  47. CREATE TABLE dup_primary (a int, primary key (a,a))
  48. statement error index \"dup_unique_a_a_key\" contains duplicate column \"a\"
  49. CREATE TABLE dup_unique (a int, unique (a,a))
  50. statement ok
  51. CREATE TABLE IF NOT EXISTS a (id INT PRIMARY KEY)
  52. statement ok
  53. COMMENT ON TABLE a IS 'a_comment'
  54. query T colnames
  55. SHOW TABLES FROM test
  56. ----
  57. table_name
  58. a
  59. statement ok
  60. CREATE TABLE b (id INT PRIMARY KEY)
  61. statement ok
  62. CREATE TABLE c (
  63. id INT PRIMARY KEY,
  64. foo INT,
  65. bar INT,
  66. INDEX c_foo_idx (foo),
  67. INDEX (foo),
  68. INDEX c_foo_bar_idx (foo ASC, bar DESC),
  69. UNIQUE (bar)
  70. )
  71. query TTBITTBB colnames
  72. SHOW INDEXES ON c
  73. ----
  74. table_name index_name non_unique seq_in_index column_name direction storing implicit
  75. c primary false 1 id ASC false false
  76. c c_foo_idx true 1 foo ASC false false
  77. c c_foo_idx true 2 id ASC false true
  78. c c_foo_idx1 true 1 foo ASC false false
  79. c c_foo_idx1 true 2 id ASC false true
  80. c c_foo_bar_idx true 1 foo ASC false false
  81. c c_foo_bar_idx true 2 bar DESC false false
  82. c c_foo_bar_idx true 3 id ASC false true
  83. c c_bar_key false 1 bar ASC false false
  84. c c_bar_key false 2 id ASC false true
  85. # primary keys can never be null
  86. statement ok
  87. CREATE TABLE d (
  88. id INT PRIMARY KEY NULL
  89. )
  90. query TTBTTTB colnames
  91. SHOW COLUMNS FROM d
  92. ----
  93. column_name data_type is_nullable column_default generation_expression indices is_hidden
  94. id INT8 false NULL · {primary} false
  95. statement ok
  96. CREATE TABLE e (
  97. id INT NULL PRIMARY KEY
  98. )
  99. query TTBTTTB colnames
  100. SHOW COLUMNS FROM e
  101. ----
  102. column_name data_type is_nullable column_default generation_expression indices is_hidden
  103. id INT8 false NULL · {primary} false
  104. statement ok
  105. CREATE TABLE f (
  106. a INT,
  107. b INT,
  108. c INT,
  109. PRIMARY KEY (a, b, c)
  110. )
  111. query TTBTTTB colnames
  112. SHOW COLUMNS FROM f
  113. ----
  114. column_name data_type is_nullable column_default generation_expression indices is_hidden
  115. a INT8 false NULL · {primary} false
  116. b INT8 false NULL · {primary} false
  117. c INT8 false NULL · {primary} false
  118. query TT
  119. SHOW TABLES FROM test WITH COMMENT
  120. ----
  121. a a_comment
  122. b ·
  123. c ·
  124. d ·
  125. e ·
  126. f ·
  127. statement ok
  128. SET DATABASE = ""
  129. query error pgcode 42P01 relation "users" does not exist
  130. SHOW COLUMNS FROM users
  131. query error pgcode 42P01 relation "test.users" does not exist
  132. SHOW COLUMNS FROM test.users
  133. query error pgcode 42P01 relation "users" does not exist
  134. SHOW INDEXES ON users
  135. query error pgcode 42P01 relation "test.users" does not exist
  136. SHOW INDEXES ON test.users
  137. statement ok
  138. CREATE TABLE test.users (
  139. id INT PRIMARY KEY,
  140. name VARCHAR NOT NULL,
  141. title VARCHAR,
  142. nickname STRING CHECK (length(nickname) < 10),
  143. username STRING(10),
  144. email VARCHAR(100) NULL,
  145. INDEX foo (name),
  146. CHECK (length(nickname) < length(name)),
  147. UNIQUE INDEX bar (id, name),
  148. FAMILY "primary" (id, name),
  149. FAMILY fam_1_title (title),
  150. FAMILY fam_2_nickname (nickname),
  151. FAMILY fam_3_username_email (username, email)
  152. )
  153. query TTBTTTB colnames
  154. SHOW COLUMNS ON test.users
  155. ----
  156. column_name data_type is_nullable column_default generation_expression indices is_hidden
  157. id INT8 false NULL · {primary,foo,bar} false
  158. name VARCHAR false NULL · {foo,bar} false
  159. title VARCHAR true NULL · {} false
  160. nickname STRING true NULL · {} false
  161. username STRING(10) true NULL · {} false
  162. email VARCHAR(100) true NULL · {} false
  163. query TTBITTBB colnames
  164. SHOW INDEXES ON test.users
  165. ----
  166. table_name index_name non_unique seq_in_index column_name direction storing implicit
  167. users primary false 1 id ASC false false
  168. users foo true 1 name ASC false false
  169. users foo true 2 id ASC false true
  170. users bar false 1 id ASC false false
  171. users bar false 2 name ASC false false
  172. statement error precision for type float must be at least 1 bit
  173. CREATE TABLE test.precision (x FLOAT(0))
  174. statement error scale \(2\) must be between 0 and precision \(0\) at or near "\)"
  175. CREATE TABLE test.precision (x DECIMAL(0, 2))
  176. statement error scale \(4\) must be between 0 and precision \(2\) at or near "\)"
  177. CREATE TABLE test.precision (x DECIMAL(2, 4))
  178. query TT
  179. SHOW CREATE TABLE test.users
  180. ----
  181. test.public.users CREATE TABLE users (
  182. id INT8 NOT NULL,
  183. name VARCHAR NOT NULL,
  184. title VARCHAR NULL,
  185. nickname STRING NULL,
  186. username STRING(10) NULL,
  187. email VARCHAR(100) NULL,
  188. CONSTRAINT "primary" PRIMARY KEY (id ASC),
  189. INDEX foo (name ASC),
  190. UNIQUE INDEX bar (id ASC, name ASC),
  191. FAMILY "primary" (id, name),
  192. FAMILY fam_1_title (title),
  193. FAMILY fam_2_nickname (nickname),
  194. FAMILY fam_3_username_email (username, email),
  195. CONSTRAINT check_nickname_name CHECK (length(nickname) < length(name)),
  196. CONSTRAINT check_nickname CHECK (length(nickname) < 10)
  197. )
  198. statement ok
  199. CREATE TABLE test.dupe_generated (
  200. foo INT CHECK (foo > 1),
  201. bar INT CHECK (bar > 2),
  202. CHECK (foo > 2),
  203. CHECK (foo < 10)
  204. )
  205. query TTTTB colnames
  206. SHOW CONSTRAINTS FROM test.dupe_generated
  207. ----
  208. table_name constraint_name constraint_type details validated
  209. dupe_generated check_bar CHECK CHECK (bar > 2) true
  210. dupe_generated check_foo CHECK CHECK (foo > 2) true
  211. dupe_generated check_foo1 CHECK CHECK (foo < 10) true
  212. dupe_generated check_foo2 CHECK CHECK (foo > 1) true
  213. statement ok
  214. CREATE TABLE test.named_constraints (
  215. id INT CONSTRAINT pk PRIMARY KEY,
  216. name VARCHAR CONSTRAINT nn NOT NULL,
  217. title VARCHAR CONSTRAINT def DEFAULT 'VP of Something',
  218. nickname STRING CONSTRAINT ck1 CHECK (length(nickname) < 10),
  219. username STRING(10) CONSTRAINT nl NULL,
  220. email VARCHAR(100) CONSTRAINT uq UNIQUE,
  221. INDEX foo (name),
  222. CONSTRAINT uq2 UNIQUE (username),
  223. CONSTRAINT ck2 CHECK (length(nickname) < length(name)),
  224. UNIQUE INDEX bar (id, name),
  225. FAMILY "primary" (id, name),
  226. FAMILY fam_1_title (title),
  227. FAMILY fam_2_nickname (nickname),
  228. FAMILY fam_3_username_email (username, email)
  229. )
  230. query TT
  231. SHOW CREATE TABLE test.named_constraints
  232. ----
  233. test.public.named_constraints CREATE TABLE named_constraints (
  234. id INT8 NOT NULL,
  235. name VARCHAR NOT NULL,
  236. title VARCHAR NULL DEFAULT 'VP of Something':::STRING,
  237. nickname STRING NULL,
  238. username STRING(10) NULL,
  239. email VARCHAR(100) NULL,
  240. CONSTRAINT pk PRIMARY KEY (id ASC),
  241. UNIQUE INDEX uq (email ASC),
  242. INDEX foo (name ASC),
  243. UNIQUE INDEX uq2 (username ASC),
  244. UNIQUE INDEX bar (id ASC, name ASC),
  245. FAMILY "primary" (id, name),
  246. FAMILY fam_1_title (title),
  247. FAMILY fam_2_nickname (nickname),
  248. FAMILY fam_3_username_email (username, email),
  249. CONSTRAINT ck2 CHECK (length(nickname) < length(name)),
  250. CONSTRAINT ck1 CHECK (length(nickname) < 10)
  251. )
  252. query TTTTB colnames
  253. SHOW CONSTRAINTS FROM test.named_constraints
  254. ----
  255. table_name constraint_name constraint_type details validated
  256. named_constraints bar UNIQUE UNIQUE (id ASC, name ASC) true
  257. named_constraints ck1 CHECK CHECK (length(nickname) < 10) true
  258. named_constraints ck2 CHECK CHECK (length(nickname) < length(name)) true
  259. named_constraints pk PRIMARY KEY PRIMARY KEY (id ASC) true
  260. named_constraints uq UNIQUE UNIQUE (email ASC) true
  261. named_constraints uq2 UNIQUE UNIQUE (username ASC) true
  262. statement error duplicate constraint name: "pk"
  263. CREATE TABLE test.dupe_named_constraints (
  264. id INT CONSTRAINT pk PRIMARY KEY,
  265. title VARCHAR CONSTRAINT one CHECK (1>1),
  266. name VARCHAR CONSTRAINT pk UNIQUE
  267. )
  268. statement error duplicate constraint name: "one"
  269. CREATE TABLE test.dupe_named_constraints (
  270. id INT CONSTRAINT pk PRIMARY KEY,
  271. title VARCHAR CONSTRAINT one CHECK (1>1),
  272. name VARCHAR CONSTRAINT one UNIQUE
  273. )
  274. statement error duplicate constraint name: "one"
  275. CREATE TABLE test.dupe_named_constraints (
  276. id INT CONSTRAINT pk PRIMARY KEY,
  277. title VARCHAR CONSTRAINT one CHECK (1>1),
  278. name VARCHAR CONSTRAINT one REFERENCES test.named_constraints (username),
  279. INDEX (name)
  280. )
  281. statement error duplicate constraint name: "one"
  282. CREATE TABLE test.dupe_named_constraints (
  283. id INT CONSTRAINT pk PRIMARY KEY,
  284. title VARCHAR CONSTRAINT one CHECK (1>1) CONSTRAINT one CHECK (1<1)
  285. )
  286. statement ok
  287. SET database = test
  288. statement ok
  289. CREATE TABLE alltypes (
  290. cbigint BIGINT,
  291. cbigserial BIGSERIAL,
  292. cblob BLOB,
  293. cbool BOOL,
  294. cbit BIT,
  295. cbit12 BIT(12),
  296. cvarbit VARBIT,
  297. cvarbit12 VARBIT(12),
  298. cbytea BYTEA,
  299. cbytes BYTES,
  300. cchar CHAR,
  301. cchar12 CHAR(12),
  302. cdate DATE,
  303. cdec DEC,
  304. cdec1 DEC(1),
  305. cdec21 DEC(2,1),
  306. cdecimal DECIMAL,
  307. cdecimal1 DECIMAL(1),
  308. cdecimal21 DECIMAL(2,1),
  309. cdoubleprecision DOUBLE PRECISION,
  310. cfloat FLOAT,
  311. cfloat4 FLOAT4,
  312. cfloat8 FLOAT8,
  313. cint INT,
  314. cint2 INT2,
  315. cint4 INT4,
  316. cint64 INT64,
  317. cint8 INT8,
  318. cinteger INTEGER,
  319. cinterval INTERVAL,
  320. cjson JSONB,
  321. cnumeric NUMERIC,
  322. cnumeric1 NUMERIC(1),
  323. cnumeric21 NUMERIC(2,1),
  324. cqchar "char",
  325. creal REAL,
  326. cserial SERIAL,
  327. csmallint SMALLINT,
  328. csmallserial SMALLSERIAL,
  329. cstring STRING,
  330. cstring12 STRING(12),
  331. ctext TEXT,
  332. ctimestamp TIMESTAMP,
  333. ctimestampwtz TIMESTAMPTZ,
  334. cvarchar VARCHAR,
  335. cvarchar12 VARCHAR(12)
  336. )
  337. query TTBTTTB colnames
  338. SHOW COLUMNS FROM alltypes
  339. ----
  340. column_name data_type is_nullable column_default generation_expression indices is_hidden
  341. cbigint INT8 true NULL · {} false
  342. cbigserial INT8 false unique_rowid() · {} false
  343. cblob BYTES true NULL · {} false
  344. cbool BOOL true NULL · {} false
  345. cbit BIT true NULL · {} false
  346. cbit12 BIT(12) true NULL · {} false
  347. cvarbit VARBIT true NULL · {} false
  348. cvarbit12 VARBIT(12) true NULL · {} false
  349. cbytea BYTES true NULL · {} false
  350. cbytes BYTES true NULL · {} false
  351. cchar CHAR true NULL · {} false
  352. cchar12 CHAR(12) true NULL · {} false
  353. cdate DATE true NULL · {} false
  354. cdec DECIMAL true NULL · {} false
  355. cdec1 DECIMAL(1) true NULL · {} false
  356. cdec21 DECIMAL(2,1) true NULL · {} false
  357. cdecimal DECIMAL true NULL · {} false
  358. cdecimal1 DECIMAL(1) true NULL · {} false
  359. cdecimal21 DECIMAL(2,1) true NULL · {} false
  360. cdoubleprecision FLOAT8 true NULL · {} false
  361. cfloat FLOAT8 true NULL · {} false
  362. cfloat4 FLOAT4 true NULL · {} false
  363. cfloat8 FLOAT8 true NULL · {} false
  364. cint INT8 true NULL · {} false
  365. cint2 INT2 true NULL · {} false
  366. cint4 INT4 true NULL · {} false
  367. cint64 INT8 true NULL · {} false
  368. cint8 INT8 true NULL · {} false
  369. cinteger INT8 true NULL · {} false
  370. cinterval INTERVAL true NULL · {} false
  371. cjson JSONB true NULL · {} false
  372. cnumeric DECIMAL true NULL · {} false
  373. cnumeric1 DECIMAL(1) true NULL · {} false
  374. cnumeric21 DECIMAL(2,1) true NULL · {} false
  375. cqchar "char" true NULL · {} false
  376. creal FLOAT4 true NULL · {} false
  377. cserial INT8 false unique_rowid() · {} false
  378. csmallint INT2 true NULL · {} false
  379. csmallserial INT8 false unique_rowid() · {} false
  380. cstring STRING true NULL · {} false
  381. cstring12 STRING(12) true NULL · {} false
  382. ctext STRING true NULL · {} false
  383. ctimestamp TIMESTAMP true NULL · {} false
  384. ctimestampwtz TIMESTAMPTZ true NULL · {} false
  385. cvarchar VARCHAR true NULL · {} false
  386. cvarchar12 VARCHAR(12) true NULL · {} false
  387. rowid INT8 false unique_rowid() · {primary} true
  388. statement ok
  389. CREATE DATABASE IF NOT EXISTS smtng
  390. statement ok
  391. CREATE TABLE IF NOT EXISTS smtng.something (
  392. ID SERIAL PRIMARY KEY
  393. )
  394. statement ok
  395. ALTER TABLE smtng.something ADD COLUMN IF NOT EXISTS OWNER_ID INT
  396. statement ok
  397. ALTER TABLE smtng.something ADD COLUMN IF NOT EXISTS MODEL_ID INT
  398. statement ok
  399. ALTER TABLE smtng.something ADD COLUMN IF NOT EXISTS NAME STRING
  400. statement ok
  401. CREATE DATABASE IF NOT EXISTS smtng
  402. statement ok
  403. CREATE TABLE IF NOT EXISTS smtng.something (
  404. ID SERIAL PRIMARY KEY
  405. )
  406. statement ok
  407. ALTER TABLE smtng.something ADD COLUMN IF NOT EXISTS OWNER_ID INT
  408. statement ok
  409. ALTER TABLE smtng.something ADD COLUMN IF NOT EXISTS MODEL_ID INT
  410. statement ok
  411. ALTER TABLE smtng.something ADD COLUMN IF NOT EXISTS NAME STRING
  412. # Regression test for database-issues#3922
  413. statement ok
  414. CREATE TABLE test.empty ()
  415. statement ok
  416. SELECT * FROM test.empty
  417. # Issue materialize#14308: support tables with DEFAULT NULL columns.
  418. statement ok
  419. CREATE TABLE test.null_default (
  420. ts timestamp NULL DEFAULT NULL
  421. )
  422. query TT
  423. SHOW CREATE TABLE test.null_default
  424. ----
  425. test.public.null_default CREATE TABLE null_default (
  426. ts TIMESTAMP NULL DEFAULT NULL,
  427. FAMILY "primary" (ts, rowid)
  428. )
  429. # Issue materialize#13873: don't permit invalid default columns
  430. statement error could not parse "blah" as type decimal
  431. CREATE TABLE test.t1 (a DECIMAL DEFAULT (DECIMAL 'blah'));
  432. statement error could not parse "blah" as type decimal
  433. create table test.t1 (c decimal default if(false, 1, 'blah'::decimal));
  434. statement ok
  435. CREATE DATABASE a; CREATE TABLE a.c(d INT); INSERT INTO a.public.c(d) VALUES (1)
  436. query I
  437. SELECT a.public.c.d FROM a.public.c
  438. ----
  439. 1