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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
# name: test/sql/cast/string_to_map_escapes.test
# group: [cast]
# Valid: key and value with escaped space
query I
SELECT $${"key\ with\ space" = "value\ with\ space"}$$::MAP(VARCHAR, VARCHAR);
----
{key with space=value with space}
# Valid: key with escaped quote and value with escaped quote
query I
SELECT $${\"key\" = \"value\"}$$::MAP(VARCHAR, VARCHAR);
----
{'"key"'='"value"'}
# Valid: key with escaped backslash, value with escaped backslash
query I
SELECT $${"key\ with\ backslash" = "value\ with\ backslash"}$$::MAP(VARCHAR, VARCHAR);
----
{key with backslash=value with backslash}
# Valid: key with escaped comma, value with escaped comma
query I
SELECT $${"key\ with\, comma" = "value\ with\, comma"}$$::MAP(VARCHAR, VARCHAR);
----
{'key with, comma'='value with, comma'}
# Valid: key and value with escaped colon
query I
SELECT $${"key\ with\ colon\:" = "value\ with\ colon\:"}$$::MAP(VARCHAR, VARCHAR);
----
{'key with colon:'='value with colon:'}
## FIXME: not sure what to do here, maybe we shouldn't "respect scopes" if the child type is not nested
## Valid: key and value with parentheses
#query I
#SELECT $${key\ (with\ parens) = value\ (with\ parens)}$$::MAP(VARCHAR, VARCHAR);
#----
#{key (with parens)=value (with parens)}
# Valid: key contains unescaped space
query I
SELECT $${key with space = value with space}$$::MAP(VARCHAR, VARCHAR);
----
{key with space=value with space}
# Invalid: key input contains quotes
query I
SELECT $${key"with"quote = value}$$::MAP(VARCHAR, VARCHAR);
----
{keywithquote=value}
# Valid: value input contains quotes
query I
SELECT $${key = value"with"quote}$$::MAP(VARCHAR, VARCHAR);
----
{key=valuewithquote}
# Valid: key contains unescaped comma
query I
SELECT $${key,with,comma = value}$$::MAP(VARCHAR, VARCHAR);
----
{'key,with,comma'=value}
# Invalid: value contains unescaped comma
statement error
SELECT $${key = value,with,comma}$$::MAP(VARCHAR, VARCHAR);
----
can't be cast to the destination type MAP
# Valid: key contains unescaped curly bracket
query I
SELECT $${key{with}bracket = value}$$::MAP(VARCHAR, VARCHAR);
----
{'key{with}bracket'=value}
# Invalid: value contains unescaped curly bracket
query I
SELECT $${key = value{with}bracket}$$::MAP(VARCHAR, VARCHAR);
----
{key='value{with}bracket'}
# Valid: key contains useless backslashes
query I
SELECT $${"key\with\backslash" = value}$$::MAP(VARCHAR, VARCHAR);
----
{keywithbackslash=value}
# Valid: value contains useless backslashes
query I
SELECT $${key = "value\with\backslash"}$$::MAP(VARCHAR, VARCHAR);
----
{key=valuewithbackslash}
# Valid: key/value contains unescaped equal sign
query II
SELECT $${key=with=equals = value}$$::MAP(VARCHAR, VARCHAR) a, a['key'];
----
{key='with=equals = value'} with=equals = value
# Valid: key/value contains unescaped equal sign
query II
SELECT $${"key\=with" = equals = value}$$::MAP(VARCHAR, VARCHAR) a, a['key=with'];
----
{'key=with'='equals = value'} equals = value
# Valid: key/value contains unescaped equal sign
query II
SELECT $${"key\=with\=equals" = value}$$::MAP(VARCHAR, VARCHAR) a, a['key=with=equals'];
----
{'key=with=equals'=value} value
# Edge Case: Empty MAP with no keys/values
query I
SELECT $${}$$::MAP(VARCHAR, VARCHAR);
----
{}
# Valid: MAP with empty key and value
query I
SELECT $${=}$$::MAP(VARCHAR, VARCHAR);
----
{''=''}
# Edge Case: MAP with special characters only (escaped)
statement error
SELECT $${\{escaped\brace\} = \}escaped\brace\\}$$::MAP(VARCHAR, VARCHAR);
----
can't be cast to the destination type MAP(VARCHAR, VARCHAR)
# Edge Case: MAP with special characters only (escaped)
query I
SELECT $${"\{escaped\brace\}" = "\}escaped\brace\\"}$$::MAP(VARCHAR, VARCHAR);
----
{'{escapedbrace}'='}escapedbrace\\'}
# Edge Case: MAP with only a key and no value
query I
SELECT $${key=}$$::MAP(VARCHAR, VARCHAR);
----
{key=''}
# Valid: MAP with an empty key
query I
SELECT $${=value}$$::MAP(VARCHAR, VARCHAR);
----
{''=value}
query III
select $${'NULL'=true}$$::MAP(VARCHAR, VARCHAR) a, a::VARCHAR::MAP(VARCHAR, VARCHAR) b, a == b
----
{'NULL'=true} {'NULL'=true} true
query III
select $${'a'='NULL'}$$::MAP(VARCHAR, VARCHAR) a, a::VARCHAR::MAP(VARCHAR, VARCHAR) b, a == b
----
{a='NULL'} {a='NULL'} true
|