Skip to content

Commit b1b86f5

Browse files
fix: use SelectItem for UnPivot
Signed-off-by: Andreas Reichel <andreas@manticore-projects.com>
1 parent 9c37fe8 commit b1b86f5

File tree

5 files changed

+25
-10
lines changed

5 files changed

+25
-10
lines changed

src/main/java/net/sf/jsqlparser/statement/piped/PivotPipeOperator.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package net.sf.jsqlparser.statement.piped;
22

33
import net.sf.jsqlparser.expression.Alias;
4-
import net.sf.jsqlparser.expression.Expression;
54
import net.sf.jsqlparser.expression.Function;
65
import net.sf.jsqlparser.schema.Column;
76
import net.sf.jsqlparser.statement.select.Select;

src/main/java/net/sf/jsqlparser/statement/piped/UnPivotPipeOperator.java

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
package net.sf.jsqlparser.statement.piped;
22

33
import net.sf.jsqlparser.expression.Alias;
4-
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
54
import net.sf.jsqlparser.schema.Column;
5+
import net.sf.jsqlparser.statement.select.Select;
6+
import net.sf.jsqlparser.statement.select.SelectItem;
7+
8+
import java.util.List;
69

710
public class UnPivotPipeOperator extends PipeOperator {
811
private Column valuesColumn;
912
private Column nameColumn;
10-
private ExpressionList<Column> pivotColumns;
13+
private List<SelectItem<?>> pivotColumns;
1114
private Alias alias = null;
1215

1316
public UnPivotPipeOperator(Column valuesColumn, Column nameColumn,
14-
ExpressionList<Column> pivotColumns, Alias alias) {
17+
List<SelectItem<?>> pivotColumns, Alias alias) {
1518
this.valuesColumn = valuesColumn;
1619
this.nameColumn = nameColumn;
1720
this.pivotColumns = pivotColumns;
@@ -36,11 +39,11 @@ public UnPivotPipeOperator setNameColumn(Column nameColumn) {
3639
return this;
3740
}
3841

39-
public ExpressionList<Column> getPivotColumns() {
42+
public List<SelectItem<?>> getPivotColumns() {
4043
return pivotColumns;
4144
}
4245

43-
public UnPivotPipeOperator setPivotColumns(ExpressionList<Column> pivotColumns) {
46+
public UnPivotPipeOperator setPivotColumns(List<SelectItem<?>> pivotColumns) {
4447
this.pivotColumns = pivotColumns;
4548
return this;
4649
}
@@ -63,7 +66,7 @@ public StringBuilder appendTo(StringBuilder builder) {
6366
.append(" FOR ")
6467
.append(nameColumn)
6568
.append(" IN (")
66-
.append(pivotColumns)
69+
.append(Select.getStringList(pivotColumns))
6770
.append("))");
6871
if (alias != null) {
6972
builder.append(" ").append(alias);

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2632,13 +2632,13 @@ UnPivotPipeOperator UnPivotPipeOperator():
26322632
{
26332633
Column valuesColumn;
26342634
Column nameColumn;
2635-
ExpressionList<Column> pivotColumns;
2635+
List<SelectItem<?>> pivotColumns;
26362636
Alias alias = null;
26372637
}
26382638
{
26392639
<K_UNPIVOT> "(" valuesColumn=Column()
26402640
<K_FOR> nameColumn=Column()
2641-
<K_IN> "(" pivotColumns = ColumnList() ")"
2641+
<K_IN> "(" pivotColumns = SelectItemsList() ")"
26422642
")"
26432643
[ LOOKAHEAD(2) alias = Alias() ]
26442644
{

src/test/java/net/sf/jsqlparser/statement/builder/ReflectionModelTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ public class ReflectionModelTest {
190190
new net.sf.jsqlparser.statement.select.OrderByElement(),
191191
// new net.sf.jsqlparser.statement.select.ParenthesisFromItem().getFromItem(),
192192
new net.sf.jsqlparser.statement.select.Pivot(),
193-
new net.sf.jsqlparser.statement.select.PivotXml(),
193+
// new net.sf.jsqlparser.statement.select.PivotXml(),
194194
// new net.sf.jsqlparser.statement.select.PlainSelect(),
195195
// new net.sf.jsqlparser.statement.select.Select(),
196196
new net.sf.jsqlparser.statement.select.SelectItem<>(),

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2774,6 +2774,19 @@ public void testPivot5() throws JSQLParserException {
27742774
assertSqlCanBeParsedAndDeparsed(stmt);
27752775
}
27762776

2777+
@Test
2778+
void testPivotWithOrderBy() throws JSQLParserException {
2779+
String sqlStr = "" +
2780+
"SELECT *\n" +
2781+
"FROM (\n" +
2782+
" SELECT 'kale' AS product, 51 AS sales, 'Q1' AS quarter\n" +
2783+
" )\n" +
2784+
"PIVOT(SUM(sales) FOR quarter IN ('Q1', 'Q2'))\n" +
2785+
"ORDER BY 1\n" +
2786+
";";
2787+
assertSqlCanBeParsedAndDeparsed(sqlStr, true);
2788+
}
2789+
27772790
@Test
27782791
public void testPivotXml1() throws JSQLParserException {
27792792
String stmt = "SELECT * FROM mytable PIVOT XML (count(a) FOR b IN ('val1'))";

0 commit comments

Comments
 (0)