1--
2-- NAME
3-- all inputs are silently truncated at NAMEDATALEN-1 (63) characters
4--
5
6-- fixed-length by reference
7SELECT name 'name string' = name 'name string' AS "True";
8
9SELECT name 'name string' = name 'name string ' AS "False";
10
11--
12--
13--
14
15CREATE TABLE NAME_TBL(f1 name);
16
17INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR');
18
19INSERT INTO NAME_TBL(f1) VALUES ('1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr');
20
21INSERT INTO NAME_TBL(f1) VALUES ('asdfghjkl;');
22
23INSERT INTO NAME_TBL(f1) VALUES ('343f%2a');
24
25INSERT INTO NAME_TBL(f1) VALUES ('d34aaasdf');
26
27INSERT INTO NAME_TBL(f1) VALUES ('');
28
29INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ');
30
31
32SELECT '' AS seven, * FROM NAME_TBL;
33
34SELECT '' AS six, c.f1 FROM NAME_TBL c WHERE c.f1 <> '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
35
36SELECT '' AS one, c.f1 FROM NAME_TBL c WHERE c.f1 = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
37
38SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 < '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
39
40SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 <= '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
41
42SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 > '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
43
44SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 >= '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
45
46SELECT '' AS seven, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*';
47
48SELECT '' AS zero, c.f1 FROM NAME_TBL c WHERE c.f1 !~ '.*';
49
50SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '[0-9]';
51
52SELECT '' AS two, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*asdf.*';
53
54DROP TABLE NAME_TBL;
55
56DO $$
57DECLARE r text[];
58BEGIN
59  r := parse_ident('Schemax.Tabley');
60  RAISE NOTICE '%', format('%I.%I', r[1], r[2]);
61  r := parse_ident('"SchemaX"."TableY"');
62  RAISE NOTICE '%', format('%I.%I', r[1], r[2]);
63END;
64$$;
65
66SELECT parse_ident('foo.boo');
67SELECT parse_ident('foo.boo[]'); -- should fail
68SELECT parse_ident('foo.boo[]', strict => false); -- ok
69
70-- should fail
71SELECT parse_ident(' ');
72SELECT parse_ident(' .aaa');
73SELECT parse_ident(' aaa . ');
74SELECT parse_ident('aaa.a%b');
75SELECT parse_ident(E'X\rXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
76
77SELECT length(a[1]), length(a[2]) from parse_ident('"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx".yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy') as a ;
78
79SELECT parse_ident(' first . "  second  " ."   third   ". "  ' || repeat('x',66) || '"');
80SELECT parse_ident(' first . "  second  " ."   third   ". "  ' || repeat('x',66) || '"')::name[];
81
82SELECT parse_ident(E'"c".X XXXX\002XXXXXX');
83SELECT parse_ident('1020');
84SELECT parse_ident('10.20');
85SELECT parse_ident('.');
86SELECT parse_ident('.1020');
87SELECT parse_ident('xxx.1020');
88