@@ -784,14 +784,18 @@ func (m *Sqlbridge) parseCreate() (*SqlCreate, error) {
784784
785785 // ENGINE
786786 discardComments (m )
787- if strings .ToLower (m .Cur ().V ) != "engine" {
788- return nil , m .ErrMsg ("Expected (cols) ENGINE ... " )
789- }
790- engine , err := ParseWith (m .SqlTokenPager )
791- if err != nil {
792- return nil , err
787+ switch m .Cur ().T {
788+ case lex .TokenEngine :
789+ // Engine is Optional
790+ engine , err := ParseWith (m .SqlTokenPager )
791+ if err != nil {
792+ return nil , err
793+ }
794+ req .Engine = engine
795+ case lex .TokenWith :
796+ default :
797+ return nil , m .ErrMsg ("Expected (cols) ENGINE | WITH ... " )
793798 }
794- req .Engine = engine
795799 case lex .TokenSource :
796800 // just with
797801 case lex .TokenSchema :
@@ -2049,18 +2053,20 @@ func (m *Sqlbridge) isEnd() bool {
20492053}
20502054
20512055func ParseWith (pg expr.TokenPager ) (u.JsonHelper , error ) {
2052- if pg .Cur ().T != lex .TokenWith {
2056+ if pg .Cur ().T != lex .TokenWith && pg . Cur (). T != lex . TokenEngine {
20532057 // This is an optional statement
20542058 return nil , nil
20552059 }
2056- pg .Next () // consume WITH
2060+ if pg .Cur ().T == lex .TokenWith {
2061+ pg .Next ()
2062+ }
20572063 jh := make (u.JsonHelper )
20582064 switch pg .Cur ().T {
20592065 case lex .TokenLeftBrace : // {
20602066 if err := ParseJsonObject (pg , jh ); err != nil {
20612067 return nil , err
20622068 }
2063- case lex .TokenIdentity :
2069+ case lex .TokenIdentity , lex . TokenEngine :
20642070 // name=value pairs
20652071 if err := ParseKeyValue (pg , jh ); err != nil {
20662072 return nil , err
@@ -2252,11 +2258,14 @@ func ParseJsonArray(pg expr.TokenPager) ([]interface{}, error) {
22522258}
22532259
22542260func ParseKeyValue (pg expr.TokenPager , jh u.JsonHelper ) error {
2255- if pg .Cur ().T != lex .TokenIdentity {
2261+ if pg .Cur ().T != lex .TokenEngine && pg . Cur (). T != lex . TokenIdentity {
22562262 return pg .ErrMsg ("Expected key/identity for key=value, array" )
22572263 }
22582264
22592265 for {
2266+ if pg .Cur ().T == lex .TokenDefault {
2267+ pg .Next () // consume default
2268+ }
22602269 key := pg .Cur ().V
22612270 pg .Next ()
22622271
@@ -2305,7 +2314,7 @@ func ParseKeyValue(pg expr.TokenPager, jh u.JsonHelper) error {
23052314 return pg .ErrMsg ("Expected value" )
23062315 }
23072316 pg .Next () // consume value
2308- if pg .Cur ().T != lex .TokenComma {
2317+ if pg .Cur ().T != lex .TokenComma && pg . Cur (). T != lex . TokenDefault {
23092318 return nil
23102319 }
23112320 pg .Next () // consume comma
0 commit comments