CREATE TABLE numeric_table(num numeric(5, 2));

prepst#!#INSERT INTO numeric_table(num) VALUES(@a) #!#numeric|-|a|-|3|-|5|-|2
prepst#!#exec#!#numeric|-|a|-|123.456|-|5|-|2
prepst#!#exec#!#numeric|-|a|-|123.4|-|5|-|2
prepst#!#exec#!#numeric|-|a|-|123|-|5|-|2
prepst#!#exec#!#numeric|-|a|-|123.45|-|5|-|2
prepst#!#exec#!#numeric|-|a|-|<NULL>|-|5|-|2
prepst#!#exec#!#numeric|-|a|-|-123.456|-|5|-|2
prepst#!#exec#!#numeric|-|a|-|-123.4|-|5|-|2
prepst#!#exec#!#numeric|-|a|-|-123|-|5|-|2
#prepst#!#exec#!#numeric|-|a|-|0|-|5|-|2
prepst#!#exec#!#numeric|-|a|-|-1|-|3|-|2
prepst#!#exec#!#numeric|-|a|-|-123|-|9|-|2

SELECT * FROM numeric_table;

DROP TABLE numeric_table;

CREATE TABLE numeric_table(num numeric(5, 0));

# Should generate "Error converting data type numeric to decimal" (BABEL-510)
#prepst#!#INSERT INTO numeric_table(num) VALUES(@a) #!#numeric|-|a|-|3|-|5|-|2
#prepst#!#exec#!#numeric|-|a|-|123|-|5|-|0
#prepst#!#exec#!#numeric|-|a|-|123.4|-|5|-|0
#prepst#!#exec#!#numeric|-|a|-|123|-|5|-|0
#prepst#!#exec#!#numeric|-|a|-|12345|-|5|-|0
#prepst#!#exec#!#numeric|-|a|-|<NULL>|-|5|-|0
#prepst#!#exec#!#numeric|-|a|-|-123456|-|5|-|0
#prepst#!#exec#!#numeric|-|a|-|-1234|-|5|-|0
#prepst#!#exec#!#numeric|-|a|-|-123|-|5|-|0
##prepst#!#exec#!#numeric|-|a|-|0|-|5|-|0
#prepst#!#exec#!#numeric|-|a|-|-1|-|3|-|0
#prepst#!#exec#!#numeric|-|a|-|-123|-|9|-|0

SELECT * FROM numeric_table;

DROP TABLE numeric_table;

CREATE TABLE numeric_table(num numeric(38, 3));

prepst#!#INSERT INTO numeric_table(num) VALUES(@a1) #!#numeric|-|a1|-|3|-|5|-|2
#prepst#!#exec#!#numeric|-|a1|-|12345|-|5|-|0
prepst#!#exec#!#numeric|-|a1|-|123.4|-|5|-|2
prepst#!#exec#!#numeric|-|a1|-|123|-|5|-|2
prepst#!#exec#!#numeric|-|a1|-|123.45|-|5|-|2
prepst#!#exec#!#numeric|-|a1|-|<NULL>|-|5|-|2
prepst#!#exec#!#numeric|-|a1|-|-123.456|-|5|-|2
prepst#!#exec#!#numeric|-|a1|-|-123.4|-|5|-|2
prepst#!#exec#!#numeric|-|a1|-|-123|-|5|-|2
#prepst#!#exec#!#numeric|-|a1|-|0|-|5|-|2
prepst#!#exec#!#numeric|-|a1|-|-1|-|3|-|2
prepst#!#exec#!#numeric|-|a1|-|-123|-|9|-|2

# Should generate "Error converting data type numeric to decimal" (BABEL-510)
#prepst#!#exec#!#numeric|-|a1|-|2147483647|-|10|-|0
#prepst#!#exec#!#numeric|-|a1|-|-2147483647|-|10|-|0
#prepst#!#exec#!#numeric|-|a1|-|2147483646|-|10|-|0
#prepst#!#exec#!#numeric|-|a1|-|-2147483646|-|10|-|0
#prepst#!#exec#!#numeric|-|a1|-|2147483648|-|10|-|0
#prepst#!#exec#!#numeric|-|a1|-|-2147483648|-|10|-|0

SELECT * FROM numeric_table;

DROP TABLE numeric_table;

# JIRA 507, WORKING FOR BABEL
#CREATE TABLE numeric_table(num numeric(39, 20));

CREATE TABLE numeric_table(num numeric(38, 20));

prepst#!#INSERT INTO numeric_table(num) VALUES(@a2) #!#numeric|-|a2|-|3|-|5|-|2
prepst#!#exec#!#numeric|-|a2|-|123.456|-|5|-|2
prepst#!#exec#!#numeric|-|a2|-|123.4|-|5|-|2
prepst#!#exec#!#numeric|-|a2|-|123|-|5|-|2
prepst#!#exec#!#numeric|-|a2|-|123.45|-|5|-|2
prepst#!#exec#!#numeric|-|a2|-|<NULL>|-|5|-|2
prepst#!#exec#!#numeric|-|a2|-|-123.456|-|5|-|2
prepst#!#exec#!#numeric|-|a2|-|-123.4|-|5|-|2
prepst#!#exec#!#numeric|-|a2|-|-123|-|5|-|2
#prepst#!#exec#!#numeric|-|a2|-|0|-|5|-|2
prepst#!#exec#!#numeric|-|a2|-|-1|-|3|-|2
prepst#!#exec#!#numeric|-|a2|-|-123|-|9|-|2
#prepst#!#exec#!#numeric|-|a2|-| 2147483647|-|10|-|0
SELECT * FROM numeric_table;

DROP TABLE numeric_table;

CREATE TABLE numeric_table(num numeric(38, 20));
prepst#!#INSERT INTO numeric_table(num) VALUES(@a3) #!#numeric|-|a3|-|3|-|5|-|2
prepst#!#exec#!#numeric|-|a3|-|123.456|-|5|-|2
prepst#!#exec#!#numeric|-|a3|-|123.4|-|5|-|2
prepst#!#exec#!#numeric|-|a3|-|123|-|5|-|2
prepst#!#exec#!#numeric|-|a3|-|123.45|-|5|-|2
prepst#!#exec#!#numeric|-|a3|-|<NULL>|-|5|-|2
prepst#!#exec#!#numeric|-|a3|-|-123.456|-|5|-|2
prepst#!#exec#!#numeric|-|a3|-|-123.4|-|5|-|2
prepst#!#exec#!#numeric|-|a3|-|-123|-|5|-|2
#prepst#!#exec#!#numeric|-|a3|-|0|-|5|-|2
prepst#!#exec#!#numeric|-|a3|-|-1|-|3|-|2
prepst#!#exec#!#numeric|-|a3|-|-123|-|9|-|2
#prepst#!#exec#!#numeric|-|a3|-| 2147483647|-|10|-|0
SELECT * FROM numeric_table;

DROP TABLE numeric_table;

CREATE TABLE numeric_table(num numeric(38, 21));
prepst#!#INSERT INTO numeric_table(num) VALUES(@a4) #!#numeric|-|a4|-|3|-|5|-|2
prepst#!#exec#!#numeric|-|a4|-|123.456|-|5|-|2
prepst#!#exec#!#numeric|-|a4|-|123.4|-|5|-|2
prepst#!#exec#!#numeric|-|a4|-|123|-|5|-|2
prepst#!#exec#!#numeric|-|a4|-|123.45|-|5|-|2
prepst#!#exec#!#numeric|-|a4|-|<NULL>|-|5|-|2
prepst#!#exec#!#numeric|-|a4|-|-123.456|-|5|-|2
prepst#!#exec#!#numeric|-|a4|-|-123.4|-|5|-|2
prepst#!#exec#!#numeric|-|a4|-|-123|-|5|-|2
#prepst#!#exec#!#numeric|-|a4|-|0|-|5|-|2
prepst#!#exec#!#numeric|-|a4|-|-1|-|3|-|2
prepst#!#exec#!#numeric|-|a4|-|-123|-|9|-|2
#prepst#!#exec#!#numeric|-|a4|-| 2147483647|-|10|-|0
SELECT * FROM numeric_table;

DROP TABLE numeric_table;

CREATE TABLE numeric_table(num numeric(38, 22));
prepst#!#INSERT INTO numeric_table(num) VALUES(@a5) #!#numeric|-|a5|-|3|-|5|-|2
prepst#!#exec#!#numeric|-|a5|-|123.456|-|5|-|2
prepst#!#exec#!#numeric|-|a5|-|123.4|-|5|-|2
prepst#!#exec#!#numeric|-|a5|-|123|-|5|-|2
prepst#!#exec#!#numeric|-|a5|-|123.45|-|5|-|2
prepst#!#exec#!#numeric|-|a5|-|<NULL>|-|5|-|2
prepst#!#exec#!#numeric|-|a5|-|-123.456|-|5|-|2
prepst#!#exec#!#numeric|-|a5|-|-123.4|-|5|-|2
prepst#!#exec#!#numeric|-|a5|-|-123|-|5|-|2
#prepst#!#exec#!#numeric|-|a5|-|0|-|5|-|2
prepst#!#exec#!#numeric|-|a5|-|-1|-|3|-|2
prepst#!#exec#!#numeric|-|a5|-|-123|-|9|-|2
#prepst#!#exec#!#numeric|-|a5|-| 2147483647|-|10|-|0
SELECT * FROM numeric_table;

DROP TABLE numeric_table;

CREATE TABLE numeric_table(num numeric(38, 23));
prepst#!#INSERT INTO numeric_table(num) VALUES(@a6) #!#numeric|-|a6|-|3|-|5|-|2
prepst#!#exec#!#numeric|-|a6|-|123.456|-|5|-|2
prepst#!#exec#!#numeric|-|a6|-|123.4|-|5|-|2
prepst#!#exec#!#numeric|-|a6|-|123|-|5|-|2
prepst#!#exec#!#numeric|-|a6|-|123.45|-|5|-|2
prepst#!#exec#!#numeric|-|a6|-|<NULL>|-|5|-|2
prepst#!#exec#!#numeric|-|a6|-|-123.456|-|5|-|2
prepst#!#exec#!#numeric|-|a6|-|-123.4|-|5|-|2
prepst#!#exec#!#numeric|-|a6|-|-123|-|5|-|2
#prepst#!#exec#!#numeric|-|a6|-|0|-|5|-|2
prepst#!#exec#!#numeric|-|a6|-|-1|-|3|-|2
prepst#!#exec#!#numeric|-|a6|-|-123|-|9|-|2
#prepst#!#exec#!#numeric|-|a6|-| 2147483647|-|10|-|0
SELECT * FROM numeric_table;

DROP TABLE numeric_table;

CREATE TABLE numeric_table(num numeric(38, 25));
prepst#!#INSERT INTO numeric_table(num) VALUES(@a7) #!#numeric|-|a7|-|3|-|5|-|2
prepst#!#exec#!#numeric|-|a7|-|123.456|-|5|-|2
prepst#!#exec#!#numeric|-|a7|-|123.4|-|5|-|2
prepst#!#exec#!#numeric|-|a7|-|123|-|5|-|2
prepst#!#exec#!#numeric|-|a7|-|123.45|-|5|-|2
prepst#!#exec#!#numeric|-|a7|-|<NULL>|-|5|-|2
prepst#!#exec#!#numeric|-|a7|-|-123.456|-|5|-|2
prepst#!#exec#!#numeric|-|a7|-|-123.4|-|5|-|2
prepst#!#exec#!#numeric|-|a7|-|-123|-|5|-|2
#prepst#!#exec#!#numeric|-|a7|-|0|-|5|-|2
prepst#!#exec#!#numeric|-|a7|-|-1|-|3|-|2
prepst#!#exec#!#numeric|-|a7|-|-123|-|9|-|2
#prepst#!#exec#!#numeric|-|a7|-| 247483647|-|10|-|0
#prepst#!#exec#!#numeric|-|a7|-|-247483647|-|10|-|0
#SELECT * FROM numeric_table;

DROP TABLE numeric_table;

# Test BABEL-3344
# Numeric 0
SELECT CASE WHEN 1=1 THEN 0 ELSE cast(98.7627 AS numeric(24,6)) + coalesce(cast(91128.7627 AS numeric(24,6)),0) END

SELECT CAST(0 AS NUMERIC)

# Numeric other than 0
SELECT CASE WHEN 1=1 THEN 5 ELSE cast(98.7627 AS numeric(24,6)) + coalesce(cast(91128.7627 AS numeric(24,6)),0) END

SELECT CAST(5 AS NUMERIC)
