int2.out 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312
  1. --
  2. -- INT2
  3. --
  4. CREATE TABLE INT2_TBL(f1 int2);
  5. INSERT INTO INT2_TBL(f1) VALUES ('0 ');
  6. INSERT INTO INT2_TBL(f1) VALUES (' 1234 ');
  7. INSERT INTO INT2_TBL(f1) VALUES (' -1234');
  8. INSERT INTO INT2_TBL(f1) VALUES ('34.5');
  9. ERROR: invalid input syntax for type smallint: "34.5"
  10. LINE 1: INSERT INTO INT2_TBL(f1) VALUES ('34.5');
  11. ^
  12. -- largest and smallest values
  13. INSERT INTO INT2_TBL(f1) VALUES ('32767');
  14. INSERT INTO INT2_TBL(f1) VALUES ('-32767');
  15. -- bad input values -- should give errors
  16. INSERT INTO INT2_TBL(f1) VALUES ('100000');
  17. ERROR: value "100000" is out of range for type smallint
  18. LINE 1: INSERT INTO INT2_TBL(f1) VALUES ('100000');
  19. ^
  20. INSERT INTO INT2_TBL(f1) VALUES ('asdf');
  21. ERROR: invalid input syntax for type smallint: "asdf"
  22. LINE 1: INSERT INTO INT2_TBL(f1) VALUES ('asdf');
  23. ^
  24. INSERT INTO INT2_TBL(f1) VALUES (' ');
  25. ERROR: invalid input syntax for type smallint: " "
  26. LINE 1: INSERT INTO INT2_TBL(f1) VALUES (' ');
  27. ^
  28. INSERT INTO INT2_TBL(f1) VALUES ('- 1234');
  29. ERROR: invalid input syntax for type smallint: "- 1234"
  30. LINE 1: INSERT INTO INT2_TBL(f1) VALUES ('- 1234');
  31. ^
  32. INSERT INTO INT2_TBL(f1) VALUES ('4 444');
  33. ERROR: invalid input syntax for type smallint: "4 444"
  34. LINE 1: INSERT INTO INT2_TBL(f1) VALUES ('4 444');
  35. ^
  36. INSERT INTO INT2_TBL(f1) VALUES ('123 dt');
  37. ERROR: invalid input syntax for type smallint: "123 dt"
  38. LINE 1: INSERT INTO INT2_TBL(f1) VALUES ('123 dt');
  39. ^
  40. INSERT INTO INT2_TBL(f1) VALUES ('');
  41. ERROR: invalid input syntax for type smallint: ""
  42. LINE 1: INSERT INTO INT2_TBL(f1) VALUES ('');
  43. ^
  44. SELECT * FROM INT2_TBL;
  45. f1
  46. --------
  47. 0
  48. 1234
  49. -1234
  50. 32767
  51. -32767
  52. (5 rows)
  53. SELECT * FROM INT2_TBL AS f(a, b);
  54. ERROR: table "f" has 1 columns available but 2 columns specified
  55. SELECT * FROM (TABLE int2_tbl) AS s (a, b);
  56. ERROR: table "s" has 1 columns available but 2 columns specified
  57. SELECT i.* FROM INT2_TBL i WHERE i.f1 <> int2 '0';
  58. f1
  59. --------
  60. 1234
  61. -1234
  62. 32767
  63. -32767
  64. (4 rows)
  65. SELECT i.* FROM INT2_TBL i WHERE i.f1 <> int4 '0';
  66. f1
  67. --------
  68. 1234
  69. -1234
  70. 32767
  71. -32767
  72. (4 rows)
  73. SELECT i.* FROM INT2_TBL i WHERE i.f1 = int2 '0';
  74. f1
  75. ----
  76. 0
  77. (1 row)
  78. SELECT i.* FROM INT2_TBL i WHERE i.f1 = int4 '0';
  79. f1
  80. ----
  81. 0
  82. (1 row)
  83. SELECT i.* FROM INT2_TBL i WHERE i.f1 < int2 '0';
  84. f1
  85. --------
  86. -1234
  87. -32767
  88. (2 rows)
  89. SELECT i.* FROM INT2_TBL i WHERE i.f1 < int4 '0';
  90. f1
  91. --------
  92. -1234
  93. -32767
  94. (2 rows)
  95. SELECT i.* FROM INT2_TBL i WHERE i.f1 <= int2 '0';
  96. f1
  97. --------
  98. 0
  99. -1234
  100. -32767
  101. (3 rows)
  102. SELECT i.* FROM INT2_TBL i WHERE i.f1 <= int4 '0';
  103. f1
  104. --------
  105. 0
  106. -1234
  107. -32767
  108. (3 rows)
  109. SELECT i.* FROM INT2_TBL i WHERE i.f1 > int2 '0';
  110. f1
  111. -------
  112. 1234
  113. 32767
  114. (2 rows)
  115. SELECT i.* FROM INT2_TBL i WHERE i.f1 > int4 '0';
  116. f1
  117. -------
  118. 1234
  119. 32767
  120. (2 rows)
  121. SELECT i.* FROM INT2_TBL i WHERE i.f1 >= int2 '0';
  122. f1
  123. -------
  124. 0
  125. 1234
  126. 32767
  127. (3 rows)
  128. SELECT i.* FROM INT2_TBL i WHERE i.f1 >= int4 '0';
  129. f1
  130. -------
  131. 0
  132. 1234
  133. 32767
  134. (3 rows)
  135. -- positive odds
  136. SELECT i.* FROM INT2_TBL i WHERE (i.f1 % int2 '2') = int2 '1';
  137. f1
  138. -------
  139. 32767
  140. (1 row)
  141. -- any evens
  142. SELECT i.* FROM INT2_TBL i WHERE (i.f1 % int4 '2') = int2 '0';
  143. f1
  144. -------
  145. 0
  146. 1234
  147. -1234
  148. (3 rows)
  149. SELECT i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i;
  150. ERROR: smallint out of range
  151. SELECT i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i
  152. WHERE abs(f1) < 16384;
  153. f1 | x
  154. -------+-------
  155. 0 | 0
  156. 1234 | 2468
  157. -1234 | -2468
  158. (3 rows)
  159. SELECT i.f1, i.f1 * int4 '2' AS x FROM INT2_TBL i;
  160. f1 | x
  161. --------+--------
  162. 0 | 0
  163. 1234 | 2468
  164. -1234 | -2468
  165. 32767 | 65534
  166. -32767 | -65534
  167. (5 rows)
  168. SELECT i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i;
  169. ERROR: smallint out of range
  170. SELECT i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i
  171. WHERE f1 < 32766;
  172. f1 | x
  173. --------+--------
  174. 0 | 2
  175. 1234 | 1236
  176. -1234 | -1232
  177. -32767 | -32765
  178. (4 rows)
  179. SELECT i.f1, i.f1 + int4 '2' AS x FROM INT2_TBL i;
  180. f1 | x
  181. --------+--------
  182. 0 | 2
  183. 1234 | 1236
  184. -1234 | -1232
  185. 32767 | 32769
  186. -32767 | -32765
  187. (5 rows)
  188. SELECT i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i;
  189. ERROR: smallint out of range
  190. SELECT i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i
  191. WHERE f1 > -32767;
  192. f1 | x
  193. -------+-------
  194. 0 | -2
  195. 1234 | 1232
  196. -1234 | -1236
  197. 32767 | 32765
  198. (4 rows)
  199. SELECT i.f1, i.f1 - int4 '2' AS x FROM INT2_TBL i;
  200. f1 | x
  201. --------+--------
  202. 0 | -2
  203. 1234 | 1232
  204. -1234 | -1236
  205. 32767 | 32765
  206. -32767 | -32769
  207. (5 rows)
  208. SELECT i.f1, i.f1 / int2 '2' AS x FROM INT2_TBL i;
  209. f1 | x
  210. --------+--------
  211. 0 | 0
  212. 1234 | 617
  213. -1234 | -617
  214. 32767 | 16383
  215. -32767 | -16383
  216. (5 rows)
  217. SELECT i.f1, i.f1 / int4 '2' AS x FROM INT2_TBL i;
  218. f1 | x
  219. --------+--------
  220. 0 | 0
  221. 1234 | 617
  222. -1234 | -617
  223. 32767 | 16383
  224. -32767 | -16383
  225. (5 rows)
  226. -- corner cases
  227. SELECT (-1::int2<<15)::text;
  228. text
  229. --------
  230. -32768
  231. (1 row)
  232. SELECT ((-1::int2<<15)+1::int2)::text;
  233. text
  234. --------
  235. -32767
  236. (1 row)
  237. -- check sane handling of INT16_MIN overflow cases
  238. SELECT (-32768)::int2 * (-1)::int2;
  239. ERROR: smallint out of range
  240. SELECT (-32768)::int2 / (-1)::int2;
  241. ERROR: smallint out of range
  242. SELECT (-32768)::int2 % (-1)::int2;
  243. ?column?
  244. ----------
  245. 0
  246. (1 row)
  247. -- check rounding when casting from float
  248. SELECT x, x::int2 AS int2_value
  249. FROM (VALUES (-2.5::float8),
  250. (-1.5::float8),
  251. (-0.5::float8),
  252. (0.0::float8),
  253. (0.5::float8),
  254. (1.5::float8),
  255. (2.5::float8)) t(x);
  256. x | int2_value
  257. ------+------------
  258. -2.5 | -2
  259. -1.5 | -2
  260. -0.5 | 0
  261. 0 | 0
  262. 0.5 | 0
  263. 1.5 | 2
  264. 2.5 | 2
  265. (7 rows)
  266. -- check rounding when casting from numeric
  267. SELECT x, x::int2 AS int2_value
  268. FROM (VALUES (-2.5::numeric),
  269. (-1.5::numeric),
  270. (-0.5::numeric),
  271. (0.0::numeric),
  272. (0.5::numeric),
  273. (1.5::numeric),
  274. (2.5::numeric)) t(x);
  275. x | int2_value
  276. ------+------------
  277. -2.5 | -3
  278. -1.5 | -2
  279. -0.5 | -1
  280. 0.0 | 0
  281. 0.5 | 1
  282. 1.5 | 2
  283. 2.5 | 3
  284. (7 rows)