Skip to content

Commit 322be2c

Browse files
committed
test: store ROWS FROM fixtures as structured test data
1 parent d514617 commit 322be2c

4 files changed

Lines changed: 29 additions & 49 deletions

File tree

src/test/java/net/sf/jsqlparser/statement/select/RowsFromColumnDefinitionTest.java

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,8 @@
1515
import static org.junit.jupiter.api.Assertions.assertThrows;
1616
import static org.junit.jupiter.api.Assertions.assertTrue;
1717

18-
import java.io.IOException;
19-
import java.io.InputStream;
20-
import java.nio.charset.StandardCharsets;
2118
import java.util.List;
2219
import java.util.Set;
23-
import java.util.stream.Stream;
2420
import net.sf.jsqlparser.JSQLParserException;
2521
import net.sf.jsqlparser.expression.Function;
2622
import net.sf.jsqlparser.expression.LongValue;
@@ -34,30 +30,20 @@
3430
import net.sf.jsqlparser.util.deparser.StatementDeParser;
3531
import org.junit.jupiter.api.Test;
3632
import org.junit.jupiter.params.ParameterizedTest;
37-
import org.junit.jupiter.params.provider.MethodSource;
33+
import org.junit.jupiter.params.provider.CsvFileSource;
3834

3935
class RowsFromColumnDefinitionTest {
4036

41-
// Accepted/rejected fixtures were checked against PostgreSQL 18.6.
42-
static Stream<String> validSql() throws IOException {
43-
return fixture("rows-from-valid.sql");
44-
}
45-
46-
static Stream<String> invalidSql() throws IOException {
47-
return fixture("rows-from-invalid.sql");
48-
}
49-
50-
private static Stream<String> fixture(String name) throws IOException {
51-
try (InputStream input = RowsFromColumnDefinitionTest.class.getResourceAsStream(name)) {
52-
return new String(input.readAllBytes(), StandardCharsets.UTF_8).lines()
53-
.filter(line -> !line.isBlank());
54-
}
55-
}
56-
37+
// Accepted/rejected cases are data records, not executable SQL batch scripts.
38+
// Both outcomes were checked against PostgreSQL 18.6.
5739
@ParameterizedTest
58-
@MethodSource("validSql")
59-
void preservesDefinitionsAndOuterAliasesThroughBothRenderers(String sql)
40+
@CsvFileSource(resources = "rows-from-cases.tsv", delimiter = '\t')
41+
void preservesValidDefinitionsAndRejectsMalformedLists(boolean valid, String sql)
6042
throws JSQLParserException {
43+
if (!valid) {
44+
assertThrows(JSQLParserException.class, () -> parse(sql));
45+
return;
46+
}
6147
PlainSelect select = parse(sql);
6248
StringBuilder visitor = new StringBuilder();
6349
select.accept(new StatementDeParser(visitor));
@@ -68,12 +54,6 @@ void preservesDefinitionsAndOuterAliasesThroughBothRenderers(String sql)
6854
}
6955
}
7056

71-
@ParameterizedTest
72-
@MethodSource("invalidSql")
73-
void rejectsTableConstraintsAndMalformedColumnLists(String sql) {
74-
assertThrows(JSQLParserException.class, () -> parse(sql));
75-
}
76-
7757
@Test
7858
void eachFunctionOwnsItsDefinitionsIndependentlyOfTheOuterAlias()
7959
throws JSQLParserException {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
true SELECT * FROM ROWS FROM (json_to_recordset('[{"a":1}]') AS (a integer)) WITH ORDINALITY
2+
true SELECT * FROM ROWS FROM (json_to_recordset('[{"a":1,"b":"x"}]') AS (a integer, b text)) AS r
3+
true SELECT * FROM ROWS FROM (json_to_recordset('[{"a":1}]') AS (a integer), generate_series(1, 2)) WITH ORDINALITY AS r(a, n, ord)
4+
true SELECT * FROM ROWS FROM (generate_series(1, 2), jsonb_to_recordset('[{"a":1.25}]'::jsonb) AS (a numeric(10, 2))) AS r(n, amount)
5+
true SELECT * FROM ROWS FROM (json_to_record('{"a":"x"}') AS (a text COLLATE "C"))
6+
true SELECT * FROM ROWS FROM (json_to_record('{"a":"x"}') AS (a text COLLATE pg_catalog."C"))
7+
true SELECT * FROM ROWS FROM (json_to_record('{"a":[1,2]}') AS (a integer[]))
8+
true SELECT * FROM ROWS FROM (json_to_record('{"a":"2026-01-01T12:00:00Z"}') AS (a timestamp(6) with time zone))
9+
true SELECT * FROM ROWS FROM (json_to_record('{"odd name":1}') AS ("odd name" integer)) AS r("renamed")
10+
true SELECT r.* FROM (VALUES ('[{"a":1}]'::json)) AS src(payload) CROSS JOIN LATERAL ROWS FROM (json_to_recordset(src.payload) AS (a integer)) WITH ORDINALITY AS r
11+
true SELECT * FROM ROWS FROM (generate_series(1, 2), generate_series(1, 1)) AS r(a, b)
12+
true SELECT * FROM ROWS FROM (json_to_record('{"a":1}') AS (a integer), json_to_record('{"b":2}') AS (b integer))
13+
false SELECT * FROM ROWS FROM (json_to_record('{}') AS ())
14+
false SELECT * FROM ROWS FROM (json_to_record('{}') AS (a))
15+
false SELECT * FROM ROWS FROM (json_to_record('{}') AS (a integer,))
16+
false SELECT * FROM ROWS FROM (json_to_record('{}') AS (a integer NOT NULL))
17+
false SELECT * FROM ROWS FROM (json_to_record('{}') AS (a integer DEFAULT 1))
18+
false SELECT * FROM ROWS FROM (json_to_record('{}') AS r(a integer))
19+
false SELECT * FROM ROWS FROM (json_to_record('{}') AS (a integer) WITH ORDINALITY)
20+
false SELECT * FROM ROWS FROM ()

src/test/resources/net/sf/jsqlparser/statement/select/rows-from-invalid.sql

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/test/resources/net/sf/jsqlparser/statement/select/rows-from-valid.sql

Lines changed: 0 additions & 12 deletions
This file was deleted.

0 commit comments

Comments
 (0)