Skip to content

Commit 01dc5f3

Browse files
feat: Piped SQL and FROM queries (WIP)
- `Drop` operator - `Limit` operator - `Set` operator Signed-off-by: Andreas Reichel <[email protected]> Signed-off-by: manticore-projects <[email protected]>
1 parent abf137e commit 01dc5f3

File tree

10 files changed

+567
-6
lines changed

10 files changed

+567
-6
lines changed
Lines changed: 198 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,206 @@
11
package net.sf.jsqlparser.statement.piped;
22

3+
import net.sf.jsqlparser.expression.ExpressionVisitor;
4+
import net.sf.jsqlparser.expression.operators.relational.ExpressionList;
5+
import net.sf.jsqlparser.schema.Column;
6+
7+
import java.util.Collection;
8+
import java.util.Comparator;
9+
import java.util.Iterator;
10+
import java.util.List;
11+
import java.util.ListIterator;
12+
import java.util.Spliterator;
13+
import java.util.function.Consumer;
14+
import java.util.function.IntFunction;
15+
import java.util.function.Predicate;
16+
import java.util.function.UnaryOperator;
17+
import java.util.stream.Stream;
18+
319
public class DropPipeOperator extends PipeOperator {
20+
private ExpressionList<Column> columns;
21+
22+
public DropPipeOperator(ExpressionList<Column> columns) {
23+
this.columns = columns;
24+
}
25+
26+
public ExpressionList<Column> getColumns() {
27+
return columns;
28+
}
29+
30+
public DropPipeOperator setColumns(ExpressionList<Column> columns) {
31+
this.columns = columns;
32+
return this;
33+
}
34+
35+
public boolean containsAll(Collection<? extends Column> c) {
36+
return columns.containsAll(c);
37+
}
38+
39+
public Column get(int index) {
40+
return columns.get(index);
41+
}
42+
43+
public ExpressionList<?> addExpression(Column expression) {
44+
return columns.addExpression(expression);
45+
}
46+
47+
public ExpressionList<?> addExpressions(Column... expressions) {
48+
return columns.addExpressions(expressions);
49+
}
50+
51+
public ExpressionList<?> addExpressions(Collection<Column> expressions) {
52+
return columns.addExpressions(expressions);
53+
}
54+
55+
public ExpressionList<?> withExpressions(Column... expressions) {
56+
return columns.withExpressions(expressions);
57+
}
58+
59+
public ExpressionList<?> withExpressions(Collection<Column> expressions) {
60+
return columns.withExpressions(expressions);
61+
}
62+
63+
public <K, S> K accept(ExpressionVisitor<K> expressionVisitor, S context) {
64+
return columns.accept(expressionVisitor, context);
65+
}
66+
67+
public void trimToSize() {
68+
columns.trimToSize();
69+
}
70+
71+
public boolean addAll(int index, Collection<? extends Column> c) {
72+
return columns.addAll(index, c);
73+
}
74+
75+
public boolean retainAll(Collection<? extends Column> c) {
76+
return columns.retainAll(c);
77+
}
78+
79+
public Stream<Column> parallelStream() {
80+
return columns.parallelStream();
81+
}
82+
83+
public boolean addAll(Collection<? extends Column> c) {
84+
return columns.addAll(c);
85+
}
86+
87+
public int indexOf(Column o) {
88+
return columns.indexOf(o);
89+
}
90+
91+
public <T> void accept(ExpressionVisitor<T> expressionVisitor) {
92+
columns.accept(expressionVisitor);
93+
}
94+
95+
public void forEach(Consumer<? super Column> action) {
96+
columns.forEach(action);
97+
}
98+
99+
public int lastIndexOf(Column o) {
100+
return columns.lastIndexOf(o);
101+
}
102+
103+
public Stream<Column> stream() {
104+
return columns.stream();
105+
}
106+
107+
public Spliterator<Column> spliterator() {
108+
return columns.spliterator();
109+
}
110+
111+
public Column set(int index, Column element) {
112+
return columns.set(index, element);
113+
}
114+
115+
public void sort(Comparator<? super Column> c) {
116+
columns.sort(c);
117+
}
118+
119+
public void ensureCapacity(int minCapacity) {
120+
columns.ensureCapacity(minCapacity);
121+
}
122+
123+
public boolean remove(Column o) {
124+
return columns.remove(o);
125+
}
126+
127+
public Object[] toArray() {
128+
return columns.toArray();
129+
}
130+
131+
public Iterator<Column> iterator() {
132+
return columns.iterator();
133+
}
134+
135+
public <T> T[] toArray(IntFunction<T[]> generator) {
136+
return columns.toArray(generator);
137+
}
138+
139+
public boolean add(Column column) {
140+
return columns.add(column);
141+
}
142+
143+
public ListIterator<Column> listIterator(int index) {
144+
return columns.listIterator(index);
145+
}
146+
147+
public void replaceAll(UnaryOperator<Column> operator) {
148+
columns.replaceAll(operator);
149+
}
150+
151+
public List<Column> subList(int fromIndex, int toIndex) {
152+
return columns.subList(fromIndex, toIndex);
153+
}
154+
155+
public boolean removeAll(Collection<Column> c) {
156+
return columns.removeAll(c);
157+
}
158+
159+
public boolean isEmpty() {
160+
return columns.isEmpty();
161+
}
162+
163+
public void clear() {
164+
columns.clear();
165+
}
166+
167+
public boolean contains(Column o) {
168+
return columns.contains(o);
169+
}
170+
171+
public Column remove(int index) {
172+
return columns.remove(index);
173+
}
174+
175+
public boolean removeIf(Predicate<? super Column> filter) {
176+
return columns.removeIf(filter);
177+
}
178+
179+
public <T> T[] toArray(T[] a) {
180+
return columns.toArray(a);
181+
}
182+
183+
public void add(int index, Column element) {
184+
columns.add(index, element);
185+
}
186+
187+
public int size() {
188+
return columns.size();
189+
}
190+
191+
public ListIterator<Column> listIterator() {
192+
return columns.listIterator();
193+
}
194+
4195
@Override
5196
public <T, S> T accept(PipeOperatorVisitor<T> visitor, S context) {
6197
return visitor.visit(this, context);
7198
}
199+
200+
@Override
201+
public StringBuilder appendTo(StringBuilder builder) {
202+
builder.append("|> ").append("DROP ");
203+
columns.appendTo(builder).append("\n");
204+
return builder;
205+
}
8206
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,49 @@
11
package net.sf.jsqlparser.statement.piped;
22

3+
import net.sf.jsqlparser.expression.Expression;
4+
35
public class LimitPipeOperator extends PipeOperator {
6+
private Expression limitExpression;
7+
private Expression offsetExpression;
8+
9+
public LimitPipeOperator(Expression limitExpression, Expression offsetExpression) {
10+
this.limitExpression = limitExpression;
11+
this.offsetExpression = offsetExpression;
12+
}
13+
14+
public LimitPipeOperator(Expression limitExpression) {
15+
this(limitExpression, null);
16+
}
17+
18+
public Expression getLimitExpression() {
19+
return limitExpression;
20+
}
21+
22+
public LimitPipeOperator setLimitExpression(Expression limitExpression) {
23+
this.limitExpression = limitExpression;
24+
return this;
25+
}
26+
27+
public Expression getOffsetExpression() {
28+
return offsetExpression;
29+
}
30+
31+
public LimitPipeOperator setOffsetExpression(Expression offsetExpression) {
32+
this.offsetExpression = offsetExpression;
33+
return this;
34+
}
35+
436
@Override
537
public <T, S> T accept(PipeOperatorVisitor<T> visitor, S context) {
638
return visitor.visit(this, context);
739
}
40+
41+
@Override
42+
public StringBuilder appendTo(StringBuilder builder) {
43+
builder.append("|> ").append("LIMIT ").append(limitExpression);
44+
if (offsetExpression != null) {
45+
builder.append(" OFFSET ").append(offsetExpression);
46+
}
47+
return builder;
48+
}
849
}

0 commit comments

Comments
 (0)