Skip to content

Commit c74bd6e

Browse files
toverdijkmp911de
authored andcommitted
Rename SQL parser components.
[#512][#513]
1 parent 43462fd commit c74bd6e

File tree

5 files changed

+119
-119
lines changed

5 files changed

+119
-119
lines changed

src/main/java/io/r2dbc/postgresql/TokenizedSql.java renamed to src/main/java/io/r2dbc/postgresql/ParsedSql.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
import java.util.Set;
2121
import java.util.TreeSet;
2222

23-
class TokenizedSql {
23+
class ParsedSql {
2424

2525
private final String sql;
2626

@@ -30,7 +30,7 @@ class TokenizedSql {
3030

3131
private final int parameterCount;
3232

33-
public TokenizedSql(String sql, List<TokenizedStatement> statements) {
33+
public ParsedSql(String sql, List<TokenizedStatement> statements) {
3434
this.sql = sql;
3535
this.statements = statements;
3636
this.statementCount = statements.size();

src/main/java/io/r2dbc/postgresql/PostgresqlBatch.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ final class PostgresqlBatch implements io.r2dbc.postgresql.api.PostgresqlBatch {
4040
public PostgresqlBatch add(String sql) {
4141
Assert.requireNonNull(sql, "sql must not be null");
4242

43-
if (!(PostgresqlSqlLexer.tokenize(sql).getParameterCount() == 0)) {
43+
if (!(PostgresqlSqlParser.tokenize(sql).getParameterCount() == 0)) {
4444
throw new IllegalArgumentException(String.format("Statement '%s' is not supported. This is often due to the presence of parameters.", sql));
4545
}
4646

src/main/java/io/r2dbc/postgresql/PostgresqlSqlLexer.java renamed to src/main/java/io/r2dbc/postgresql/PostgresqlSqlParser.java

+29-29
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
*
2828
* @since 0.9
2929
*/
30-
class PostgresqlSqlLexer {
30+
class PostgresqlSqlParser {
3131

3232
private static final char[] SPECIAL_AND_OPERATOR_CHARS = {
3333
'+', '-', '*', '/', '<', '>', '=', '~', '!', '@', '#', '%', '^', '&', '|', '`', '?',
@@ -38,15 +38,15 @@ class PostgresqlSqlLexer {
3838
Arrays.sort(SPECIAL_AND_OPERATOR_CHARS);
3939
}
4040

41-
public static TokenizedSql tokenize(String sql) {
42-
List<TokenizedSql.Token> tokens = new ArrayList<>();
43-
List<TokenizedSql.TokenizedStatement> statements = new ArrayList<>();
41+
public static ParsedSql tokenize(String sql) {
42+
List<ParsedSql.Token> tokens = new ArrayList<>();
43+
List<ParsedSql.TokenizedStatement> statements = new ArrayList<>();
4444

4545
int statementStartIndex = 0;
4646
int i = 0;
4747
while (i < sql.length()) {
4848
char c = sql.charAt(i);
49-
TokenizedSql.Token token = null;
49+
ParsedSql.Token token = null;
5050

5151
if (isWhitespace(c)) {
5252
i++;
@@ -73,25 +73,25 @@ public static TokenizedSql tokenize(String sql) {
7373
token = getParameterOrDollarQuoteToken(sql, i);
7474
break;
7575
case ';':
76-
token = new TokenizedSql.Token(TokenizedSql.TokenType.STATEMENT_END, ";");
76+
token = new ParsedSql.Token(ParsedSql.TokenType.STATEMENT_END, ";");
7777
break;
7878
default:
7979
break;
8080
}
8181
if (token == null) {
8282
if (isSpecialOrOperatorChar(c)) {
83-
token = new TokenizedSql.Token(TokenizedSql.TokenType.SPECIAL_OR_OPERATOR, Character.toString(c));//getSpecialOrOperatorToken(sql, i);
83+
token = new ParsedSql.Token(ParsedSql.TokenType.SPECIAL_OR_OPERATOR, Character.toString(c));//getSpecialOrOperatorToken(sql, i);
8484
} else {
8585
token = getDefaultToken(sql, i);
8686
}
8787
}
8888

8989
i += token.getValue().length();
9090

91-
if (token.getType() == TokenizedSql.TokenType.STATEMENT_END) {
91+
if (token.getType() == ParsedSql.TokenType.STATEMENT_END) {
9292

9393
tokens.add(token);
94-
statements.add(new TokenizedSql.TokenizedStatement(sql.substring(statementStartIndex, i), tokens));
94+
statements.add(new ParsedSql.TokenizedStatement(sql.substring(statementStartIndex, i), tokens));
9595

9696
tokens = new ArrayList<>();
9797
statementStartIndex = i + 1;
@@ -101,27 +101,27 @@ public static TokenizedSql tokenize(String sql) {
101101
}
102102
// If tokens is not empty, implicit statement end
103103
if (!tokens.isEmpty()) {
104-
statements.add(new TokenizedSql.TokenizedStatement(sql.substring(statementStartIndex), tokens));
104+
statements.add(new ParsedSql.TokenizedStatement(sql.substring(statementStartIndex), tokens));
105105
}
106106

107-
return new TokenizedSql(sql, statements);
107+
return new ParsedSql(sql, statements);
108108
}
109109

110-
private static TokenizedSql.Token getDefaultToken(String sql, int beginIndex) {
110+
private static ParsedSql.Token getDefaultToken(String sql, int beginIndex) {
111111
for (int i = beginIndex + 1; i < sql.length(); i++) {
112112
char c = sql.charAt(i);
113113
if (Character.isWhitespace(c) || isSpecialOrOperatorChar(c)) {
114-
return new TokenizedSql.Token(TokenizedSql.TokenType.DEFAULT, sql.substring(beginIndex, i));
114+
return new ParsedSql.Token(ParsedSql.TokenType.DEFAULT, sql.substring(beginIndex, i));
115115
}
116116
}
117-
return new TokenizedSql.Token(TokenizedSql.TokenType.DEFAULT, sql.substring(beginIndex));
117+
return new ParsedSql.Token(ParsedSql.TokenType.DEFAULT, sql.substring(beginIndex));
118118
}
119119

120120
private static boolean isSpecialOrOperatorChar(char c) {
121121
return Arrays.binarySearch(SPECIAL_AND_OPERATOR_CHARS, c) >= 0;
122122
}
123123

124-
private static TokenizedSql.Token getBlockCommentToken(String sql, int beginIndex) {
124+
private static ParsedSql.Token getBlockCommentToken(String sql, int beginIndex) {
125125
int depth = 1;
126126
for (int i = beginIndex + 2; i < (sql.length() - 1); i++) {
127127
char c1 = sql.charAt(i);
@@ -134,44 +134,44 @@ private static TokenizedSql.Token getBlockCommentToken(String sql, int beginInde
134134
i++;
135135
}
136136
if (depth == 0) {
137-
return new TokenizedSql.Token(TokenizedSql.TokenType.COMMENT, sql.substring(beginIndex, i + 1));
137+
return new ParsedSql.Token(ParsedSql.TokenType.COMMENT, sql.substring(beginIndex, i + 1));
138138
}
139139
}
140140
throw new IllegalArgumentException("Sql cannot be parsed: unclosed block comment (comment opened at index " + beginIndex + ") in statement: " + sql);
141141
}
142142

143-
private static TokenizedSql.Token getCommentToLineEndToken(String sql, int beginIndex) {
143+
private static ParsedSql.Token getCommentToLineEndToken(String sql, int beginIndex) {
144144
int lineEnding = sql.indexOf('\n', beginIndex);
145145
if (lineEnding == -1) {
146-
return new TokenizedSql.Token(TokenizedSql.TokenType.COMMENT, sql.substring(beginIndex));
146+
return new ParsedSql.Token(ParsedSql.TokenType.COMMENT, sql.substring(beginIndex));
147147
} else {
148-
return new TokenizedSql.Token(TokenizedSql.TokenType.COMMENT, sql.substring(beginIndex, lineEnding));
148+
return new ParsedSql.Token(ParsedSql.TokenType.COMMENT, sql.substring(beginIndex, lineEnding));
149149
}
150150
}
151151

152-
private static TokenizedSql.Token getDollarQuoteToken(String sql, String tag, int beginIndex) {
152+
private static ParsedSql.Token getDollarQuoteToken(String sql, String tag, int beginIndex) {
153153
int nextQuote = sql.indexOf(tag, beginIndex + tag.length());
154154
if (nextQuote == -1) {
155155
throw new IllegalArgumentException("Sql cannot be parsed: unclosed quote (quote opened at index " + beginIndex + ") in statement: " + sql);
156156
} else {
157-
return new TokenizedSql.Token(TokenizedSql.TokenType.STRING_CONSTANT, sql.substring(beginIndex, nextQuote + tag.length()));
157+
return new ParsedSql.Token(ParsedSql.TokenType.STRING_CONSTANT, sql.substring(beginIndex, nextQuote + tag.length()));
158158
}
159159
}
160160

161-
private static TokenizedSql.Token getParameterToken(String sql, int beginIndex) {
161+
private static ParsedSql.Token getParameterToken(String sql, int beginIndex) {
162162
for (int i = beginIndex + 1; i < sql.length(); i++) {
163163
char c = sql.charAt(i);
164164
if (isWhitespace(c) || isSpecialOrOperatorChar(c)) {
165-
return new TokenizedSql.Token(TokenizedSql.TokenType.PARAMETER, sql.substring(beginIndex, i));
165+
return new ParsedSql.Token(ParsedSql.TokenType.PARAMETER, sql.substring(beginIndex, i));
166166
}
167167
if (!isAsciiDigit(c)) {
168168
throw new IllegalArgumentException("Sql cannot be parsed: illegal character in parameter or dollar-quote tag: " + c);
169169
}
170170
}
171-
return new TokenizedSql.Token(TokenizedSql.TokenType.PARAMETER, sql.substring(beginIndex));
171+
return new ParsedSql.Token(ParsedSql.TokenType.PARAMETER, sql.substring(beginIndex));
172172
}
173173

174-
private static TokenizedSql.Token getParameterOrDollarQuoteToken(String sql, int beginIndex) {
174+
private static ParsedSql.Token getParameterOrDollarQuoteToken(String sql, int beginIndex) {
175175
char firstChar = sql.charAt(beginIndex + 1);
176176
if (firstChar == '$') {
177177
return getDollarQuoteToken(sql, "$$", beginIndex);
@@ -191,21 +191,21 @@ private static TokenizedSql.Token getParameterOrDollarQuoteToken(String sql, int
191191
}
192192
}
193193

194-
private static TokenizedSql.Token getStandardQuoteToken(String sql, int beginIndex) {
194+
private static ParsedSql.Token getStandardQuoteToken(String sql, int beginIndex) {
195195
int nextQuote = sql.indexOf('\'', beginIndex + 1);
196196
if (nextQuote == -1) {
197197
throw new IllegalArgumentException("Sql cannot be parsed: unclosed quote (quote opened at index " + beginIndex + ") in statement: " + sql);
198198
} else {
199-
return new TokenizedSql.Token(TokenizedSql.TokenType.STRING_CONSTANT, sql.substring(beginIndex, nextQuote + 1));
199+
return new ParsedSql.Token(ParsedSql.TokenType.STRING_CONSTANT, sql.substring(beginIndex, nextQuote + 1));
200200
}
201201
}
202202

203-
private static TokenizedSql.Token getQuotedIdentifierToken(String sql, int beginIndex) {
203+
private static ParsedSql.Token getQuotedIdentifierToken(String sql, int beginIndex) {
204204
int nextQuote = sql.indexOf('\"', beginIndex + 1);
205205
if (nextQuote == -1) {
206206
throw new IllegalArgumentException("Sql cannot be parsed: unclosed quoted identifier (identifier opened at index " + beginIndex + ") in statement: " + sql);
207207
} else {
208-
return new TokenizedSql.Token(TokenizedSql.TokenType.QUOTED_IDENTIFIER, sql.substring(beginIndex, nextQuote + 1));
208+
return new ParsedSql.Token(ParsedSql.TokenType.QUOTED_IDENTIFIER, sql.substring(beginIndex, nextQuote + 1));
209209
}
210210
}
211211

src/main/java/io/r2dbc/postgresql/PostgresqlStatement.java

+14-14
Original file line numberDiff line numberDiff line change
@@ -65,19 +65,19 @@ final class PostgresqlStatement implements io.r2dbc.postgresql.api.PostgresqlSta
6565

6666
private final ConnectionContext connectionContext;
6767

68-
private final TokenizedSql tokenizedSql;
68+
private final ParsedSql parsedSql;
6969

7070
private int fetchSize;
7171

7272
private String[] generatedColumns;
7373

7474
PostgresqlStatement(ConnectionResources resources, String sql) {
7575
this.resources = Assert.requireNonNull(resources, "resources must not be null");
76-
this.tokenizedSql = PostgresqlSqlLexer.tokenize(Assert.requireNonNull(sql, "sql must not be null"));
76+
this.parsedSql = PostgresqlSqlParser.tokenize(Assert.requireNonNull(sql, "sql must not be null"));
7777
this.connectionContext = resources.getClient().getContext();
78-
this.bindings = new ArrayDeque<>(this.tokenizedSql.getParameterCount());
78+
this.bindings = new ArrayDeque<>(this.parsedSql.getParameterCount());
7979

80-
if (this.tokenizedSql.getStatementCount() > 1 && this.tokenizedSql.getParameterCount() > 0) {
80+
if (this.parsedSql.getStatementCount() > 1 && this.parsedSql.getParameterCount() > 0) {
8181
throw new IllegalArgumentException(String.format("Statement '%s' cannot be created. This is often due to the presence of both multiple statements and parameters at the same time.", sql));
8282
}
8383

@@ -90,7 +90,7 @@ public PostgresqlStatement add() {
9090
if (binding != null) {
9191
binding.validate();
9292
}
93-
this.bindings.add(new Binding(this.tokenizedSql.getParameterCount()));
93+
this.bindings.add(new Binding(this.parsedSql.getParameterCount()));
9494
return this;
9595
}
9696

@@ -117,8 +117,8 @@ public PostgresqlStatement bindNull(String identifier, Class<?> type) {
117117
public PostgresqlStatement bindNull(int index, Class<?> type) {
118118
Assert.requireNonNull(type, "type must not be null");
119119

120-
if (index >= this.tokenizedSql.getParameterCount()) {
121-
throw new UnsupportedOperationException(String.format("Cannot bind parameter %d, statement has %d parameters", index, this.tokenizedSql.getParameterCount()));
120+
if (index >= this.parsedSql.getParameterCount()) {
121+
throw new UnsupportedOperationException(String.format("Cannot bind parameter %d, statement has %d parameters", index, this.parsedSql.getParameterCount()));
122122
}
123123

124124
BindingLogger.logBindNull(this.connectionContext, index, type);
@@ -130,7 +130,7 @@ public PostgresqlStatement bindNull(int index, Class<?> type) {
130130
private Binding getCurrentOrFirstBinding() {
131131
Binding binding = this.bindings.peekLast();
132132
if (binding == null) {
133-
Binding newBinding = new Binding(this.tokenizedSql.getParameterCount());
133+
Binding newBinding = new Binding(this.parsedSql.getParameterCount());
134134
this.bindings.add(newBinding);
135135
return newBinding;
136136
} else {
@@ -141,20 +141,20 @@ private Binding getCurrentOrFirstBinding() {
141141
@Override
142142
public Flux<io.r2dbc.postgresql.api.PostgresqlResult> execute() {
143143
if (this.generatedColumns == null) {
144-
return execute(this.tokenizedSql.getSql());
144+
return execute(this.parsedSql.getSql());
145145
}
146-
return execute(GeneratedValuesUtils.augment(this.tokenizedSql.getSql(), this.generatedColumns));
146+
return execute(GeneratedValuesUtils.augment(this.parsedSql.getSql(), this.generatedColumns));
147147
}
148148

149149
@Override
150150
public PostgresqlStatement returnGeneratedValues(String... columns) {
151151
Assert.requireNonNull(columns, "columns must not be null");
152152

153-
if (this.tokenizedSql.hasDefaultTokenValue("RETURNING")) {
153+
if (this.parsedSql.hasDefaultTokenValue("RETURNING")) {
154154
throw new IllegalStateException("Statement already includes RETURNING clause");
155155
}
156156

157-
if (!this.tokenizedSql.hasDefaultTokenValue("DELETE", "INSERT", "UPDATE")) {
157+
if (!this.parsedSql.hasDefaultTokenValue("DELETE", "INSERT", "UPDATE")) {
158158
throw new IllegalStateException("Statement is not a DELETE, INSERT, or UPDATE command");
159159
}
160160

@@ -174,7 +174,7 @@ public String toString() {
174174
return "PostgresqlStatement{" +
175175
"bindings=" + this.bindings +
176176
", context=" + this.resources +
177-
", sql='" + this.tokenizedSql.getSql() + '\'' +
177+
", sql='" + this.parsedSql.getSql() + '\'' +
178178
", generatedColumns=" + Arrays.toString(this.generatedColumns) +
179179
'}';
180180
}
@@ -199,7 +199,7 @@ private int getIdentifierIndex(String identifier) {
199199
private Flux<io.r2dbc.postgresql.api.PostgresqlResult> execute(String sql) {
200200
ExceptionFactory factory = ExceptionFactory.withSql(sql);
201201

202-
if (this.tokenizedSql.getParameterCount() != 0) {
202+
if (this.parsedSql.getParameterCount() != 0) {
203203
// Extended query protocol
204204
if (this.bindings.size() == 0) {
205205
throw new IllegalStateException("No parameters have been bound");

0 commit comments

Comments
 (0)