Conversation
CREATE SCHEMA takes a list of schema_elements that are space-separated and must not carry their own terminating ';'. The emitter used to emit each child statement's ';', producing invalid SQL such as 'create schema s1 create table a (f1 int);;' whenever the statement was parsed as a whole. Add a no_semicolon flag to EventEmitter and set it while emitting the schema elements, plus a regression test that round-trips a CREATE SCHEMA with two elements.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
CREATE SCHEMAtakes a list of schema elements.Per the grammar (
OptSchemaEltList: OptSchemaEltList schema_stmt) they are space-separated and only the outer statement carries a terminator.The emitter printed each child statement's own
;, producing invalid SQL:Implementation
EventEmittergains ano_semicolonflag that makestoken()dropSEMICOLON; it is set while emittingschema_eltsand cleared afterwards.The separator before the element list becomes a soft line so the renderer can wrap when the schema name and the first element do not fit.
Tests
tests/create_schema_elts.rsround-trips aCREATE SCHEMAwith two elements: format, reparse, normalize, compare ASTs.