mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-10-03 01:46:57 +02:00
198 lines
8.1 KiB
Plaintext
198 lines
8.1 KiB
Plaintext
--
|
||
-- NAME
|
||
-- all inputs are silently truncated at NAMEDATALEN-1 (63) characters
|
||
--
|
||
-- fixed-length by reference
|
||
SELECT name 'name string' = name 'name string' AS "True";
|
||
True
|
||
------
|
||
t
|
||
(1 row)
|
||
|
||
SELECT name 'name string' = name 'name string ' AS "False";
|
||
False
|
||
-------
|
||
f
|
||
(1 row)
|
||
|
||
--
|
||
--
|
||
--
|
||
CREATE TABLE NAME_TBL(f1 name);
|
||
INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR');
|
||
INSERT INTO NAME_TBL(f1) VALUES ('1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr');
|
||
INSERT INTO NAME_TBL(f1) VALUES ('asdfghjkl;');
|
||
INSERT INTO NAME_TBL(f1) VALUES ('343f%2a');
|
||
INSERT INTO NAME_TBL(f1) VALUES ('d34aaasdf');
|
||
INSERT INTO NAME_TBL(f1) VALUES ('');
|
||
INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ');
|
||
SELECT '' AS seven, * FROM NAME_TBL;
|
||
seven | f1
|
||
-------+-----------------------------------------------------------------
|
||
| 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
|
||
| 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
|
||
| asdfghjkl;
|
||
| 343f%2a
|
||
| d34aaasdf
|
||
|
|
||
| 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
|
||
(7 rows)
|
||
|
||
SELECT '' AS six, c.f1 FROM NAME_TBL c WHERE c.f1 <> '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
|
||
six | f1
|
||
-----+-----------------------------------------------------------------
|
||
| 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
|
||
| asdfghjkl;
|
||
| 343f%2a
|
||
| d34aaasdf
|
||
|
|
||
(5 rows)
|
||
|
||
SELECT '' AS one, c.f1 FROM NAME_TBL c WHERE c.f1 = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
|
||
one | f1
|
||
-----+-----------------------------------------------------------------
|
||
| 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
|
||
| 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
|
||
(2 rows)
|
||
|
||
SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 < '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
|
||
three | f1
|
||
-------+----
|
||
|
|
||
(1 row)
|
||
|
||
SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 <= '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
|
||
four | f1
|
||
------+-----------------------------------------------------------------
|
||
| 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
|
||
|
|
||
| 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
|
||
(3 rows)
|
||
|
||
SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 > '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
|
||
three | f1
|
||
-------+-----------------------------------------------------------------
|
||
| 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
|
||
| asdfghjkl;
|
||
| 343f%2a
|
||
| d34aaasdf
|
||
(4 rows)
|
||
|
||
SELECT '' AS four, c.f1 FROM NAME_TBL c WHERE c.f1 >= '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
|
||
four | f1
|
||
------+-----------------------------------------------------------------
|
||
| 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
|
||
| 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
|
||
| asdfghjkl;
|
||
| 343f%2a
|
||
| d34aaasdf
|
||
| 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
|
||
(6 rows)
|
||
|
||
SELECT '' AS seven, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*';
|
||
seven | f1
|
||
-------+-----------------------------------------------------------------
|
||
| 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
|
||
| 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
|
||
| asdfghjkl;
|
||
| 343f%2a
|
||
| d34aaasdf
|
||
|
|
||
| 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
|
||
(7 rows)
|
||
|
||
SELECT '' AS zero, c.f1 FROM NAME_TBL c WHERE c.f1 !~ '.*';
|
||
zero | f1
|
||
------+----
|
||
(0 rows)
|
||
|
||
SELECT '' AS three, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '[0-9]';
|
||
three | f1
|
||
-------+-----------------------------------------------------------------
|
||
| 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
|
||
| 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
|
||
| 343f%2a
|
||
| d34aaasdf
|
||
| 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
|
||
(5 rows)
|
||
|
||
SELECT '' AS two, c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*asdf.*';
|
||
two | f1
|
||
-----+------------
|
||
| asdfghjkl;
|
||
| d34aaasdf
|
||
(2 rows)
|
||
|
||
DROP TABLE NAME_TBL;
|
||
DO $$
|
||
DECLARE r text[];
|
||
BEGIN
|
||
r := parse_ident('Schemax.Tabley');
|
||
RAISE NOTICE '%', format('%I.%I', r[1], r[2]);
|
||
r := parse_ident('"SchemaX"."TableY"');
|
||
RAISE NOTICE '%', format('%I.%I', r[1], r[2]);
|
||
END;
|
||
$$;
|
||
NOTICE: schemax.tabley
|
||
NOTICE: "SchemaX"."TableY"
|
||
SELECT parse_ident('foo.boo');
|
||
parse_ident
|
||
-------------
|
||
{foo,boo}
|
||
(1 row)
|
||
|
||
SELECT parse_ident('foo.boo[]'); -- should fail
|
||
ERROR: string is not a valid identifier: "foo.boo[]"
|
||
SELECT parse_ident('foo.boo[]', strict => false); -- ok
|
||
parse_ident
|
||
-------------
|
||
{foo,boo}
|
||
(1 row)
|
||
|
||
-- should fail
|
||
SELECT parse_ident(' ');
|
||
ERROR: string is not a valid identifier: " "
|
||
SELECT parse_ident(' .aaa');
|
||
ERROR: string is not a valid identifier: " .aaa"
|
||
DETAIL: No valid identifier before ".".
|
||
SELECT parse_ident(' aaa . ');
|
||
ERROR: string is not a valid identifier: " aaa . "
|
||
DETAIL: No valid identifier after ".".
|
||
SELECT parse_ident('aaa.a%b');
|
||
ERROR: string is not a valid identifier: "aaa.a%b"
|
||
SELECT parse_ident(E'X\rXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
|
||
ERROR: string is not a valid identifier: "X
|
||
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
|
||
SELECT length(a[1]), length(a[2]) from parse_ident('"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx".yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy') as a ;
|
||
length | length
|
||
--------+--------
|
||
414 | 289
|
||
(1 row)
|
||
|
||
SELECT parse_ident(' first . " second " ." third ". " ' || repeat('x',66) || '"');
|
||
parse_ident
|
||
-----------------------------------------------------------------------------------------------------------
|
||
{first," second "," third "," xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
|
||
(1 row)
|
||
|
||
SELECT parse_ident(' first . " second " ." third ". " ' || repeat('x',66) || '"')::name[];
|
||
parse_ident
|
||
------------------------------------------------------------------------------------------------------
|
||
{first," second "," third "," xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
|
||
(1 row)
|
||
|
||
SELECT parse_ident(E'"c".X XXXX\002XXXXXX');
|
||
ERROR: string is not a valid identifier: ""c".X XXXXXXXXXX"
|
||
SELECT parse_ident('1020');
|
||
ERROR: string is not a valid identifier: "1020"
|
||
SELECT parse_ident('10.20');
|
||
ERROR: string is not a valid identifier: "10.20"
|
||
SELECT parse_ident('.');
|
||
ERROR: string is not a valid identifier: "."
|
||
DETAIL: No valid identifier before ".".
|
||
SELECT parse_ident('.1020');
|
||
ERROR: string is not a valid identifier: ".1020"
|
||
DETAIL: No valid identifier before ".".
|
||
SELECT parse_ident('xxx.1020');
|
||
ERROR: string is not a valid identifier: "xxx.1020"
|
||
DETAIL: No valid identifier after ".".
|