1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package com.healthmarketscience.jackcess.impl.query;
18
19 import java.util.List;
20
21 import static com.healthmarketscience.jackcess.impl.query.QueryFormat.*;
22 import com.healthmarketscience.jackcess.query.CrossTabQuery;
23
24
25
26
27
28
29
30
31 public class CrossTabQueryImpl extends BaseSelectQueryImpl
32 implements CrossTabQuery
33 {
34
35 public CrossTabQueryImpl(String name, List<Row> rows, int objectId,
36 int objectFlag) {
37 super(name, rows, objectId, objectFlag, Type.CROSS_TAB);
38 }
39
40 protected Row getTransformRow() {
41 return getUniqueRow(
42 filterRowsByNotFlag(super.getColumnRows(),
43 (short)(CROSSTAB_PIVOT_FLAG |
44 CROSSTAB_NORMAL_FLAG)));
45 }
46
47 @Override
48 protected List<Row> getColumnRows() {
49 return filterRowsByFlag(super.getColumnRows(), CROSSTAB_NORMAL_FLAG);
50 }
51
52 @Override
53 protected List<Row> getGroupByRows() {
54 return filterRowsByFlag(super.getGroupByRows(), CROSSTAB_NORMAL_FLAG);
55 }
56
57 protected Row getPivotRow() {
58 return getUniqueRow(filterRowsByFlag(super.getColumnRows(),
59 CROSSTAB_PIVOT_FLAG));
60 }
61
62 @Override
63 public String getTransformExpression() {
64 Row row = getTransformRow();
65 if(row.expression == null) {
66 return null;
67 }
68
69 StringBuilder builder = new StringBuilder(row.expression);
70 return toAlias(builder, row.name1).toString();
71 }
72
73 @Override
74 public String getPivotExpression() {
75 return getPivotRow().expression;
76 }
77
78
79
80
81
82 @Override
83 protected void appendSelectType(StringBuilder builder)
84 {
85
86 }
87
88 @Override
89 protected void toSQLString(StringBuilder builder)
90 {
91 String transformExpr = getTransformExpression();
92 if(transformExpr != null) {
93 builder.append("TRANSFORM ").append(transformExpr).append(NEWLINE);
94 }
95
96 toSQLSelectString(builder, true);
97
98 builder.append(NEWLINE).append("PIVOT ")
99 .append(getPivotExpression());
100 }
101
102 }