File: csv_decimal_separator.test

package info (click to toggle)
duckdb 1.5.1-2
  • links: PTS, VCS
  • area: main
  • in suites:
  • size: 299,196 kB
  • sloc: cpp: 865,414; ansic: 57,292; python: 18,871; sql: 12,663; lisp: 11,751; yacc: 7,412; lex: 1,682; sh: 747; makefile: 558
file content (100 lines) | stat: -rw-r--r-- 3,426 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# name: test/sql/copy/csv/csv_decimal_separator.test
# description: Support decimal separators
# group: [csv]

statement ok
PRAGMA enable_verification

# period-separated decimal doesn't parse
statement error
CREATE TABLE decimal_separators AS SELECT * FROM read_csv_auto('{DATA_DIR}/csv/decimal_separators/decimal_separators.csv', column_types={'commas': 'double', 'periods': 'double'}, delim=';', decimal_separator=',')
----
Line: 2

statement ok
CREATE TABLE decimal_separators AS SELECT * FROM read_csv_auto('{DATA_DIR}/csv/decimal_separators/decimal_separators.csv', column_types={'commas': 'double'}, delim=';', decimal_separator=',')

query II
SELECT commas, periods FROM decimal_separators;
----
1.1	1.1
0.25	0.25
15300.0	1.53e4
15300.0	+1.53e4
-15300.0	-1.53e4

query II
SELECT typeof(commas), typeof(periods) FROM decimal_separators limit 1;
----
DOUBLE	VARCHAR

# reading the commas column as decimal fails when decimal separator is set to '.'
statement error
CREATE TABLE decimal_separators2 AS SELECT * FROM read_csv_auto('{DATA_DIR}/csv/decimal_separators/decimal_separators.csv',  column_types={'commas': 'decimal', 'periods': 'decimal'}, delim=';', decimal_separator='.')
----
Line: 2

# reading the commas column as float fails when decimal separator is set to '.'
statement error
CREATE TABLE decimal_separators2 AS SELECT * FROM read_csv_auto('{DATA_DIR}/csv/decimal_separators/decimal_separators.csv',  column_types={'commas': 'float', 'periods': 'decimal'}, delim=';', decimal_separator='.')
----
Line: 2

statement ok
CREATE TABLE decimal_separators2 AS SELECT * FROM read_csv_auto('{DATA_DIR}/csv/decimal_separators/decimal_separators.csv', column_types={'commas': 'decimal'}, delim=';', decimal_separator=',')

query II
SELECT commas, periods FROM decimal_separators2;
----
1.100	1.1
0.250	0.25
15300.000	1.53e4
15300.000	+1.53e4
-15300.000	-1.53e4

query II
SELECT typeof(commas), typeof(periods) FROM decimal_separators2 limit 1;
----
DECIMAL(18,3)	VARCHAR


# no separator specified => commas get read as varchar
statement ok
CREATE TABLE decimal_separators3 AS SELECT * FROM read_csv_auto('{DATA_DIR}/csv/decimal_separators/decimal_separators.csv',  column_types={'periods': 'decimal'}, delim=';')

query II
SELECT commas, periods FROM decimal_separators3;
----
1,1	1.100
0,25	0.250
1,53e4	15300.000
+1,53e4	+15300.000
-1,53e4	-15300.000


# in a comma-delimited file, comma as decimal separator is OK when quoted
statement ok
CREATE TABLE decimal_separators4 AS SELECT * FROM read_csv_auto('{DATA_DIR}/csv/decimal_separators/decimal_separators_csv.csv', column_types={'commas': 'double'}, quote='"',delim=',',decimal_separator=',')

query II
SELECT commas, periods FROM decimal_separators4;
----
1.2345	1.2345

# auto-detection should read period-separated decimals as varchar
query II
SELECT typeof(commas), typeof(periods) FROM decimal_separators4 limit 1;
----
DOUBLE	VARCHAR

# unsupported separator characters result in error
statement error
SELECT * FROM read_csv_auto('{DATA_DIR}/csv/decimal_separators/invalid_char.csv', column_types={'foo': 'double'}, decimal_separator='รถ')
----
Binder Error: Unsupported parameter for DECIMAL_SEPARATOR: should be '.' or ','

# data with mixed separators will fail reading
statement error
SELECT * FROM read_csv_auto('{DATA_DIR}/csv/decimal_separators/mixed_format_fail.csv', column_types={'foo': 'double'}, decimal_separator=',', skip=0)
----
Line: 4