File: test_alias_map_in_subquery.test

package info (click to toggle)
duckdb 1.5.1-3
  • 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: 564
file content (88 lines) | stat: -rw-r--r-- 2,425 bytes parent folder | download | duplicates (4)
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
# name: test/sql/binder/test_alias_map_in_subquery.test
# description: Test binding an alias in a subquery
# group: [binder]

# Simple reproduction.
statement ok
CREATE OR REPLACE TABLE tbl (example VARCHAR);

statement ok
INSERT INTO tbl VALUES ('hello');

query I
SELECT (WITH keys AS (
    		SELECT example AS k
    	), nonNull AS (
    		SELECT keys.k, example AS v
    		FROM keys
    		WHERE v IS NOT NULL
    	)
    	SELECT nonNull.v
    	FROM nonNull
)
FROM tbl;
----
hello

# With the JSON extension and lambdas.
require json

statement ok
CREATE OR REPLACE TABLE testjson (example JSON);

statement ok
INSERT INTO testjson VALUES ('{ "location" : { "address" : "123 Main St" }, "sampleField" : null, "anotherField" : 123, "yetAnotherField" : "abc" }');

query I
SELECT (WITH keys AS (SELECT unnest(json_keys(example)) AS k), nonNull AS (
    		SELECT keys.k, example->keys.k AS v
    		FROM keys WHERE nullif(v, 'null') IS NOT NULL
    	)
    	SELECT json_group_object(nonNull.k, nonNull.v)
    	FROM nonNull
)
FROM testjson;
----
{"location":{"address":"123 Main St"},"anotherField":123,"yetAnotherField":"abc"}

# With a MACRO (issue #10491).
statement ok
CREATE OR REPLACE MACRO strip_null_value(jsonValue) AS (
	WITH keys AS (SELECT UNNEST(json_keys(jsonValue)) AS k),
		nonNull AS (
		SELECT keys.k, jsonValue->keys.k AS v
		FROM keys WHERE nullif(v, 'null') IS NOT NULL
	)
	SELECT json_group_object(nonNull.k, nonNull.v)
	FROM nonNull
);

query I
SELECT strip_null_value('{ "location" : { "address" : "123 Main St" }, "sampleField" : null, "anotherField" : 123, "yetAnotherField" : "abc" }')
AS example;
----
{"location":{"address":"123 Main St"},"anotherField":123,"yetAnotherField":"abc"}

# Testing with a table.

statement ok
CREATE OR REPLACE TABLE testjson (example JSON);

statement ok
INSERT INTO testjson
VALUES ('{ "location" : { "address" : "123 Main St" }, "sampleField" : null, "anotherField" : 123, "yetAnotherField" : "abc" }');

query I
SELECT strip_null_value(example) FROM testjson;
----
{"location":{"address":"123 Main St"},"anotherField":123,"yetAnotherField":"abc"}

# Testing with a CTE.
query I
WITH x AS (
	SELECT '{ "location" : { "address" : "123 Main St" }, "sampleField" : null, "anotherField" : 123, "yetAnotherField" : "abc" }'
	AS example)
SELECT strip_null_value(x.example) AS test
FROM x;
----
{"location":{"address":"123 Main St"},"anotherField":123,"yetAnotherField":"abc"}