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

Method parseInsertStmt

parser/parser_table.go:1839–1898  ·  view source on GitHub ↗
(pos Pos)

Source from the content-addressed store, hash-verified

1837}
1838
1839func (p *Parser) parseInsertStmt(pos Pos) (*InsertStmt, error) {
1840 if err := p.expectKeyword(KeywordInsert); err != nil {
1841 return nil, err
1842 }
1843 if err := p.expectKeyword(KeywordInto); err != nil {
1844 return nil, err
1845 }
1846
1847 insertExpr := &InsertStmt{InsertPos: pos}
1848 insertExpr.HasTableKeyword = p.tryConsumeKeywords(KeywordTable)
1849
1850 var table Expr
1851 var err error
1852 if p.tryConsumeKeywords(KeywordFunction) {
1853 table, err = p.parseFunctionExpr(p.Pos())
1854 } else {
1855 table, err = p.parseTableIdentifier(p.Pos())
1856 }
1857 if err != nil {
1858 return nil, err
1859 }
1860 insertExpr.Table = table
1861
1862 if p.matchTokenKind(TokenKindLParen) {
1863 // parse column names
1864 insertExpr.ColumnNames, err = p.parseColumnNamesExpr(p.Pos())
1865 if err != nil {
1866 return nil, err
1867 }
1868 }
1869
1870 switch {
1871 case p.matchKeyword(KeywordFormat):
1872 insertExpr.Format, err = p.parseFormat(p.Pos())
1873 case p.matchKeyword(KeywordValues):
1874 // consume VALUES keyword
1875 _ = p.lexer.consumeToken()
1876 values := make([]*AssignmentValues, 0)
1877 for !p.lexer.isEOF() {
1878 value, err := p.parseAssignmentValues(p.Pos())
1879 if err != nil {
1880 return nil, err
1881 }
1882 values = append(values, value)
1883 if p.tryConsumeTokenKind(TokenKindComma) == nil {
1884 break
1885 }
1886 }
1887 insertExpr.Values = values
1888 case p.matchKeyword(KeywordSelect):
1889 insertExpr.SelectExpr, err = p.parseSelectQuery(p.Pos())
1890 default:
1891 // do nothing
1892 }
1893
1894 if err != nil {
1895 return nil, err
1896 }

Callers 1

parseStmtMethod · 0.95

Calls 14

expectKeywordMethod · 0.95
tryConsumeKeywordsMethod · 0.95
parseFunctionExprMethod · 0.95
PosMethod · 0.95
parseTableIdentifierMethod · 0.95
matchTokenKindMethod · 0.95
parseColumnNamesExprMethod · 0.95
matchKeywordMethod · 0.95
parseFormatMethod · 0.95
parseAssignmentValuesMethod · 0.95
tryConsumeTokenKindMethod · 0.95
parseSelectQueryMethod · 0.95

Tested by

no test coverage detected