123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398 |
- # Copyright Materialize, Inc. and contributors. All rights reserved.
- #
- # Use of this software is governed by the Business Source License
- # included in the LICENSE file at the root of this repository.
- #
- # As of the Change Date specified in that file, in accordance with
- # the Business Source License, use of this software will be governed
- # by the Apache License, Version 2.0.
- #
- # The original source code is subject to the terms of the PostgreSQL license, a copy
- # of which can be found in the LICENSE file at the root of this repository.
- # transliterated from postgres/src/test/regress/sql/name.sql
- query T
- SELECT parse_ident('Schemax.Tabley')::text;
- ----
- {schemax,tabley}
- query T
- SELECT parse_ident('"SchemaX"."TableY"')::text;
- ----
- {SchemaX,TableY}
- query T
- SELECT parse_ident('foo.boo')::text;
- ----
- {foo,boo}
- query error string is not a valid identifier: "foo.boo\[\]"
- SELECT parse_ident('foo.boo[]');
- query T
- SELECT parse_ident('foo.boo[]', false)::text;
- ----
- {foo,boo}
- query error string is not a valid identifier: " "
- SELECT parse_ident(' ');
- query error string is not a valid identifier: " .aaa"
- SELECT parse_ident(' .aaa');
- query error string is not a valid identifier: " aaa . "
- SELECT parse_ident(' aaa . ');
- query error string is not a valid identifier: "aaa.a%b"
- SELECT parse_ident('aaa.a%b');
- query error string is not a valid identifier: "X\rXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
- SELECT parse_ident(E'X\rXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
- query II
- SELECT length(parse_ident[1]), length(parse_ident[2])
- FROM
- (
- SELECT
- parse_ident(
- '"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx".yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
- )
- );
- ----
- 414
- 289
- query T
- SELECT parse_ident(' first . " second " ." third ". " ' || repeat('x',66) || '"')::text;
- ----
- {first," second "," third "," xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
- query error octal escapes are not supported
- SELECT parse_ident(E'"c".X XXXX\002XXXXXX');
- query error string is not a valid identifier: "1020"
- SELECT parse_ident('1020');
- query error string is not a valid identifier: "10.20"
- SELECT parse_ident('10.20');
- query error string is not a valid identifier: "."
- SELECT parse_ident('.');
- query error string is not a valid identifier: ".1020"
- SELECT parse_ident('.1020');
- query error string is not a valid identifier: "xxx.1020"
- SELECT parse_ident('xxx.1020');
- # Non-PG tests
- query error string is not a valid identifier: ""
- SELECT parse_ident('');
- query error string is not a valid identifier: "\$abc"
- SELECT parse_ident('$abc');
- query T
- SELECT parse_ident('"$abc"');
- ----
- {$abc}
- query error string is not a valid identifier: "abc\.\$def"
- SELECT parse_ident('abc.$def');
- query T
- SELECT parse_ident('abc."$def"');
- ----
- {abc,$def}
- query error string is not a valid identifier: "abc\.def \$"
- SELECT parse_ident('abc.def $');
- query T
- SELECT parse_ident('abc."def $"');
- ----
- {abc,"def $"}
- query T
- SELECT parse_ident('abc.def $', false);
- ----
- {abc,def}
- query T
- SELECT parse_ident('a$');
- ----
- {a$}
- query T
- SELECT parse_ident('abc.d$');
- ----
- {abc,d$}
- query T
- SELECT parse_ident('a$.d$');
- ----
- {a$,d$}
- query T
- SELECT parse_ident('🌍');
- ----
- {🌍}
- query T
- SELECT parse_ident('🌍.🌍');
- ----
- {🌍,🌍}
- query T
- SELECT parse_ident('🌍.abc');
- ----
- {🌍,abc}
- query T
- SELECT parse_ident('abc.🌍');
- ----
- {abc,🌍}
- query T
- SELECT parse_ident('"🌍"');
- ----
- {🌍}
- query T
- SELECT parse_ident('"🌍"."🌍"');
- ----
- {🌍,🌍}
- query T
- SELECT parse_ident('"🌍".abc');
- ----
- {🌍,abc}
- query T
- SELECT parse_ident('abc."🌍"');
- ----
- {abc,🌍}
- query T
- SELECT parse_ident(' 🌍 ');
- ----
- {🌍}
- query T
- SELECT parse_ident(' 🌍 . 🌍 ');
- ----
- {🌍,🌍}
- query T
- SELECT parse_ident('" 🌍 "." 🌍 "');
- ----
- {" 🌍 "," 🌍 "}
- query T
- SELECT parse_ident(' 🌍 .abc');
- ----
- {🌍,abc}
- query T
- SELECT parse_ident('abc. 🌍 ');
- ----
- {abc,🌍}
- query T
- SELECT parse_ident('a.b.c.d.e.f');
- ----
- {a,b,c,d,e,f}
- query error string is not a valid identifier: "a\\0b"
- SELECT parse_ident('a\0b');
- query T
- SELECT parse_ident('"a\0b"');
- ----
- {"a\\0b"}
- query error string is not a valid identifier: "a b"
- SELECT parse_ident('a b');
- query error string is not a valid identifier: "a\.b c"
- SELECT parse_ident('a.b c');
- simple
- SELECT parse_ident('a."b');
- ----
- db error: ERROR: string is not a valid identifier: "a.\"b"
- DETAIL: String has unclosed double quotes.
- statement ok
- CREATE TABLE t (c text);
- query T multiline
- EXPLAIN OPTIMIZED PLAN WITH (humanized expressions) AS VERBOSE TEXT FOR SELECT parse_ident(c)::text FROM t;
- ----
- Explained Query:
- Project (#1)
- Map (arraytostr(parse_ident(#0{c}, true)))
- ReadStorage materialize.public.t
- Source materialize.public.t
- Target cluster: quickstart
- EOF
- # normalizing object names; this is largely built on top of parse_ident
- query T
- SELECT mz_internal.mz_normalize_object_name('Dbz.Schemax.Tabley')::text;
- ----
- {dbz,schemax,tabley}
- query T
- SELECT mz_internal.mz_normalize_object_name('"Dbz"."SchemaX"."TableY"')::text;
- ----
- {Dbz,SchemaX,TableY}
- query T
- SELECT mz_internal.mz_normalize_object_name('Schemax.Tabley')::text;
- ----
- {NULL,schemax,tabley}
- query T
- SELECT mz_internal.mz_normalize_object_name('"SchemaX"."TableY"')::text;
- ----
- {NULL,SchemaX,TableY}
- query error db error: ERROR: improper relation name \(too many dotted names\): Dbz\.Schemax\.Tabley\.Cola
- SELECT mz_internal.mz_normalize_object_name('Dbz.Schemax.Tabley.Cola')::text;
- query error db error: ERROR: improper relation name \(too many dotted names\): "Dbz"\."SchemaX"\."TableY"\.Cola
- SELECT mz_internal.mz_normalize_object_name('"Dbz"."SchemaX"."TableY".Cola')::text;
- query error string is not a valid identifier: ""
- SELECT mz_internal.mz_normalize_object_name('');
- query error string is not a valid identifier: " "
- SELECT mz_internal.mz_normalize_object_name(' ');
- query error string is not a valid identifier: "1020"
- SELECT mz_internal.mz_normalize_object_name('1020');
- query T
- SELECT mz_internal.mz_normalize_object_name('"$abc"');
- ----
- {NULL,NULL,$abc}
- query T
- SELECT mz_internal.mz_normalize_object_name('a$.d$');
- ----
- {NULL,a$,d$}
- query T
- SELECT mz_internal.mz_normalize_object_name('a$.b$.c$');
- ----
- {a$,b$,c$}
- query T
- SELECT mz_internal.mz_normalize_object_name('"🌍"');
- ----
- {NULL,NULL,🌍}
- query T
- SELECT mz_internal.mz_normalize_object_name('"🌍"."🌍"."🌍"');
- ----
- {🌍,🌍,🌍}
- query T
- SELECT mz_internal.mz_normalize_object_name('🌍.🌍.🌍');
- ----
- {🌍,🌍,🌍}
- query error db error: ERROR: improper relation name \(too many dotted names\): 🌍\.🌍\.🌍\.🌍
- SELECT mz_internal.mz_normalize_object_name('🌍.🌍.🌍.🌍');
- # normalizing schema names; this is largely built on top of parse_ident
- query T
- SELECT mz_internal.mz_normalize_schema_name('Dbz.Schemax')::text;
- ----
- {dbz,schemax}
- query T
- SELECT mz_internal.mz_normalize_schema_name('"Dbz"."SchemaX"')::text;
- ----
- {Dbz,SchemaX}
- query T
- SELECT mz_internal.mz_normalize_schema_name('Schemax')::text;
- ----
- {NULL,schemax}
- query T
- SELECT mz_internal.mz_normalize_schema_name('"SchemaX"')::text;
- ----
- {NULL,SchemaX}
- query error db error: ERROR: improper schema name \(too many dotted names\): Dbz\.Schemax\.Tabley
- SELECT mz_internal.mz_normalize_schema_name('Dbz.Schemax.Tabley')::text;
- query error db error: ERROR: improper schema name \(too many dotted names\): "Dbz"\."SchemaX"\."TableY"
- SELECT mz_internal.mz_normalize_schema_name('"Dbz"."SchemaX"."TableY"')::text;
- query error string is not a valid identifier: ""
- SELECT mz_internal.mz_normalize_schema_name('');
- query error string is not a valid identifier: " "
- SELECT mz_internal.mz_normalize_schema_name(' ');
- query error string is not a valid identifier: "1020"
- SELECT mz_internal.mz_normalize_schema_name('1020');
- query T
- SELECT mz_internal.mz_normalize_schema_name('"$abc"');
- ----
- {NULL,$abc}
- query T
- SELECT mz_internal.mz_normalize_schema_name('a$.d$');
- ----
- {a$,d$}
- query T
- SELECT mz_internal.mz_normalize_schema_name('"🌍"');
- ----
- {NULL,🌍}
- query T
- SELECT mz_internal.mz_normalize_schema_name('"🌍"."🌍"');
- ----
- {🌍,🌍}
- query T
- SELECT mz_internal.mz_normalize_schema_name('🌍.🌍');
- ----
- {🌍,🌍}
- query error db error: ERROR: improper schema name \(too many dotted names\): 🌍\.🌍\.🌍
- SELECT mz_internal.mz_normalize_schema_name('🌍.🌍.🌍');
- statement ok
- DROP TABLE IF EXISTS t;
- statement ok
- CREATE TABLE t (c text);
- query T multiline
- EXPLAIN OPTIMIZED PLAN WITH (humanized expressions) AS VERBOSE TEXT FOR SELECT mz_internal.mz_normalize_object_name(c)::text FROM t;
- ----
- Explained Query:
- Project (#1)
- Map (arraytostr(case when (#0{c}) IS NULL then null else case when ((parse_ident(#0{c}, true) array_length 1) > 3) then error_if_null(null, ("improper relation name (too many dotted names): " || #0{c})) else (array_fill(null, array[(3 - (parse_ident(#0{c}, true) array_length 1))]) || parse_ident(#0{c}, true)) end end))
- ReadStorage materialize.public.t
- Source materialize.public.t
- Target cluster: quickstart
- EOF
|