MCPcopy Create free account
hub / github.com/araddon/qlbridge / parseCreateCols

Method parseCreateCols

rel/parse_sql.go:1656–1731  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1654}
1655
1656func (m *Sqlbridge) parseCreateCols() ([]*DdlColumn, error) {
1657
1658 cols := make([]*DdlColumn, 0)
1659 var col *DdlColumn
1660 /*
1661 CREATE TABLE articles (
1662 ID int(11) NOT NULL AUTO_INCREMENT,
1663 Email char(150) NOT NULL DEFAULT '',
1664 PRIMARY KEY (ID),
1665 CONSTRAINT emails_fk FOREIGN KEY (Email) REFERENCES Emails (Email)
1666 )
1667 */
1668 for {
1669
1670 discardComments(m)
1671 switch m.Cur().T {
1672 case lex.TokenIdentity:
1673 col = &DdlColumn{Name: strings.ToLower(m.Next().V), Kw: lex.TokenIdentity}
1674 if err := m.parseDdlColumn(col); err != nil {
1675 return nil, err
1676 }
1677 case lex.TokenConstraint:
1678 col = &DdlColumn{Kw: m.Next().T}
1679 if err := m.parseDdlConstraint(col); err != nil {
1680 return nil, err
1681 }
1682 case lex.TokenPrimary:
1683 col = &DdlColumn{Kw: m.Next().T}
1684 if strings.ToLower(m.Next().V) != "key" {
1685 return nil, m.ErrMsg("expected 'PRIMARY KEY'")
1686 }
1687 if m.Next().T != lex.TokenLeftParenthesis {
1688 return nil, m.ErrMsg("expected 'PRIMARY KEY (field)'")
1689 }
1690
1691 PrimaryKeyLoop:
1692 for {
1693
1694 switch m.Cur().T {
1695 case lex.TokenRightParenthesis:
1696 m.Next() // consume )
1697 break PrimaryKeyLoop
1698 case lex.TokenIdentity:
1699 col = &DdlColumn{Name: strings.ToLower(m.Next().V), Kw: lex.TokenIdentity}
1700 case lex.TokenConstraint:
1701 col = &DdlColumn{Kw: m.Next().T}
1702 case lex.TokenPrimary:
1703 col = &DdlColumn{Kw: m.Next().T}
1704 if strings.ToLower(m.Cur().V) != "key" {
1705 return nil, m.ErrMsg("expected 'PRIMARY KEY'")
1706 }
1707 m.Next()
1708
1709 default:
1710 return nil, m.ErrMsg("expected identity")
1711 }
1712 }
1713

Callers 1

parseCreateMethod · 0.95

Calls 6

parseDdlColumnMethod · 0.95
parseDdlConstraintMethod · 0.95
discardCommentsFunction · 0.85
CurMethod · 0.65
NextMethod · 0.65
ErrMsgMethod · 0.65

Tested by

no test coverage detected