Skip to content

Commit

Permalink
address comment and enhance tests
Browse files Browse the repository at this point in the history
  • Loading branch information
goldmedal committed Aug 2, 2024
1 parent 8906a7a commit 014deb2
Show file tree
Hide file tree
Showing 2 changed files with 117 additions and 1 deletion.
2 changes: 1 addition & 1 deletion datafusion/sql/src/expr/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -745,7 +745,7 @@ impl<'a, S: ContextProvider> SqlToRel<'a, S> {
PlannerResult::Original(expr) => exprs = expr,
}
}
not_impl_err!("Unsupported map literal: {exprs:?}")
not_impl_err!("Unsupported MAP literal: {exprs:?}")
}

// Handles a call to struct(...) where the arguments are named. For example
Expand Down
116 changes: 116 additions & 0 deletions datafusion/sqllogictest/test_files/map.slt
Original file line number Diff line number Diff line change
Expand Up @@ -341,5 +341,121 @@ SELECT MAP {'a':1, 'b':2, 'c':3 }['a'] FROM t;
# ----
# {}

# values contain null
query ?
SELECT MAP {'a': 1, 'b': null};
----
{a: 1, b: }

# keys contain null
query error DataFusion error: Execution error: map key cannot be null
SELECT MAP {'a': 1, null: 2}

# array as key
query ?
SELECT MAP {[1,2,3]:1, [2,4]:2};
----
{[1, 2, 3]: 1, [2, 4]: 2}

# array with different type as key
# expect to fail due to type coercion error
query error
SELECT MAP {[1,2,3]:1, ['a', 'b']:2};

# array as value
query ?
SELECT MAP {'a':[1,2,3], 'b':[2,4]};
----
{a: [1, 2, 3], b: [2, 4]}

# array with different type as value
# expect to fail due to type coercion error
query error
SELECT MAP {'a':[1,2,3], 'b':['a', 'b']};

# struct as key
query ?
SELECT MAP {{'a':1, 'b':2}:1, {'a':3, 'b':4}:2};
----
{{a: 1, b: 2}: 1, {a: 3, b: 4}: 2}

# struct with different fields as key
# expect to fail due to type coercion error
query error
SELECT MAP {{'a':1, 'b':2}:1, {'c':3, 'd':4}:2};

# struct as value
query ?
SELECT MAP {'a':{'b':1, 'c':2}, 'b':{'b':3, 'c':4}};
----
{a: {b: 1, c: 2}, b: {b: 3, c: 4}}

# struct with different fields as value
# expect to fail due to type coercion error
query error
SELECT MAP {'a':{'b':1, 'c':2}, 'b':{'c':3, 'd':4}};

# map as key
query ?
SELECT MAP { MAP {1:'a', 2:'b'}:1, MAP {1:'c', 2:'d'}:2 };
----
{{1: a, 2: b}: 1, {1: c, 2: d}: 2}

# map with different keys as key
query ?
SELECT MAP { MAP {1:'a', 2:'b', 3:'c'}:1, MAP {2:'c', 4:'d'}:2 };
----
{{1: a, 2: b, 3: c}: 1, {2: c, 4: d}: 2}

# map as value
query ?
SELECT MAP {1: MAP {1:'a', 2:'b'}, 2: MAP {1:'c', 2:'d'} };
----
{1: {1: a, 2: b}, 2: {1: c, 2: d}}

# map with different keys as value
query ?
SELECT MAP {'a': MAP {1:'a', 2:'b', 3:'c'}, 'b': MAP {2:'c', 4:'d'} };
----
{a: {1: a, 2: b, 3: c}, b: {2: c, 4: d}}

# complex map for each row
query ?
SELECT MAP {'a': MAP {1:'a', 2:'b', 3:'c'}, 'b': MAP {2:'c', 4:'d'} } from t;
----
{a: {1: a, 2: b, 3: c}, b: {2: c, 4: d}}
{a: {1: a, 2: b, 3: c}, b: {2: c, 4: d}}
{a: {1: a, 2: b, 3: c}, b: {2: c, 4: d}}

# access map with non-existent key
query ?
SELECT MAP {'a': MAP {1:'a', 2:'b', 3:'c'}, 'b': MAP {2:'c', 4:'d'} }['c'];
----
NULL

# access map with null key
query error
SELECT MAP {'a': MAP {1:'a', 2:'b', 3:'c'}, 'b': MAP {2:'c', 4:'d'} }[NULL];

query ?
SELECT MAP { 'a': 1, 2: 3 };
----
{a: 1, 2: 3}

# TODO: fix accessing map with non-string key
# query ?
# SELECT MAP { 1: 'a', 2: 'b', 3: 'c' }[1];
# ----
# a

# TODO: fix accessing map with non-string key
# query ?
# SELECT MAP { MAP {1:'a', 2:'b'}:1, MAP {1:'c', 2:'d'}:2 }[MAP {1:'a', 2:'b'}];
# ----
# 1

# TODO: fix accessing map with non-string key
# query ?
# SELECT MAKE_MAP(1, null, 2, 33, 3, null)[2];
# ----
# 33

0 comments on commit 014deb2

Please sign in to comment.