int2.out 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  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 i.* FROM INT2_TBL i WHERE i.f1 <> int2 '0';
  54. f1
  55. --------
  56. 1234
  57. -1234
  58. 32767
  59. -32767
  60. (4 rows)
  61. SELECT i.* FROM INT2_TBL i WHERE i.f1 <> int4 '0';
  62. f1
  63. --------
  64. 1234
  65. -1234
  66. 32767
  67. -32767
  68. (4 rows)
  69. SELECT i.* FROM INT2_TBL i WHERE i.f1 = int2 '0';
  70. f1
  71. ----
  72. 0
  73. (1 row)
  74. SELECT i.* FROM INT2_TBL i WHERE i.f1 = int4 '0';
  75. f1
  76. ----
  77. 0
  78. (1 row)
  79. SELECT i.* FROM INT2_TBL i WHERE i.f1 < int2 '0';
  80. f1
  81. --------
  82. -1234
  83. -32767
  84. (2 rows)
  85. SELECT i.* FROM INT2_TBL i WHERE i.f1 < int4 '0';
  86. f1
  87. --------
  88. -1234
  89. -32767
  90. (2 rows)
  91. SELECT i.* FROM INT2_TBL i WHERE i.f1 <= int2 '0';
  92. f1
  93. --------
  94. 0
  95. -1234
  96. -32767
  97. (3 rows)
  98. SELECT i.* FROM INT2_TBL i WHERE i.f1 <= int4 '0';
  99. f1
  100. --------
  101. 0
  102. -1234
  103. -32767
  104. (3 rows)
  105. SELECT i.* FROM INT2_TBL i WHERE i.f1 > int2 '0';
  106. f1
  107. -------
  108. 1234
  109. 32767
  110. (2 rows)
  111. SELECT i.* FROM INT2_TBL i WHERE i.f1 > int4 '0';
  112. f1
  113. -------
  114. 1234
  115. 32767
  116. (2 rows)
  117. SELECT i.* FROM INT2_TBL i WHERE i.f1 >= int2 '0';
  118. f1
  119. -------
  120. 0
  121. 1234
  122. 32767
  123. (3 rows)
  124. SELECT i.* FROM INT2_TBL i WHERE i.f1 >= int4 '0';
  125. f1
  126. -------
  127. 0
  128. 1234
  129. 32767
  130. (3 rows)
  131. -- positive odds
  132. SELECT i.* FROM INT2_TBL i WHERE (i.f1 % int2 '2') = int2 '1';
  133. f1
  134. -------
  135. 32767
  136. (1 row)
  137. -- any evens
  138. SELECT i.* FROM INT2_TBL i WHERE (i.f1 % int4 '2') = int2 '0';
  139. f1
  140. -------
  141. 0
  142. 1234
  143. -1234
  144. (3 rows)
  145. SELECT i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i;
  146. ERROR: smallint out of range
  147. SELECT i.f1, i.f1 * int2 '2' AS x FROM INT2_TBL i
  148. WHERE abs(f1) < 16384;
  149. f1 | x
  150. -------+-------
  151. 0 | 0
  152. 1234 | 2468
  153. -1234 | -2468
  154. (3 rows)
  155. SELECT i.f1, i.f1 * int4 '2' AS x FROM INT2_TBL i;
  156. f1 | x
  157. --------+--------
  158. 0 | 0
  159. 1234 | 2468
  160. -1234 | -2468
  161. 32767 | 65534
  162. -32767 | -65534
  163. (5 rows)
  164. SELECT i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i;
  165. ERROR: smallint out of range
  166. SELECT i.f1, i.f1 + int2 '2' AS x FROM INT2_TBL i
  167. WHERE f1 < 32766;
  168. f1 | x
  169. --------+--------
  170. 0 | 2
  171. 1234 | 1236
  172. -1234 | -1232
  173. -32767 | -32765
  174. (4 rows)
  175. SELECT i.f1, i.f1 + int4 '2' AS x FROM INT2_TBL i;
  176. f1 | x
  177. --------+--------
  178. 0 | 2
  179. 1234 | 1236
  180. -1234 | -1232
  181. 32767 | 32769
  182. -32767 | -32765
  183. (5 rows)
  184. SELECT i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i;
  185. ERROR: smallint out of range
  186. SELECT i.f1, i.f1 - int2 '2' AS x FROM INT2_TBL i
  187. WHERE f1 > -32767;
  188. f1 | x
  189. -------+-------
  190. 0 | -2
  191. 1234 | 1232
  192. -1234 | -1236
  193. 32767 | 32765
  194. (4 rows)
  195. SELECT i.f1, i.f1 - int4 '2' AS x FROM INT2_TBL i;
  196. f1 | x
  197. --------+--------
  198. 0 | -2
  199. 1234 | 1232
  200. -1234 | -1236
  201. 32767 | 32765
  202. -32767 | -32769
  203. (5 rows)
  204. SELECT i.f1, i.f1 / int2 '2' AS x FROM INT2_TBL i;
  205. f1 | x
  206. --------+--------
  207. 0 | 0
  208. 1234 | 617
  209. -1234 | -617
  210. 32767 | 16383
  211. -32767 | -16383
  212. (5 rows)
  213. SELECT i.f1, i.f1 / int4 '2' AS x FROM INT2_TBL i;
  214. f1 | x
  215. --------+--------
  216. 0 | 0
  217. 1234 | 617
  218. -1234 | -617
  219. 32767 | 16383
  220. -32767 | -16383
  221. (5 rows)
  222. -- corner cases
  223. SELECT (-1::int2<<15)::text;
  224. text
  225. --------
  226. -32768
  227. (1 row)
  228. SELECT ((-1::int2<<15)+1::int2)::text;
  229. text
  230. --------
  231. -32767
  232. (1 row)
  233. -- check sane handling of INT16_MIN overflow cases
  234. SELECT (-32768)::int2 * (-1)::int2;
  235. ERROR: smallint out of range
  236. SELECT (-32768)::int2 / (-1)::int2;
  237. ERROR: smallint out of range
  238. SELECT (-32768)::int2 % (-1)::int2;
  239. ?column?
  240. ----------
  241. 0
  242. (1 row)
  243. -- check rounding when casting from float
  244. SELECT x, x::int2 AS int2_value
  245. FROM (VALUES (-2.5::float8),
  246. (-1.5::float8),
  247. (-0.5::float8),
  248. (0.0::float8),
  249. (0.5::float8),
  250. (1.5::float8),
  251. (2.5::float8)) t(x);
  252. x | int2_value
  253. ------+------------
  254. -2.5 | -2
  255. -1.5 | -2
  256. -0.5 | 0
  257. 0 | 0
  258. 0.5 | 0
  259. 1.5 | 2
  260. 2.5 | 2
  261. (7 rows)
  262. -- check rounding when casting from numeric
  263. SELECT x, x::int2 AS int2_value
  264. FROM (VALUES (-2.5::numeric),
  265. (-1.5::numeric),
  266. (-0.5::numeric),
  267. (0.0::numeric),
  268. (0.5::numeric),
  269. (1.5::numeric),
  270. (2.5::numeric)) t(x);
  271. x | int2_value
  272. ------+------------
  273. -2.5 | -3
  274. -1.5 | -2
  275. -0.5 | -1
  276. 0.0 | 0
  277. 0.5 | 1
  278. 1.5 | 2
  279. 2.5 | 3
  280. (7 rows)