(
GenericLexer lexer,
SqlParserCallback sqlParserCallback,
@Nullable LowerCaseCharSequenceObjHashMap<ExpressionNode> decls
)
| 3331 | } |
| 3332 | |
| 3333 | private ExecutionModel parseInsert( |
| 3334 | GenericLexer lexer, |
| 3335 | SqlParserCallback sqlParserCallback, |
| 3336 | @Nullable LowerCaseCharSequenceObjHashMap<ExpressionNode> decls |
| 3337 | ) throws SqlException { |
| 3338 | final InsertModel model = insertModelPool.next(); |
| 3339 | CharSequence tok = tok(lexer, "atomic or into or batch"); |
| 3340 | model.setBatchSize(configuration.getInsertModelBatchSize()); |
| 3341 | boolean atomicSpecified = false; |
| 3342 | |
| 3343 | if (isAtomicKeyword(tok)) { |
| 3344 | atomicSpecified = true; |
| 3345 | model.setBatchSize(-1); |
| 3346 | tok = tok(lexer, "into"); |
| 3347 | } |
| 3348 | |
| 3349 | if (isBatchKeyword(tok)) { |
| 3350 | long val = expectLong(lexer); |
| 3351 | if (val > 0) { |
| 3352 | model.setBatchSize(val); |
| 3353 | } else { |
| 3354 | throw SqlException.$(lexer.lastTokenPosition(), "batch size must be positive integer"); |
| 3355 | } |
| 3356 | |
| 3357 | tok = tok(lexer, "into or o3MaxLag"); |
| 3358 | if (isO3MaxLagKeyword(tok)) { |
| 3359 | int pos = lexer.getPosition(); |
| 3360 | model.setO3MaxLag(SqlUtil.expectMicros(tok(lexer, "lag value"), pos)); |
| 3361 | tok = tok(lexer, "into"); |
| 3362 | } |
| 3363 | } |
| 3364 | |
| 3365 | if (!isIntoKeyword(tok)) { |
| 3366 | throw SqlException.$(lexer.lastTokenPosition(), "'into' expected"); |
| 3367 | } |
| 3368 | |
| 3369 | tok = tok(lexer, "table name"); |
| 3370 | tok = sansPublicSchema(tok, lexer); |
| 3371 | assertNameIsQuotedOrNotAKeyword(tok, lexer.lastTokenPosition()); |
| 3372 | model.setTableName(nextLiteral(assertNoDotsAndSlashes(unquote(tok), lexer.lastTokenPosition()), lexer.lastTokenPosition())); |
| 3373 | |
| 3374 | tok = tok(lexer, "'(' or 'select'"); |
| 3375 | |
| 3376 | if (Chars.equals(tok, '(')) { |
| 3377 | do { |
| 3378 | tok = tok(lexer, "column"); |
| 3379 | if (Chars.equals(tok, ')')) { |
| 3380 | throw err(lexer, tok, "missing column name"); |
| 3381 | } |
| 3382 | |
| 3383 | assertNameIsQuotedOrNotAKeyword(tok, lexer.lastTokenPosition()); |
| 3384 | model.addColumn(unquote(tok), lexer.lastTokenPosition()); |
| 3385 | } while (Chars.equals((tok = tok(lexer, "','")), ',')); |
| 3386 | |
| 3387 | expectTok(tok, lexer.lastTokenPosition(), ')'); |
| 3388 | tok = optTok(lexer); |
| 3389 | } |
| 3390 |
no test coverage detected