Skip to content

Commit e63990c

Browse files
authored
First pass at CONCAT function (dask-contrib#253)
1 parent 767a23c commit e63990c

File tree

2 files changed

+37
-34
lines changed

2 files changed

+37
-34
lines changed

dask_sql/physical/rex/core/call.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -740,6 +740,7 @@ class RexCallPlugin(BaseRexPlugin):
740740
"truncate": Operation(da.trunc),
741741
# string operations
742742
"||": ReduceOperation(operation=operator.add),
743+
"concat": ReduceOperation(operation=operator.add),
743744
"char_length": TensorScalarOperation(lambda x: x.str.len(), lambda x: len(x)),
744745
"upper": TensorScalarOperation(lambda x: x.str.upper(), lambda x: x.upper()),
745746
"lower": TensorScalarOperation(lambda x: x.str.lower(), lambda x: x.lower()),

tests/integration/test_rex.py

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -411,25 +411,26 @@ def test_string_functions(c):
411411
"""
412412
SELECT
413413
a || 'hello' || a AS a,
414-
CHAR_LENGTH(a) AS b,
415-
UPPER(a) AS c,
416-
LOWER(a) AS d,
417-
POSITION('a' IN a FROM 4) AS e,
418-
POSITION('ZL' IN a) AS f,
419-
TRIM('a' FROM a) AS g,
420-
TRIM(BOTH 'a' FROM a) AS h,
421-
TRIM(LEADING 'a' FROM a) AS i,
422-
TRIM(TRAILING 'a' FROM a) AS j,
423-
OVERLAY(a PLACING 'XXX' FROM -1) AS k,
424-
OVERLAY(a PLACING 'XXX' FROM 2 FOR 4) AS l,
425-
OVERLAY(a PLACING 'XXX' FROM 2 FOR 1) AS m,
426-
SUBSTRING(a FROM -1) AS n,
427-
SUBSTRING(a FROM 10) AS o,
428-
SUBSTRING(a FROM 2) AS p,
429-
SUBSTRING(a FROM 2 FOR 2) AS q,
430-
INITCAP(a) AS r,
431-
INITCAP(UPPER(a)) AS s,
432-
INITCAP(LOWER(a)) AS t
414+
CONCAT(a, 'hello', a) as b,
415+
CHAR_LENGTH(a) AS c,
416+
UPPER(a) AS d,
417+
LOWER(a) AS e,
418+
POSITION('a' IN a FROM 4) AS f,
419+
POSITION('ZL' IN a) AS g,
420+
TRIM('a' FROM a) AS h,
421+
TRIM(BOTH 'a' FROM a) AS i,
422+
TRIM(LEADING 'a' FROM a) AS j,
423+
TRIM(TRAILING 'a' FROM a) AS k,
424+
OVERLAY(a PLACING 'XXX' FROM -1) AS l,
425+
OVERLAY(a PLACING 'XXX' FROM 2 FOR 4) AS m,
426+
OVERLAY(a PLACING 'XXX' FROM 2 FOR 1) AS n,
427+
SUBSTRING(a FROM -1) AS o,
428+
SUBSTRING(a FROM 10) AS p,
429+
SUBSTRING(a FROM 2) AS q,
430+
SUBSTRING(a FROM 2 FOR 2) AS r,
431+
INITCAP(a) AS s,
432+
INITCAP(UPPER(a)) AS t,
433+
INITCAP(LOWER(a)) AS u
433434
FROM
434435
string_table
435436
"""
@@ -438,25 +439,26 @@ def test_string_functions(c):
438439
expected_df = pd.DataFrame(
439440
{
440441
"a": ["a normal stringhelloa normal string"],
441-
"b": [15],
442-
"c": ["A NORMAL STRING"],
443-
"d": ["a normal string"],
444-
"e": [7],
445-
"f": [0],
446-
"g": [" normal string"],
442+
"b": ["a normal stringhelloa normal string"],
443+
"c": [15],
444+
"d": ["A NORMAL STRING"],
445+
"e": ["a normal string"],
446+
"f": [7],
447+
"g": [0],
447448
"h": [" normal string"],
448449
"i": [" normal string"],
449-
"j": ["a normal string"],
450-
"k": ["XXXormal string"],
451-
"l": ["aXXXmal string"],
452-
"m": ["aXXXnormal string"],
453-
"n": ["a normal string"],
454-
"o": ["string"],
455-
"p": [" normal string"],
456-
"q": [" n"],
457-
"r": ["A Normal String"],
450+
"j": [" normal string"],
451+
"k": ["a normal string"],
452+
"l": ["XXXormal string"],
453+
"m": ["aXXXmal string"],
454+
"n": ["aXXXnormal string"],
455+
"o": ["a normal string"],
456+
"p": ["string"],
457+
"q": [" normal string"],
458+
"r": [" n"],
458459
"s": ["A Normal String"],
459460
"t": ["A Normal String"],
461+
"u": ["A Normal String"],
460462
}
461463
)
462464

0 commit comments

Comments
 (0)