MCPcopy Create free account
hub / github.com/AfterShip/clickhouse-sql-parser / parseCreateTable

Method parseCreateTable

parser/parser_table.go:309–400  ·  view source on GitHub ↗
(pos Pos, orReplace bool)

Source from the content-addressed store, hash-verified

307}
308
309func (p *Parser) parseCreateTable(pos Pos, orReplace bool) (*CreateTable, error) {
310 createTable := &CreateTable{CreatePos: pos, OrReplace: orReplace}
311 createTable.HasTemporary = p.tryConsumeKeywords(KeywordTemporary)
312
313 if err := p.expectKeyword(KeywordTable); err != nil {
314 return nil, err
315 }
316
317 // parse IF NOT EXISTS clause if exists
318 var err error
319 createTable.IfNotExists, err = p.tryParseIfNotExists()
320 if err != nil {
321 return nil, err
322 }
323
324 tableIdentifier, err := p.parseTableIdentifier(p.Pos())
325 if err != nil {
326 return nil, err
327 }
328 createTable.Name = tableIdentifier
329
330 // try parse UUID clause if exists
331 uuid, err := p.tryParseUUID()
332 if err != nil {
333 return nil, err
334 }
335 createTable.UUID = uuid
336 // parse ON CLUSTER clause if exists
337 onCluster, err := p.tryParseClusterClause(p.Pos())
338 if err != nil {
339 return nil, err
340 }
341 createTable.OnCluster = onCluster
342
343 tableSchema, err := p.parseTableSchemaClause(p.Pos())
344 if err != nil {
345 return nil, err
346 }
347 createTable.TableSchema = tableSchema
348
349 engineExpr, err := p.tryParseEngineExpr(p.Pos())
350 if err != nil {
351 return nil, err
352 }
353 if engineExpr != nil {
354 createTable.Engine = engineExpr
355 createTable.StatementEnd = engineExpr.End()
356 }
357
358 if p.tryConsumeKeywords(KeywordAs) {
359 // After AS, we can have: SELECT/WITH (with or without parens), or table_function(...)
360 // Check if it's a SELECT/WITH query (explicitly check keywords/paren before ident)
361 if p.matchKeyword(KeywordSelect) || p.matchKeyword(KeywordWith) || p.matchTokenKind(TokenKindLParen) {
362 // It's a SELECT or WITH query (with or without parentheses)
363 subQuery, err := p.parseSubQuery(p.Pos())
364 if err != nil {
365 return nil, err
366 }

Callers 1

parseDDLMethod · 0.95

Calls 15

tryConsumeKeywordsMethod · 0.95
expectKeywordMethod · 0.95
tryParseIfNotExistsMethod · 0.95
parseTableIdentifierMethod · 0.95
PosMethod · 0.95
tryParseUUIDMethod · 0.95
tryParseClusterClauseMethod · 0.95
tryParseEngineExprMethod · 0.95
matchKeywordMethod · 0.95
matchTokenKindMethod · 0.95
parseSubQueryMethod · 0.95

Tested by

no test coverage detected