name.out 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. --
  2. -- NAME
  3. -- all inputs are silently truncated at NAMEDATALEN-1 (63) characters
  4. --
  5. -- fixed-length by reference
  6. SELECT name 'name string' = name 'name string' AS "True";
  7. True
  8. ------
  9. t
  10. (1 row)
  11. SELECT name 'name string' = name 'name string ' AS "False";
  12. False
  13. -------
  14. f
  15. (1 row)
  16. --
  17. --
  18. --
  19. CREATE TABLE NAME_TBL(f1 name);
  20. INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR');
  21. INSERT INTO NAME_TBL(f1) VALUES ('1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopqr');
  22. INSERT INTO NAME_TBL(f1) VALUES ('asdfghjkl;');
  23. INSERT INTO NAME_TBL(f1) VALUES ('343f%2a');
  24. INSERT INTO NAME_TBL(f1) VALUES ('d34aaasdf');
  25. INSERT INTO NAME_TBL(f1) VALUES ('');
  26. INSERT INTO NAME_TBL(f1) VALUES ('1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ');
  27. SELECT * FROM NAME_TBL;
  28. f1
  29. -----------------------------------------------------------------
  30. 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
  31. 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
  32. asdfghjkl;
  33. 343f%2a
  34. d34aaasdf
  35. 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
  36. (7 rows)
  37. SELECT c.f1 FROM NAME_TBL c WHERE c.f1 <> '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
  38. f1
  39. -----------------------------------------------------------------
  40. 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
  41. asdfghjkl;
  42. 343f%2a
  43. d34aaasdf
  44. (5 rows)
  45. SELECT c.f1 FROM NAME_TBL c WHERE c.f1 = '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
  46. f1
  47. -----------------------------------------------------------------
  48. 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
  49. 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
  50. (2 rows)
  51. SELECT c.f1 FROM NAME_TBL c WHERE c.f1 < '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
  52. f1
  53. ----
  54. (1 row)
  55. SELECT c.f1 FROM NAME_TBL c WHERE c.f1 <= '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
  56. f1
  57. -----------------------------------------------------------------
  58. 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
  59. 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
  60. (3 rows)
  61. SELECT c.f1 FROM NAME_TBL c WHERE c.f1 > '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
  62. f1
  63. -----------------------------------------------------------------
  64. 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
  65. asdfghjkl;
  66. 343f%2a
  67. d34aaasdf
  68. (4 rows)
  69. SELECT c.f1 FROM NAME_TBL c WHERE c.f1 >= '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQR';
  70. f1
  71. -----------------------------------------------------------------
  72. 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
  73. 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
  74. asdfghjkl;
  75. 343f%2a
  76. d34aaasdf
  77. 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
  78. (6 rows)
  79. SELECT c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*';
  80. f1
  81. -----------------------------------------------------------------
  82. 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
  83. 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
  84. asdfghjkl;
  85. 343f%2a
  86. d34aaasdf
  87. 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
  88. (7 rows)
  89. SELECT c.f1 FROM NAME_TBL c WHERE c.f1 !~ '.*';
  90. f1
  91. ----
  92. (0 rows)
  93. SELECT c.f1 FROM NAME_TBL c WHERE c.f1 ~ '[0-9]';
  94. f1
  95. -----------------------------------------------------------------
  96. 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
  97. 1234567890abcdefghijklmnopqrstuvwxyz1234567890abcdefghijklmnopq
  98. 343f%2a
  99. d34aaasdf
  100. 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890ABCDEFGHIJKLMNOPQ
  101. (5 rows)
  102. SELECT c.f1 FROM NAME_TBL c WHERE c.f1 ~ '.*asdf.*';
  103. f1
  104. ------------
  105. asdfghjkl;
  106. d34aaasdf
  107. (2 rows)
  108. DROP TABLE NAME_TBL;
  109. DO $$
  110. DECLARE r text[];
  111. BEGIN
  112. r := parse_ident('Schemax.Tabley');
  113. RAISE NOTICE '%', format('%I.%I', r[1], r[2]);
  114. r := parse_ident('"SchemaX"."TableY"');
  115. RAISE NOTICE '%', format('%I.%I', r[1], r[2]);
  116. END;
  117. $$;
  118. NOTICE: schemax.tabley
  119. NOTICE: "SchemaX"."TableY"
  120. SELECT parse_ident('foo.boo');
  121. parse_ident
  122. -------------
  123. {foo,boo}
  124. (1 row)
  125. SELECT parse_ident('foo.boo[]'); -- should fail
  126. ERROR: string is not a valid identifier: "foo.boo[]"
  127. SELECT parse_ident('foo.boo[]', strict => false); -- ok
  128. parse_ident
  129. -------------
  130. {foo,boo}
  131. (1 row)
  132. -- should fail
  133. SELECT parse_ident(' ');
  134. ERROR: string is not a valid identifier: " "
  135. SELECT parse_ident(' .aaa');
  136. ERROR: string is not a valid identifier: " .aaa"
  137. DETAIL: No valid identifier before ".".
  138. SELECT parse_ident(' aaa . ');
  139. ERROR: string is not a valid identifier: " aaa . "
  140. DETAIL: No valid identifier after ".".
  141. SELECT parse_ident('aaa.a%b');
  142. ERROR: string is not a valid identifier: "aaa.a%b"
  143. SELECT parse_ident(E'X\rXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX');
  144. ERROR: string is not a valid identifier: "X XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
  145. SELECT length(a[1]), length(a[2]) from parse_ident('"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx".yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy') as a ;
  146. length | length
  147. --------+--------
  148. 414 | 289
  149. (1 row)
  150. SELECT parse_ident(' first . " second " ." third ". " ' || repeat('x',66) || '"');
  151. parse_ident
  152. -----------------------------------------------------------------------------------------------------------
  153. {first," second "," third "," xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
  154. (1 row)
  155. SELECT parse_ident(' first . " second " ." third ". " ' || repeat('x',66) || '"')::name[];
  156. parse_ident
  157. ------------------------------------------------------------------------------------------------------
  158. {first," second "," third "," xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
  159. (1 row)
  160. SELECT parse_ident(E'"c".X XXXX\002XXXXXX');
  161. ERROR: string is not a valid identifier: ""c".X XXXXXXXXXX"
  162. SELECT parse_ident('1020');
  163. ERROR: string is not a valid identifier: "1020"
  164. SELECT parse_ident('10.20');
  165. ERROR: string is not a valid identifier: "10.20"
  166. SELECT parse_ident('.');
  167. ERROR: string is not a valid identifier: "."
  168. DETAIL: No valid identifier before ".".
  169. SELECT parse_ident('.1020');
  170. ERROR: string is not a valid identifier: ".1020"
  171. DETAIL: No valid identifier before ".".
  172. SELECT parse_ident('xxx.1020');
  173. ERROR: string is not a valid identifier: "xxx.1020"
  174. DETAIL: No valid identifier after ".".