From 0517312623f32f2001680f7a94f896d8463986b6 Mon Sep 17 00:00:00 2001 From: Zhars <95243966+Zhaars@users.noreply.github.com> Date: Mon, 19 Dec 2022 14:19:31 +0000 Subject: [PATCH] Extend Update/Delete queries with returning statement (#610) Extend Update/Delete queries with Returning --- acra-censor/common/matching_logic.go | 2 +- encryptor/queryDataEncryptor.go | 111 +- encryptor/queryDataEncryptor_test.go | 245 +- sqlparser/ast.go | 5 +- sqlparser/ast_methods.go | 26 +- sqlparser/parse_test.go | 31 +- sqlparser/sql.go | 4109 +++++++++++++------------- sqlparser/sql.y | 47 +- tests/test.py | 134 +- 9 files changed, 2592 insertions(+), 2118 deletions(-) diff --git a/acra-censor/common/matching_logic.go b/acra-censor/common/matching_logic.go index 41906eb11..f7e557fee 100644 --- a/acra-censor/common/matching_logic.go +++ b/acra-censor/common/matching_logic.go @@ -296,7 +296,7 @@ func handleDeleteStatement(query, pattern sqlparser.Statement) bool { if !match { return false } - match = areEqualTableNames(queryDeleteNode.Targets, patternDeleteNode.Targets) + match = areEqualTableExprs(queryDeleteNode.Targets, patternDeleteNode.Targets) if !match { return false } diff --git a/encryptor/queryDataEncryptor.go b/encryptor/queryDataEncryptor.go index a77bd0446..4c5b2bc00 100644 --- a/encryptor/queryDataEncryptor.go +++ b/encryptor/queryDataEncryptor.go @@ -95,7 +95,9 @@ func (encryptor *QueryDataEncryptor) encryptInsertQuery(ctx context.Context, ins } if encryptor.encryptor == nil { - return false, encryptor.onReturning(ctx, insert.Returning, tableName.ValueForConfig()) + return false, encryptor.onReturning(ctx, insert.Returning, []sqlparser.TableExpr{&sqlparser.AliasedTableExpr{ + Expr: insert.Table, + }}) } var columnsName []string @@ -319,15 +321,30 @@ func NewAliasToTableMapFromTables(tables []*AliasedTableName) AliasToTableMap { // encryptUpdateQuery encrypt data in Update query and return true if any fields was encrypted, false if wasn't and error if error occurred func (encryptor *QueryDataEncryptor) encryptUpdateQuery(ctx context.Context, update *sqlparser.Update, bindPlaceholders map[int]config.ColumnEncryptionSetting) (bool, error) { - tables := GetTablesWithAliases(update.TableExprs) - if !encryptor.hasTablesToEncrypt(tables) { + if len(update.TableExprs) == 0 { return false, nil } - if len(tables) == 0 { + + fromTables := update.TableExprs + + if len(update.From) != 0 { + fromTables = append(fromTables, update.From...) + } + + tables := GetTablesWithAliases(fromTables) + if !encryptor.hasTablesToEncrypt(tables) { return false, nil } + qualifierMap := NewAliasToTableMapFromTables(tables) firstTable := tables[0].TableName + + // MySQL/MariaDB don`t support returning after update statements + // Postgres doest but expect only one table in tables expression, but also can have more tables in FROM statement + if encryptor.encryptor == nil { + return false, encryptor.onReturning(ctx, update.Returning, fromTables) + } + return encryptor.encryptUpdateExpressions(ctx, update.Exprs, firstTable, qualifierMap, bindPlaceholders) } @@ -398,26 +415,70 @@ func (encryptor *QueryDataEncryptor) onSelect(ctx context.Context, statement *sq return false, nil } -func (encryptor *QueryDataEncryptor) onReturning(ctx context.Context, returning sqlparser.Returning, tableName string) error { +func (encryptor *QueryDataEncryptor) onDelete(ctx context.Context, delete *sqlparser.Delete) (bool, error) { + if len(delete.TableExprs) == 0 { + return false, nil + } + + fromTables := delete.TableExprs + + if len(delete.Targets) != 0 { + fromTables = append(fromTables, delete.Targets...) + } + + tables := GetTablesWithAliases(fromTables) + if !encryptor.hasTablesToEncrypt(tables) { + return false, nil + } + + if encryptor.encryptor == nil { + return false, encryptor.onReturning(ctx, delete.Returning, fromTables) + } + + return false, nil +} + +func (encryptor *QueryDataEncryptor) onReturning(ctx context.Context, returning sqlparser.Returning, fromTables sqlparser.TableExprs) error { if len(returning) == 0 { return nil } - schema := encryptor.schemaStore.GetTableSchema(tableName) querySelectSettings := make([]*QueryDataItem, 0, 8) if _, ok := returning[0].(*sqlparser.StarExpr); ok { - for _, name := range schema.Columns() { - if columnSetting := schema.GetColumnEncryptionSettings(name); columnSetting != nil { - querySelectSettings = append(querySelectSettings, &QueryDataItem{ - setting: columnSetting, - tableName: tableName, - columnName: name, - }) + for _, tableExp := range fromTables { + aliased, ok := tableExp.(*sqlparser.AliasedTableExpr) + if !ok { continue } - querySelectSettings = append(querySelectSettings, nil) + + tableName, ok := aliased.Expr.(sqlparser.TableName) + if !ok { + continue + } + + // if the Returning is star and we have more than one table in the query e.g. + // update table1 set did = tt.did from table2 as tt returning * + // and the table is not in the encryptor config we cant collect corresponding querySettings as we dont actual table representation + tableSchema := encryptor.schemaStore.GetTableSchema(tableName.Name.ValueForConfig()) + if tableSchema == nil { + logrus.WithField("table", tableName.Name.ValueForConfig()).Info("Unable to collect querySettings for table not in encryptor config") + return errors.New("error to collect settings for unknown table") + } + + for _, name := range tableSchema.Columns() { + if columnSetting := tableSchema.GetColumnEncryptionSettings(name); columnSetting != nil { + querySelectSettings = append(querySelectSettings, &QueryDataItem{ + setting: columnSetting, + tableName: tableName.Name.ValueForConfig(), + columnName: name, + }) + continue + } + querySelectSettings = append(querySelectSettings, nil) + } } + clientSession := base.ClientSessionFromContext(ctx) SaveQueryDataItemsToClientSession(clientSession, querySelectSettings) encryptor.querySelectSettings = querySelectSettings @@ -442,12 +503,20 @@ func (encryptor *QueryDataEncryptor) onReturning(ctx context.Context, returning querySelectSettings = append(querySelectSettings, nil) continue } - rawColName := colName.Name.String() - if columnSetting := schema.GetColumnEncryptionSettings(rawColName); columnSetting != nil { + + columnInfo, err := findColumnInfo(fromTables, colName, encryptor.schemaStore) + if err != nil { + querySelectSettings = append(querySelectSettings, nil) + continue + } + + tableSchema := encryptor.schemaStore.GetTableSchema(columnInfo.Table) + + if columnSetting := tableSchema.GetColumnEncryptionSettings(columnInfo.Name); columnSetting != nil { querySelectSettings = append(querySelectSettings, &QueryDataItem{ setting: columnSetting, - tableName: tableName, - columnName: rawColName, + tableName: columnInfo.Table, + columnName: columnInfo.Name, }) continue } @@ -476,9 +545,9 @@ func (encryptor *QueryDataEncryptor) OnQuery(ctx context.Context, query base.OnQ case *sqlparser.Insert: changed, err = encryptor.encryptInsertQuery(ctx, typedStatement, bindPlaceholders) case *sqlparser.Update: - if encryptor.encryptor != nil { - changed, err = encryptor.encryptUpdateQuery(ctx, typedStatement, bindPlaceholders) - } + changed, err = encryptor.encryptUpdateQuery(ctx, typedStatement, bindPlaceholders) + case *sqlparser.Delete: + changed, err = encryptor.onDelete(ctx, typedStatement) } if err != nil { return query, false, err diff --git a/encryptor/queryDataEncryptor_test.go b/encryptor/queryDataEncryptor_test.go index 1b6b14500..af14e9118 100644 --- a/encryptor/queryDataEncryptor_test.go +++ b/encryptor/queryDataEncryptor_test.go @@ -775,17 +775,26 @@ schemas: func TestOnReturning(t *testing.T) { clientIDStr := "specified_client_id" defaultClientID := []byte("default_client_id") - columns := []string{"other_column", "default_client_id", "specified_client_id"} + columns := []string{"other_column", "default_client_id", "specified_client_id", "common_field"} configStr := fmt.Sprintf(` schemas: - table: tablewithcolumnschema - columns: ["other_column", "default_client_id", "specified_client_id"] + columns: ["other_column", "default_client_id", "specified_client_id", "common_field"] encrypted: - column: "default_client_id" - column: specified_client_id client_id: %s -`, clientIDStr) + - column: common_field + + - table: tablewithcolumnschema_2 + columns: ["other_column_2", "default_client_id_2", "specified_client_id_2", "common_field"] + encrypted: + - column: "default_client_id_2" + - column: specified_client_id_2 + client_id: %s + - column: common_field +`, clientIDStr, clientIDStr) schemaStore, err := config.MapTableSchemaStoreFromConfig([]byte(configStr), config.UseMySQL) if err != nil { t.Fatalf("Can't parse config: %s", err.Error()) @@ -806,7 +815,7 @@ schemas: }) ctx = base.SetClientSessionToContext(ctx, clientSession) t.Run("RETURNING *", func(t *testing.T) { - query := `INSERT INTO TableWithColumnSchema ('zone_id', 'specified_client_id', 'other_column', 'default_client_id') VALUES (1, 1, 1, 1) RETURNING *` + query := `INSERT INTO TableWithColumnSchema ('specified_client_id', 'other_column', 'default_client_id') VALUES (1, 1, 1) RETURNING *` _, _, err := encryptor.OnQuery(ctx, base.NewOnQueryObjectFromQuery(query, parser)) if err != nil { @@ -844,7 +853,7 @@ schemas: } returningColumns := strings.Split(returning, ", ") - if len(columns) != len(returningColumns) { + if len(encryptor.querySelectSettings) != len(returningColumns) { t.Fatalf("Incorrect encryptor.querySelectSettings length") } @@ -866,38 +875,222 @@ schemas: }) t.Run("RETURNING columns with sql literals", func(t *testing.T) { + sqlparser.SetDefaultDialect(postgresql.NewPostgreSQLDialect()) + returning := "1, 0 as literal, specified_client_id, other_column, default_client_id, NULL" - query := fmt.Sprintf(`INSERT INTO TableWithColumnSchema -('specified_client_id', 'other_column', 'default_client_id') VALUES (1, 1, 1) RETURNING %s`, returning) + queryTemplates := []string{ + "INSERT INTO TableWithColumnSchema ('specified_client_id', 'other_column', 'default_client_id') VALUES (1, 1, 1) RETURNING %s", + "UPDATE TableWithColumnSchema SET price = price * 1.10 WHERE price <= 99.99 RETURNING %s", + "DELETE FROM TableWithColumnSchema WHERE price <= 99.99 RETURNING %s", + } - _, _, err := encryptor.OnQuery(ctx, base.NewOnQueryObjectFromQuery(query, parser)) - if err != nil { - t.Fatalf("%s", err.Error()) + for _, template := range queryTemplates { + query := fmt.Sprintf(template, returning) + + _, _, err := encryptor.OnQuery(ctx, base.NewOnQueryObjectFromQuery(query, parser)) + if err != nil { + t.Fatalf("%s", err.Error()) + } + + returningColumns := strings.Split(returning, ", ") + if len(encryptor.querySelectSettings) != len(returningColumns) { + t.Fatalf("Incorrect encryptor.querySelectSettings length") + } + + expectedNilColumns := map[int]struct{}{ + 0: {}, + 1: {}, + 3: {}, + 5: {}, + } + + for i := range returningColumns { + if _, ok := expectedNilColumns[i]; ok { + continue + } + + setting := encryptor.querySelectSettings[i] + + if returningColumns[i] != setting.columnName { + t.Fatalf("%v. Incorrect QueryDataItem \nTook: %v\nExpected: %v", i, setting.columnName, columns[i]) + } + } } + }) - returningColumns := strings.Split(returning, ", ") - // 1, 0 as literal, NULL - extraValuesCount := 3 - if (len(columns) + extraValuesCount) != len(returningColumns) { - t.Fatalf("Incorrect encryptor.querySelectSettings length") + t.Run("RETURNING columns with sql literals and several tables from config", func(t *testing.T) { + sqlparser.SetDefaultDialect(postgresql.NewPostgreSQLDialect()) + + returning := "specified_client_id, specified_client_id_2, default_client_id, default_client_id_2" + returningWithAliases := "t1.specified_client_id, t2.specified_client_id_2, t1.default_client_id, t2.default_client_id_2, t1.common_field, t2.common_field" + testCases := []struct { + template string + returning string + expectedTables []string + }{ + { + template: "UPDATE TableWithColumnSchema SET specified_client_id = t2.specified_client_id FROM TableWithColumnSchema_2 as t2 RETURNING %s", + returning: returning, + expectedTables: []string{ + "tablewithcolumnschema", + "tablewithcolumnschema_2", + "tablewithcolumnschema", + "tablewithcolumnschema_2", + }, + }, + { + template: "UPDATE TableWithColumnSchema as t1 SET specified_client_id = t2.specified_client_id FROM TableWithColumnSchema_2 as t2 RETURNING %s", + returning: returningWithAliases, + expectedTables: []string{ + "tablewithcolumnschema", + "tablewithcolumnschema_2", + "tablewithcolumnschema", + "tablewithcolumnschema_2", + "tablewithcolumnschema", + "tablewithcolumnschema_2", + }, + }, + { + template: "DELETE FROM TableWithColumnSchema USING TableWithColumnSchema_2 WHERE specified_client_id_2 = specified_client_id RETURNING %s", + returning: returning, + expectedTables: []string{ + "tablewithcolumnschema", + "tablewithcolumnschema_2", + "tablewithcolumnschema", + "tablewithcolumnschema_2", + }, + }, + { + template: "DELETE FROM TableWithColumnSchema as t1 USING TableWithColumnSchema_2 as t2 WHERE specified_client_id_2 = specified_client_id RETURNING %s", + returning: returningWithAliases, + expectedTables: []string{ + "tablewithcolumnschema", + "tablewithcolumnschema_2", + "tablewithcolumnschema", + "tablewithcolumnschema_2", + "tablewithcolumnschema", + "tablewithcolumnschema_2", + }, + }, } - expectedNilColumns := map[int]struct{}{ - 0: {}, - 1: {}, - 3: {}, - 5: {}, + for _, tcase := range testCases { + query := fmt.Sprintf(tcase.template, tcase.returning) + + _, _, err := encryptor.OnQuery(ctx, base.NewOnQueryObjectFromQuery(query, parser)) + if err != nil { + t.Fatalf("%s", err.Error()) + } + + returningColumns := strings.Split(tcase.returning, ", ") + if len(encryptor.querySelectSettings) != len(returningColumns) { + t.Fatalf("Incorrect encryptor.querySelectSettings length") + } + + for i := range returningColumns { + setting := encryptor.querySelectSettings[i] + if setting == nil { + t.Fatalf("expected setting not to be nil") + } + + if setting.tableName != tcase.expectedTables[i] { + t.Fatalf("Unexpected setting.tableName, expected %s but got %s", tcase.expectedTables[i], setting.tableName) + } + } } + }) - for i := range returningColumns { - if _, ok := expectedNilColumns[i]; ok { - continue + t.Run("RETURNING columns with sql literals and several tables", func(t *testing.T) { + sqlparser.SetDefaultDialect(postgresql.NewPostgreSQLDialect()) + + returning := "specified_client_id_2, specified_unknown_column, default_client_id_2, default_unknown_column" + queryTemplates := []string{ + "UPDATE UnknownTable SET specified_client_id = t2.specified_client_id FROM TableWithColumnSchema_2 as t2 RETURNING %s", + "UPDATE TableWithColumnSchema_2 as t2 SET specified_client_id = t2.specified_client_id FROM UnknownTable RETURNING %s", + "DELETE FROM UnknownTable USING TableWithColumnSchema_2 as t2 WHERE t2.specified_client_id = default_unknown_column RETURNING %s", + "DELETE FROM TableWithColumnSchema_2 USING UnknownTable WHERE specified_client_id = default_unknown_column RETURNING %s", + } + + for _, template := range queryTemplates { + query := fmt.Sprintf(template, returning) + + _, _, err := encryptor.OnQuery(ctx, base.NewOnQueryObjectFromQuery(query, parser)) + if err != nil { + t.Fatalf("%s", err.Error()) } - setting := encryptor.querySelectSettings[i] + returningColumns := strings.Split(returning, ", ") + if len(encryptor.querySelectSettings) != len(returningColumns) { + t.Fatalf("Incorrect encryptor.querySelectSettings length") + } - if returningColumns[i] != setting.columnName { - t.Fatalf("%v. Incorrect QueryDataItem \nTook: %v\nExpected: %v", i, setting.columnName, columns[i]) + tableFromConfig := "tablewithcolumnschema_2" + expectedTables := map[int]*string{ + 0: &tableFromConfig, + 1: nil, + 2: &tableFromConfig, + 3: nil, + } + + for i := range returningColumns { + setting := encryptor.querySelectSettings[i] + + if expectedTables[i] == nil && setting != nil { + t.Fatalf("Expected setting to be nil, but got %s", setting) + } + + if expectedTables[i] != nil && setting == nil { + t.Fatalf("Expected setting not to be nil, but got nil") + } + + if table := expectedTables[i]; table != nil { + if *table != setting.tableName { + t.Fatalf("Unexpected setting table name, want %s but got %s", *table, setting.tableName) + } + } + } + } + }) + + t.Run("RETURNING with star and several tables", func(t *testing.T) { + sqlparser.SetDefaultDialect(postgresql.NewPostgreSQLDialect()) + + returning := "*" + queryTemplates := []string{ + "UPDATE TableWithColumnSchema SET specified_client_id = t2.specified_client_id FROM TableWithColumnSchema_2 as t2 RETURNING %s", + "DELETE FROM TableWithColumnSchema USING TableWithColumnSchema_2 as t2 WHERE did = t2.did RETURNING %s", + } + + tableSchema := schemaStore.GetTableSchema("tablewithcolumnschema") + table2Schema := schemaStore.GetTableSchema("tablewithcolumnschema_2") + + expectSettingNumber := len(tableSchema.Columns()) + len(table2Schema.Columns()) + + for _, template := range queryTemplates { + query := fmt.Sprintf(template, returning) + + _, _, err := encryptor.OnQuery(ctx, base.NewOnQueryObjectFromQuery(query, parser)) + if err != nil { + t.Fatalf("%s", err.Error()) + } + + expectedNilColumns := map[int]struct{}{ + 0: {}, + 4: {}, + } + + if expectSettingNumber != len(encryptor.querySelectSettings) { + t.Fatalf("Incorrect number of encryptor.querySelectSettings") + } + + for i := 0; i < expectSettingNumber; i++ { + if _, ok := expectedNilColumns[i]; ok { + setting := encryptor.querySelectSettings[i] + + if setting != nil { + t.Fatalf("Expected nil setting, but got not %s", setting.columnName) + } + } } } }) diff --git a/sqlparser/ast.go b/sqlparser/ast.go index 1f343f4bc..5ef69fe47 100644 --- a/sqlparser/ast.go +++ b/sqlparser/ast.go @@ -352,21 +352,24 @@ type Update struct { Comments Comments TableExprs TableExprs Exprs UpdateExprs + From TableExprs Where *Where OrderBy OrderBy Limit *Limit + Returning Returning } // Delete represents a DELETE statement. // If you add fields here, consider adding them to calls to validateSubquerySamePlan. type Delete struct { Comments Comments - Targets TableNames + Targets TableExprs TableExprs TableExprs Partitions Partitions Where *Where OrderBy OrderBy Limit *Limit + Returning Returning } // Set represents a SET statement. diff --git a/sqlparser/ast_methods.go b/sqlparser/ast_methods.go index 15b75fb5a..2795b7673 100644 --- a/sqlparser/ast_methods.go +++ b/sqlparser/ast_methods.go @@ -309,9 +309,14 @@ func (node *Insert) walkSubtree(visit Visit) error { // Format formats the node. func (node *Update) Format(buf *TrackedBuffer) { - buf.Myprintf("update %v%v set %v%v%v%v", - node.Comments, node.TableExprs, - node.Exprs, node.Where, node.OrderBy, node.Limit) + buf.Myprintf("update %v%v set %v", node.Comments, node.TableExprs, + node.Exprs) + + if len(node.From) != 0 { + buf.Myprintf(" from %v", node.From) + } + + buf.Myprintf("%v%v%v%v", node.Where, node.OrderBy, node.Limit, node.Returning) } func (node *Update) walkSubtree(visit Visit) error { @@ -332,10 +337,17 @@ func (node *Update) walkSubtree(visit Visit) error { // Format formats the node. func (node *Delete) Format(buf *TrackedBuffer) { buf.Myprintf("delete %v", node.Comments) - if node.Targets != nil { - buf.Myprintf("%v ", node.Targets) + if node.Targets == nil { + buf.Myprintf("from %v%v%v%v%v%v", node.TableExprs, node.Partitions, node.Where, node.OrderBy, node.Limit, node.Returning) + return } - buf.Myprintf("from %v%v%v%v%v", node.TableExprs, node.Partitions, node.Where, node.OrderBy, node.Limit) + buf.Myprintf("from %v", node.Targets) + + if node.TableExprs != nil { + buf.Myprintf(" using %v", node.TableExprs) + } + + buf.Myprintf("%v%v%v%v%v", node.Partitions, node.Where, node.OrderBy, node.Limit, node.Returning) } func (node *Delete) walkSubtree(visit Visit) error { @@ -345,7 +357,7 @@ func (node *Delete) walkSubtree(visit Visit) error { return Walk( visit, node.Comments, - node.Targets, + node.TableExprs, node.TableExprs, node.Where, node.OrderBy, diff --git a/sqlparser/parse_test.go b/sqlparser/parse_test.go index 128e85e86..4b0e3351a 100644 --- a/sqlparser/parse_test.go +++ b/sqlparser/parse_test.go @@ -701,12 +701,18 @@ var ( }, { input: "delete /* limit */ from a limit b", }, { - input: "delete a from a join b on a.id = b.id where b.name = 'test'", + input: "delete a from a join b on a.id = b.id where b.name = 'test'", + output: "delete from a using a join b on a.id = b.id where b.name = 'test'", }, { - input: "delete a, b from a, b where a.id = b.id and b.name = 'test'", + input: "delete a, b from a, b where a.id = b.id and b.name = 'test'", + output: "delete from a, b using a, b where a.id = b.id and b.name = 'test'", }, { input: "delete from a1, a2 using t1 as a1 inner join t2 as a2 where a1.id=a2.id", - output: "delete a1, a2 from t1 as a1 join t2 as a2 where a1.id = a2.id", + output: "delete from a1, a2 using t1 as a1 join t2 as a2 where a1.id = a2.id", + }, { + input: "delete from test_table as t1 using test_table2 where t2.field = true", + }, { + input: "delete from test_table as t1 where t2.field = true", }, { input: "set /* simple */ a = 3", }, { @@ -1377,6 +1383,17 @@ var ( input: "SELECT * FROM dual WHERE val NOT ILIKE 'test%'", output: "select * from dual where val not ilike 'test%'", dialect: postgresql.NewPostgreSQLDialect(), + }, { + input: "delete from dual where price <= 99.99 returning 1, 0 as literal, zone_id, specified_client_id, other_column, default_client_id, null", + dialect: postgresql.NewPostgreSQLDialect(), + }, { + input: "delete from dual where price <= 99.99 returning 1, 0 as literal, zone_id, specified_client_id, other_column, default_client_id, null", + }, { + input: "update dual set price = price * 1.10 where price <= 99.99 returning 1, 0 as literal, zone_id, specified_client_id, other_column, default_client_id, null", + dialect: postgresql.NewPostgreSQLDialect(), + }, { + input: "update test_table set price = price * 1.10 from table2 as t2 where price <= 99.99 returning 1, 0 as literal, t2.zone_id, specified_client_id, other_column, default_client_id, null", + dialect: postgresql.NewPostgreSQLDialect(), }, } ) @@ -2252,6 +2269,14 @@ var ( input: "SELECT * FROM dual WHERE val NOT ILIKE 'test%'", output: "MySQL dialect doesn't support `ILIKE` statement at position 47", dialect: mysql.NewMySQLDialect(), + }, { + input: "UPDATE dual SET price = price * 1.1 RETURNING 1, 0 as literal", + output: "MySQL/MariaDB dialect doesn't support returning with update statement at position 62", + dialect: mysql.NewMySQLDialect(), + }, { + input: "UPDATE table1 SET price = price * 1.1 FROM table2 as t2", + output: "MySQL dialect doesn't support FROM TableExpr with update statement at position 56", + dialect: mysql.NewMySQLDialect(), }, } ) diff --git a/sqlparser/sql.go b/sqlparser/sql.go index 27a2890f2..11e58fa28 100644 --- a/sqlparser/sql.go +++ b/sqlparser/sql.go @@ -685,100 +685,100 @@ var yyExca = [...]int16{ 5, 30, -2, 4, -1, 39, - 178, 281, - 179, 281, - -2, 269, + 178, 282, + 179, 282, + -2, 270, -1, 253, - 74, 550, - 100, 550, - 102, 550, - 108, 550, - 109, 550, - 110, 550, - 111, 550, - 112, 550, - 113, 550, - 114, 550, - 116, 550, - 117, 550, - 118, 550, - 119, 550, - 120, 550, - 121, 550, - 122, 550, - 123, 550, - 124, 550, - 125, 550, - 126, 550, - 127, 550, - 128, 550, - 129, 550, - 130, 550, - 131, 550, - 134, 550, - -2, 397, + 74, 552, + 100, 552, + 102, 552, + 108, 552, + 109, 552, + 110, 552, + 111, 552, + 112, 552, + 113, 552, + 114, 552, + 116, 552, + 117, 552, + 118, 552, + 119, 552, + 120, 552, + 121, 552, + 122, 552, + 123, 552, + 124, 552, + 125, 552, + 126, 552, + 127, 552, + 128, 552, + 129, 552, + 130, 552, + 131, 552, + 134, 552, + -2, 399, -1, 254, - 56, 535, - 74, 539, - 137, 647, - 138, 535, - 139, 535, - -2, 529, - -1, 255, + 56, 537, + 74, 541, 137, 649, - -2, 538, + 138, 537, + 139, 537, + -2, 531, + -1, 255, + 137, 651, + -2, 540, -1, 256, - 137, 650, - -2, 536, + 137, 652, + -2, 538, -1, 257, - 137, 651, - -2, 537, + 137, 653, + -2, 539, -1, 333, - 108, 803, - -2, 65, - -1, 334, - 108, 831, + 108, 805, -2, 66, - -1, 335, - 108, 791, + -1, 334, + 108, 833, -2, 67, + -1, 335, + 108, 793, + -2, 68, -1, 339, - 108, 775, - 150, 775, - -2, 611, - -1, 341, - 108, 813, - 150, 813, + 108, 777, + 150, 777, -2, 613, + -1, 341, + 108, 815, + 150, 815, + -2, 615, -1, 567, - 74, 538, - 137, 649, - -2, 465, + 74, 540, + 137, 651, + -2, 467, -1, 618, - 55, 45, - 57, 45, - -2, 47, + 55, 46, + 57, 46, + -2, 48, -1, 776, - 137, 653, - -2, 646, + 137, 655, + -2, 648, -1, 777, - 137, 647, - -2, 535, + 137, 649, + -2, 537, -1, 1014, 5, 31, - -2, 431, + -2, 433, -1, 1042, 5, 30, - -2, 582, - -1, 1281, + -2, 584, + -1, 1286, 5, 31, - -2, 583, - -1, 1327, - 5, 30, -2, 585, - -1, 1390, + -1, 1334, + 5, 30, + -2, 587, + -1, 1401, 5, 31, - -2, 586, + -2, 588, } const yyPrivate = 57344 @@ -786,296 +786,296 @@ const yyPrivate = 57344 const yyLast = 12066 var yyAct = [...]int16{ - 280, 53, 1381, 951, 697, 513, 263, 563, 1185, 865, - 1213, 883, 1186, 562, 3, 907, 931, 233, 1287, 1105, - 613, 903, 1338, 909, 1182, 945, 906, 1062, 59, 866, - 224, 1008, 1158, 820, 279, 819, 1108, 1096, 611, 24, - 645, 1046, 732, 804, 630, 338, 917, 853, 779, 1051, - 490, 497, 436, 817, 53, 629, 331, 941, 503, 861, - 511, 600, 238, 317, 327, 615, 276, 232, 321, 987, - 242, 326, 580, 58, 1276, 1410, 1400, 225, 226, 227, - 228, 324, 1408, 1388, 1406, 316, 952, 1399, 1387, 239, - 1177, 54, 29, 30, 1273, 440, 1347, 1208, 1209, 246, - 1207, 237, 188, 184, 185, 186, 315, 897, 461, 1363, - 528, 527, 537, 538, 530, 531, 532, 533, 534, 535, - 536, 529, 727, 968, 539, 478, 640, 739, 641, 1220, - 1221, 898, 899, 1070, 729, 1224, 1069, 967, 1222, 1071, - 631, 730, 632, 737, 63, 480, 640, 739, 641, 1087, - 924, 1159, 1299, 932, 1261, 1259, 449, 229, 628, 223, - 1314, 475, 476, 473, 474, 1407, 1405, 1382, 972, 862, - 1129, 925, 65, 66, 67, 68, 69, 863, 1339, 966, - 1161, 884, 886, 450, 443, 181, 182, 182, 1345, 705, - 1126, 633, 257, 696, 1341, 463, 1128, 465, 1061, 919, - 1060, 1059, 438, 919, 467, 467, 467, 467, 446, 199, - 467, 919, 183, 1368, 187, 1163, 1284, 1167, 467, 1162, - 1160, 1169, 462, 464, 1140, 1165, 83, 551, 552, 1025, - 196, 486, 1001, 196, 1164, 437, 750, 746, 518, 53, - 456, 904, 1228, 1081, 196, 539, 510, 1166, 1168, 963, - 960, 961, 500, 959, 548, 529, 787, 978, 539, 550, - 196, 196, 83, 1373, 1238, 499, 196, 1364, 83, 1049, - 784, 785, 786, 783, 634, 509, 508, 466, 970, 973, - 885, 565, 566, 1340, 569, 570, 571, 572, 573, 574, - 575, 576, 510, 579, 581, 581, 581, 581, 581, 581, - 581, 581, 589, 590, 591, 592, 460, 932, 1116, 748, - 863, 262, 1386, 1346, 1344, 965, 1127, 1229, 1125, 918, - 1223, 1179, 612, 918, 854, 700, 508, 1022, 916, 914, - 1085, 918, 915, 854, 1021, 1032, 1020, 964, 753, 754, - 1114, 1133, 510, 452, 453, 454, 561, 442, 747, 55, - 532, 533, 534, 535, 536, 529, 488, 812, 539, 1376, - 921, 637, 768, 770, 771, 979, 505, 582, 583, 584, - 585, 586, 587, 588, 196, 969, 196, 509, 508, 320, - 180, 1392, 196, 56, 501, 922, 1315, 769, 971, 509, - 508, 1305, 196, 627, 510, 1371, 83, 83, 83, 83, - 626, 782, 83, 509, 508, 619, 510, 509, 508, 1304, - 83, 1100, 509, 508, 1181, 1099, 1088, 1116, 1216, 1215, - 510, 1082, 196, 954, 510, 444, 445, 807, 1115, 510, - 998, 999, 1000, 1120, 1117, 1110, 1111, 1118, 1113, 1112, - 467, 83, 640, 739, 641, 1132, 711, 314, 467, 1114, - 1119, 710, 701, 699, 694, 458, 1122, 451, 437, 467, - 467, 467, 467, 467, 467, 467, 467, 805, 231, 489, - 640, 739, 641, 1351, 467, 467, 467, 467, 1396, 489, - 1331, 1379, 470, 471, 472, 1072, 1350, 477, 640, 739, - 641, 1331, 489, 1331, 1332, 482, 1296, 1295, 1204, 489, - 1283, 489, 714, 1235, 1234, 1231, 1232, 196, 738, 738, - 1231, 1230, 1017, 489, 196, 196, 196, 755, 980, 489, - 1225, 83, 597, 489, 733, 733, 712, 742, 740, 1147, - 83, 814, 489, 644, 643, 1183, 1027, 1115, 1047, 622, - 281, 26, 1120, 1117, 1110, 1111, 1118, 1113, 1112, 1048, - 1024, 53, 1048, 60, 26, 890, 780, 621, 1047, 1119, - 596, 814, 1279, 806, 776, 1109, 565, 26, 1017, 597, - 549, 1326, 757, 772, 80, 1017, 1237, 1233, 1040, 816, - 846, 849, 1026, 623, 1041, 621, 855, 597, 774, 1074, - 896, 56, 763, 982, 597, 1017, 1023, 1047, 321, 321, - 321, 321, 321, 867, 56, 842, 843, 625, 624, 751, - 332, 850, 56, 612, 239, 887, 441, 56, 808, 811, - 1309, 321, 926, 946, 1198, 857, 816, 859, 860, 1077, - 1052, 1053, 83, 320, 942, 851, 937, 936, 196, 196, - 83, 71, 196, 698, 858, 196, 949, 487, 1218, 196, - 1183, 83, 83, 83, 83, 83, 83, 83, 83, 891, - 1101, 484, 869, 870, 56, 872, 83, 83, 83, 83, - 880, 1055, 485, 708, 196, 933, 934, 935, 889, 481, - 196, 893, 888, 868, 895, 877, 871, 875, 1058, 554, - 878, 879, 876, 606, 607, 83, 1057, 911, 983, 196, - 467, 874, 467, 873, 1404, 83, 56, 243, 244, 1398, - 467, 1139, 1403, 504, 1143, 1144, 990, 695, 1044, 947, - 996, 312, 305, 809, 810, 704, 307, 308, 309, 310, - 502, 995, 306, 313, 989, 311, 715, 716, 717, 718, - 719, 720, 721, 722, 469, 469, 469, 469, 943, 944, - 469, 723, 724, 725, 726, 1141, 1142, 1092, 469, 528, - 527, 537, 538, 530, 531, 532, 533, 534, 535, 536, - 529, 642, 459, 539, 491, 1084, 1002, 1378, 530, 531, - 532, 533, 534, 535, 536, 529, 492, 196, 539, 517, - 196, 196, 196, 196, 196, 1377, 776, 1324, 997, 1078, - 1277, 1310, 196, 988, 1009, 196, 991, 468, 956, 196, - 707, 1137, 610, 196, 196, 240, 241, 83, 780, 504, - 252, 1010, 994, 749, 234, 927, 928, 929, 930, 1356, - 993, 235, 1003, 781, 60, 1355, 83, 1312, 1048, 506, - 1365, 938, 939, 940, 537, 538, 530, 531, 532, 533, - 534, 535, 536, 529, 1016, 1300, 539, 756, 745, 62, - 735, 7, 1043, 64, 1045, 736, 6, 734, 5, 332, - 620, 57, 1, 271, 270, 1042, 821, 336, 636, 602, - 605, 606, 607, 603, 743, 604, 608, 1029, 1275, 196, - 560, 321, 83, 953, 83, 1104, 962, 1380, 196, 1337, - 1031, 196, 83, 1212, 913, 905, 435, 70, 1372, 320, - 320, 320, 320, 320, 912, 1343, 1298, 920, 1086, 813, - 815, 1056, 1075, 1270, 320, 923, 1217, 1375, 1073, 1065, - 1083, 1064, 320, 1066, 650, 649, 647, 648, 856, 646, - 652, 1067, 651, 741, 1089, 1090, 208, 328, 207, 329, - 609, 467, 635, 1091, 948, 1093, 1094, 1095, 507, 72, - 1097, 1097, 1079, 1080, 1124, 1123, 958, 1131, 882, 728, - 977, 479, 211, 547, 992, 1098, 467, 955, 1068, 957, - 469, 337, 1190, 752, 496, 1354, 1311, 976, 469, 1107, - 1030, 577, 852, 261, 767, 275, 272, 1121, 274, 469, - 469, 469, 469, 469, 469, 469, 469, 273, 259, 758, - 1039, 520, 260, 250, 469, 469, 469, 469, 319, 593, - 1267, 1136, 601, 599, 528, 527, 537, 538, 530, 531, - 532, 533, 534, 535, 536, 529, 1151, 1152, 539, 598, - 1054, 1050, 1188, 759, 53, 806, 318, 867, 1146, 1191, - 1184, 1157, 1272, 517, 867, 1171, 1150, 1189, 1178, 469, - 1200, 1201, 1202, 1362, 762, 1170, 28, 61, 245, 23, - 22, 776, 21, 1192, 19, 1193, 1187, 1194, 18, 17, - 83, 20, 16, 196, 15, 553, 555, 556, 557, 558, - 559, 14, 1211, 1205, 32, 781, 13, 12, 981, 83, - 11, 1210, 10, 568, 9, 8, 4, 1206, 1219, 236, - 25, 1226, 1227, 2, 847, 847, 0, 0, 0, 0, - 847, 528, 527, 537, 538, 530, 531, 532, 533, 534, - 535, 536, 529, 0, 0, 539, 336, 847, 0, 1239, - 0, 0, 83, 83, 0, 83, 0, 0, 321, 0, - 0, 0, 1241, 0, 0, 1244, 1246, 0, 0, 0, - 0, 738, 0, 0, 1012, 469, 0, 0, 83, 0, - 1262, 196, 196, 1014, 1015, 196, 0, 733, 1271, 0, - 1248, 0, 0, 0, 469, 196, 1250, 0, 1249, 1257, - 0, 0, 0, 0, 83, 0, 0, 0, 0, 1018, - 1019, 0, 320, 0, 0, 0, 0, 1028, 0, 1278, - 0, 1286, 1034, 0, 1035, 1036, 1037, 1038, 0, 1289, - 1290, 1291, 0, 1294, 1292, 0, 1075, 0, 1103, 0, - 0, 0, 0, 0, 0, 0, 83, 467, 83, 0, - 469, 0, 469, 0, 0, 248, 0, 1301, 0, 1303, - 469, 0, 0, 1130, 1308, 1302, 0, 1307, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 83, 0, 83, - 83, 0, 1313, 0, 0, 602, 605, 606, 607, 603, - 1188, 604, 608, 1328, 0, 1052, 1053, 0, 0, 1329, - 1330, 469, 1325, 0, 196, 0, 1327, 1322, 0, 0, - 0, 0, 83, 0, 1336, 0, 0, 1342, 0, 0, - 0, 1353, 1323, 0, 1187, 83, 196, 0, 0, 0, - 0, 0, 83, 1348, 0, 1349, 775, 1188, 1352, 53, - 0, 1254, 1255, 83, 1256, 1366, 0, 1258, 0, 1260, - 196, 778, 1367, 0, 788, 789, 790, 791, 792, 793, - 794, 795, 796, 797, 798, 799, 800, 801, 802, 803, - 1370, 1187, 0, 0, 1384, 1374, 0, 0, 0, 495, - 0, 0, 867, 1156, 1391, 1389, 0, 0, 0, 0, - 0, 0, 0, 0, 1394, 0, 1297, 0, 0, 322, - 0, 83, 0, 83, 83, 83, 196, 83, 1401, 1402, - 1393, 1269, 489, 83, 0, 0, 0, 191, 1409, 0, - 222, 0, 0, 0, 0, 0, 0, 0, 0, 1203, - 0, 230, 0, 0, 0, 0, 0, 190, 1063, 83, - 83, 83, 336, 0, 0, 249, 0, 191, 191, 0, - 0, 0, 0, 191, 0, 0, 894, 469, 0, 0, - 0, 908, 0, 0, 900, 0, 0, 0, 325, 320, - 0, 0, 0, 439, 528, 527, 537, 538, 530, 531, - 532, 533, 534, 535, 536, 529, 83, 83, 539, 0, - 493, 498, 0, 0, 0, 0, 0, 0, 0, 83, - 1102, 469, 0, 469, 205, 0, 0, 519, 0, 0, - 0, 0, 83, 0, 0, 0, 0, 1251, 0, 0, - 0, 0, 0, 0, 1306, 1253, 469, 0, 0, 0, - 0, 0, 217, 0, 83, 0, 564, 1263, 1264, 1265, - 0, 0, 1268, 0, 0, 0, 0, 578, 0, 0, - 0, 0, 469, 0, 0, 1280, 1281, 1282, 0, 1285, - 0, 191, 0, 191, 0, 0, 0, 0, 775, 191, - 0, 83, 0, 0, 0, 0, 469, 0, 0, 191, - 0, 447, 0, 448, 0, 83, 0, 0, 0, 455, - 0, 847, 0, 0, 517, 0, 1063, 0, 847, 457, - 0, 0, 0, 0, 0, 0, 0, 200, 0, 483, - 0, 0, 202, 0, 0, 1004, 1005, 1006, 1007, 209, - 204, 0, 0, 0, 0, 469, 0, 469, 1214, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 1321, - 1153, 0, 0, 0, 0, 0, 206, 0, 0, 212, - 0, 0, 0, 0, 210, 0, 1333, 1334, 1335, 0, - 1240, 528, 527, 537, 538, 530, 531, 532, 533, 534, - 535, 536, 529, 1242, 0, 539, 0, 0, 0, 201, - 1245, 0, 1357, 1358, 1359, 1360, 1361, 0, 0, 0, - 0, 469, 0, 0, 191, 0, 0, 0, 0, 0, - 0, 191, 617, 191, 0, 0, 203, 0, 213, 214, - 215, 216, 221, 0, 595, 0, 0, 219, 218, 220, - 0, 0, 0, 618, 908, 0, 0, 0, 0, 1385, - 0, 0, 0, 0, 1390, 527, 537, 538, 530, 531, - 532, 533, 534, 535, 536, 529, 0, 1395, 539, 1288, - 0, 1288, 1288, 1288, 0, 1293, 0, 0, 0, 0, - 0, 469, 0, 0, 765, 766, 0, 0, 0, 0, - 1106, 0, 0, 0, 0, 0, 0, 0, 1413, 1414, - 0, 0, 522, 0, 526, 0, 0, 469, 469, 469, - 540, 541, 542, 543, 544, 545, 546, 0, 523, 524, - 525, 521, 528, 527, 537, 538, 530, 531, 532, 533, - 534, 535, 536, 529, 0, 0, 539, 0, 0, 1149, - 0, 564, 0, 0, 0, 191, 191, 844, 845, 191, - 0, 0, 191, 0, 517, 517, 713, 0, 0, 0, - 1154, 0, 1155, 1174, 0, 702, 703, 1214, 0, 706, - 0, 0, 709, 0, 1172, 1173, 0, 1175, 1176, 0, - 1288, 191, 0, 0, 0, 0, 0, 744, 0, 0, - 0, 1266, 489, 0, 0, 0, 0, 0, 0, 0, - 0, 731, 1369, 0, 0, 0, 191, 0, 0, 0, - 902, 0, 908, 0, 908, 0, 0, 0, 713, 0, - 0, 0, 0, 0, 0, 0, 764, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 847, 0, 0, 517, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1397, 528, 527, 537, 538, 530, 531, - 532, 533, 534, 535, 536, 529, 249, 0, 539, 249, - 249, 0, 0, 848, 848, 249, 0, 0, 1149, 848, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 249, - 249, 249, 249, 0, 191, 489, 848, 191, 191, 191, - 191, 191, 0, 0, 1252, 0, 0, 0, 0, 881, - 0, 0, 191, 0, 864, 0, 617, 0, 0, 0, - 191, 191, 0, 984, 985, 986, 0, 498, 0, 0, - 0, 26, 27, 54, 29, 30, 0, 0, 0, 0, - 0, 892, 0, 0, 0, 0, 0, 0, 908, 0, - 45, 0, 0, 0, 0, 31, 0, 528, 527, 537, + 280, 53, 1392, 951, 865, 513, 563, 697, 1348, 1187, + 263, 562, 3, 883, 931, 233, 1219, 1293, 279, 1188, + 903, 1184, 613, 906, 907, 1211, 866, 1064, 1107, 1160, + 1047, 224, 804, 645, 611, 59, 24, 732, 820, 1110, + 338, 1008, 630, 1053, 917, 779, 853, 945, 1098, 436, + 490, 497, 941, 331, 53, 817, 503, 629, 319, 600, + 861, 511, 238, 242, 58, 232, 276, 987, 321, 1212, + 615, 248, 327, 326, 1421, 324, 1411, 925, 225, 226, + 227, 228, 1419, 262, 1399, 1417, 952, 1410, 1398, 1179, + 317, 239, 1279, 54, 29, 30, 440, 1072, 237, 1357, + 1071, 897, 315, 1073, 246, 1214, 1215, 316, 188, 184, + 185, 186, 580, 1213, 640, 739, 641, 1226, 1227, 968, + 898, 899, 461, 1230, 727, 478, 1228, 325, 631, 729, + 632, 909, 480, 967, 1089, 924, 730, 63, 1307, 932, + 1267, 1265, 449, 229, 1418, 737, 819, 628, 640, 739, + 641, 320, 223, 475, 476, 473, 474, 1416, 1393, 1131, + 863, 450, 1322, 443, 972, 65, 66, 67, 68, 69, + 182, 705, 862, 1349, 633, 966, 528, 527, 537, 538, + 530, 531, 532, 533, 534, 535, 536, 529, 257, 1351, + 539, 1355, 696, 884, 886, 181, 1063, 182, 919, 919, + 1062, 1061, 438, 904, 467, 467, 467, 467, 1128, 463, + 467, 465, 446, 199, 1130, 183, 551, 552, 467, 1118, + 187, 1009, 83, 1378, 1289, 1142, 196, 1025, 1001, 196, + 1083, 486, 750, 919, 518, 456, 462, 464, 529, 53, + 196, 539, 539, 746, 508, 963, 960, 961, 978, 959, + 500, 1116, 1234, 787, 548, 510, 196, 196, 83, 550, + 510, 1022, 196, 1384, 83, 437, 1244, 784, 785, 786, + 783, 1181, 499, 1051, 970, 973, 1135, 634, 1350, 854, + 700, 565, 566, 1087, 569, 570, 571, 572, 573, 574, + 575, 576, 885, 579, 581, 581, 581, 581, 581, 581, + 581, 581, 589, 590, 591, 592, 493, 498, 1229, 932, + 921, 965, 1397, 863, 56, 561, 1356, 1354, 918, 918, + 460, 812, 612, 519, 854, 1387, 1032, 1235, 1403, 452, + 453, 454, 782, 964, 1129, 922, 1127, 509, 508, 1117, + 505, 205, 549, 1323, 1122, 1119, 1112, 1113, 1120, 1115, + 1114, 55, 564, 918, 510, 1313, 979, 1312, 916, 914, + 442, 1121, 915, 578, 509, 508, 1102, 1124, 1101, 217, + 196, 969, 196, 1021, 180, 1020, 1382, 501, 196, 1090, + 1134, 510, 618, 1222, 971, 998, 999, 1000, 196, 768, + 770, 771, 83, 83, 83, 83, 753, 754, 83, 619, + 1221, 627, 626, 1084, 748, 320, 83, 582, 583, 584, + 585, 586, 587, 588, 769, 954, 509, 508, 196, 807, + 1373, 528, 527, 537, 538, 530, 531, 532, 533, 534, + 535, 536, 529, 510, 1048, 539, 711, 83, 444, 445, + 467, 314, 805, 747, 200, 640, 739, 641, 467, 202, + 532, 533, 534, 535, 536, 529, 209, 204, 539, 467, + 467, 467, 467, 467, 467, 467, 467, 1161, 710, 637, + 509, 508, 509, 508, 467, 467, 467, 467, 701, 1183, + 640, 739, 641, 206, 509, 508, 212, 510, 699, 510, + 1074, 210, 694, 640, 739, 641, 1163, 714, 458, 451, + 437, 510, 231, 196, 1407, 489, 489, 488, 1340, 1390, + 196, 196, 196, 1340, 489, 755, 201, 83, 1361, 281, + 742, 733, 733, 740, 712, 1360, 83, 1340, 1341, 1304, + 1303, 1165, 1231, 1169, 814, 1164, 1162, 1171, 1208, 489, + 780, 1167, 890, 203, 621, 213, 214, 215, 216, 221, + 1166, 53, 1284, 80, 219, 218, 220, 1288, 489, 776, + 1241, 1240, 622, 1168, 1170, 757, 565, 1237, 1238, 1237, + 1236, 1017, 489, 26, 772, 980, 489, 816, 1374, 26, + 765, 766, 597, 489, 846, 849, 774, 814, 489, 332, + 855, 644, 643, 1049, 1050, 441, 1149, 1040, 321, 321, + 321, 321, 321, 1041, 596, 781, 623, 867, 621, 1333, + 26, 1185, 1027, 612, 1048, 887, 738, 738, 808, 811, + 1024, 321, 1017, 56, 816, 1118, 597, 1050, 83, 56, + 1224, 597, 1243, 851, 196, 196, 83, 564, 196, 1048, + 1239, 196, 1017, 844, 845, 196, 858, 83, 83, 83, + 83, 83, 83, 83, 83, 891, 60, 1116, 1026, 1076, + 56, 239, 83, 83, 83, 83, 1023, 252, 880, 896, + 196, 806, 597, 933, 934, 935, 196, 982, 893, 889, + 892, 320, 320, 320, 320, 320, 895, 888, 625, 869, + 870, 83, 872, 624, 911, 196, 320, 751, 1017, 56, + 467, 83, 467, 1317, 320, 868, 902, 926, 871, 946, + 467, 56, 1202, 1079, 1054, 1055, 842, 843, 942, 937, + 936, 71, 850, 469, 469, 469, 469, 698, 949, 469, + 487, 927, 928, 929, 930, 484, 857, 469, 859, 860, + 1185, 947, 1103, 943, 944, 1117, 485, 938, 939, 940, + 1122, 1119, 1112, 1113, 1120, 1115, 1114, 537, 538, 530, + 531, 532, 533, 534, 535, 536, 529, 1121, 517, 539, + 1275, 489, 1057, 1111, 708, 481, 1002, 877, 1060, 875, + 56, 763, 878, 196, 876, 1059, 196, 196, 196, 196, + 196, 776, 874, 602, 605, 606, 607, 603, 196, 604, + 608, 196, 780, 988, 873, 196, 991, 243, 244, 196, + 196, 1415, 879, 83, 606, 607, 1409, 1141, 983, 984, + 985, 986, 1414, 498, 1145, 1146, 1143, 1144, 504, 1003, + 1044, 1010, 83, 528, 527, 537, 538, 530, 531, 532, + 533, 534, 535, 536, 529, 502, 996, 539, 332, 530, + 531, 532, 533, 534, 535, 536, 529, 636, 995, 539, + 468, 990, 1043, 989, 1045, 1094, 642, 781, 554, 1389, + 459, 1086, 1388, 1042, 527, 537, 538, 530, 531, 532, + 533, 534, 535, 536, 529, 196, 1013, 539, 83, 1331, + 83, 321, 491, 1080, 196, 1282, 1318, 196, 83, 1031, + 312, 305, 809, 810, 492, 307, 308, 309, 310, 997, + 956, 306, 313, 707, 311, 1058, 1139, 610, 240, 241, + 1066, 504, 1068, 749, 234, 1067, 1033, 1366, 235, 60, + 336, 1077, 553, 555, 556, 557, 558, 559, 994, 1069, + 1365, 1320, 1091, 1092, 1050, 506, 993, 1375, 1308, 745, + 568, 467, 1093, 62, 1095, 1096, 1097, 735, 7, 469, + 1081, 1082, 736, 6, 64, 1016, 620, 469, 734, 5, + 57, 1, 271, 270, 320, 821, 467, 743, 469, 469, + 469, 469, 469, 469, 469, 469, 1100, 560, 953, 1106, + 1109, 962, 1391, 469, 469, 469, 469, 1347, 1029, 1218, + 1123, 913, 905, 435, 70, 1383, 912, 1353, 756, 602, + 605, 606, 607, 603, 1138, 604, 608, 1306, 920, 1054, + 1055, 1088, 759, 923, 1223, 1386, 1085, 650, 649, 647, + 648, 646, 517, 652, 651, 741, 1075, 208, 469, 328, + 207, 329, 1190, 609, 53, 1186, 1153, 1154, 635, 1193, + 321, 867, 1173, 948, 1172, 1191, 1159, 507, 1152, 867, + 1189, 72, 1204, 1205, 1206, 1180, 776, 1126, 1099, 1099, + 813, 815, 466, 1194, 1125, 1197, 83, 1195, 958, 196, + 1133, 728, 977, 1196, 1198, 479, 211, 547, 992, 856, + 1070, 337, 1192, 847, 847, 83, 752, 496, 1210, 847, + 1216, 1364, 1209, 1217, 1182, 1319, 1030, 577, 852, 261, + 767, 275, 1232, 1233, 272, 274, 847, 273, 259, 882, + 758, 1039, 1199, 1200, 520, 260, 1201, 250, 593, 1203, + 601, 599, 598, 320, 1056, 1052, 318, 1046, 83, 83, + 1148, 83, 1245, 1278, 469, 1372, 762, 28, 61, 245, + 321, 23, 22, 806, 21, 1247, 19, 18, 1250, 17, + 20, 16, 15, 469, 83, 14, 32, 196, 196, 13, + 12, 196, 1268, 11, 10, 9, 733, 1254, 8, 1255, + 1277, 196, 4, 236, 1256, 25, 2, 0, 778, 336, + 83, 788, 789, 790, 791, 792, 793, 794, 795, 796, + 797, 798, 799, 800, 801, 802, 803, 1253, 1283, 0, + 1281, 0, 1292, 1263, 0, 0, 0, 0, 1225, 469, + 0, 469, 1295, 1296, 1297, 1300, 0, 0, 0, 469, + 1298, 1291, 83, 320, 83, 0, 1301, 0, 196, 1260, + 1261, 1077, 1262, 467, 0, 1264, 0, 1266, 0, 981, + 0, 1309, 0, 1311, 0, 1280, 0, 0, 0, 0, + 0, 0, 564, 0, 0, 83, 1252, 83, 83, 1316, + 469, 738, 1315, 0, 0, 0, 1321, 470, 471, 472, + 0, 0, 477, 0, 0, 1190, 0, 0, 1335, 0, + 482, 0, 196, 894, 1336, 1337, 0, 0, 1305, 1334, + 83, 900, 0, 1189, 1332, 0, 0, 1338, 0, 0, + 0, 0, 1345, 83, 196, 1012, 0, 0, 1339, 1363, + 83, 1352, 0, 0, 1014, 1015, 1346, 0, 0, 0, + 1358, 83, 1359, 0, 1190, 1362, 53, 0, 196, 0, + 0, 0, 0, 1376, 0, 0, 0, 1377, 0, 0, + 1018, 1019, 1189, 0, 0, 0, 1381, 0, 1028, 1302, + 0, 0, 0, 1034, 1379, 1035, 1036, 1037, 1038, 1310, + 0, 0, 0, 1395, 0, 0, 0, 0, 0, 775, + 1400, 0, 0, 0, 1402, 0, 867, 0, 0, 0, + 0, 83, 0, 83, 83, 83, 196, 83, 1405, 0, + 0, 0, 0, 0, 0, 83, 0, 1065, 0, 1412, + 1413, 1330, 0, 0, 0, 0, 0, 0, 0, 1420, + 322, 0, 0, 0, 0, 0, 469, 0, 0, 0, + 0, 83, 83, 83, 0, 0, 0, 1394, 564, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1004, 1005, 1006, 1007, 0, 0, 190, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1104, + 469, 0, 469, 0, 0, 0, 0, 83, 83, 0, + 0, 0, 0, 1385, 0, 336, 0, 0, 0, 0, + 0, 0, 0, 83, 439, 469, 0, 0, 0, 0, + 0, 0, 0, 0, 908, 0, 83, 0, 0, 0, + 0, 0, 695, 0, 0, 0, 0, 0, 0, 1404, + 704, 469, 0, 495, 1158, 0, 0, 0, 0, 83, + 0, 715, 716, 717, 718, 719, 720, 721, 722, 0, + 0, 0, 0, 0, 0, 469, 723, 724, 725, 726, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 847, 191, 0, 517, 222, 1065, 0, 83, 847, 1272, + 489, 0, 1207, 0, 0, 230, 0, 0, 0, 0, + 0, 0, 83, 0, 0, 0, 0, 0, 0, 249, + 0, 191, 191, 0, 0, 0, 469, 191, 469, 1220, + 0, 0, 447, 0, 448, 0, 0, 0, 0, 0, + 455, 775, 0, 0, 0, 0, 0, 0, 0, 0, + 457, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 1246, 528, 527, 537, 538, 530, 531, 532, 533, + 534, 535, 536, 529, 1248, 0, 539, 0, 0, 0, + 0, 1251, 0, 0, 0, 0, 0, 0, 0, 0, + 1257, 0, 469, 0, 0, 0, 0, 0, 1259, 0, + 0, 0, 0, 0, 0, 489, 0, 1156, 0, 1157, + 1269, 1270, 1271, 0, 0, 1274, 1276, 0, 0, 0, + 0, 1174, 1175, 0, 1177, 1178, 0, 0, 1285, 1286, + 1287, 0, 1290, 0, 0, 191, 0, 191, 0, 0, + 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, + 0, 0, 1294, 191, 1294, 1294, 1294, 0, 1299, 0, + 0, 0, 0, 0, 0, 595, 469, 528, 527, 537, 538, 530, 531, 532, 533, 534, 535, 536, 529, 0, - 0, 539, 0, 0, 0, 1106, 908, 40, 0, 0, - 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, - 1013, 0, 0, 0, 0, 0, 191, 0, 0, 0, - 0, 0, 0, 0, 0, 191, 0, 0, 191, 0, - 1011, 0, 0, 0, 0, 0, 950, 1316, 1317, 0, - 1318, 1319, 1320, 0, 0, 974, 0, 0, 975, 0, - 1033, 528, 527, 537, 538, 530, 531, 532, 533, 534, - 535, 536, 529, 0, 0, 539, 0, 0, 0, 0, - 713, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 249, 0, 0, 33, 34, 36, 35, 38, - 0, 0, 0, 0, 0, 667, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 39, 46, 47, 0, - 0, 48, 49, 37, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 41, 42, 0, 43, 44, - 50, 51, 52, 0, 0, 0, 0, 0, 249, 822, - 823, 824, 825, 826, 827, 828, 829, 831, 832, 833, - 834, 835, 836, 837, 838, 839, 840, 841, 830, 0, - 0, 0, 672, 0, 0, 0, 0, 0, 0, 0, - 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, - 1411, 528, 527, 537, 538, 530, 531, 532, 533, 534, - 535, 536, 529, 0, 0, 539, 0, 0, 0, 0, + 0, 539, 0, 483, 0, 0, 0, 0, 0, 0, + 0, 0, 469, 469, 469, 0, 0, 908, 0, 0, + 0, 0, 955, 0, 957, 0, 0, 0, 0, 0, + 0, 0, 976, 0, 0, 0, 1329, 528, 527, 537, + 538, 530, 531, 532, 533, 534, 535, 536, 529, 0, + 0, 539, 0, 1342, 1343, 1344, 0, 0, 517, 517, + 0, 0, 0, 1108, 1273, 0, 0, 0, 0, 0, + 0, 0, 0, 1258, 1220, 0, 0, 0, 0, 0, + 0, 1367, 1368, 1369, 1370, 1371, 0, 1294, 191, 0, + 0, 0, 0, 0, 0, 191, 617, 191, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1380, 0, 1151, 0, 0, 0, 702, 703, 0, 0, + 706, 0, 0, 709, 0, 0, 0, 0, 0, 0, + 1396, 0, 0, 0, 0, 1401, 1176, 0, 0, 0, + 0, 0, 0, 0, 0, 847, 0, 0, 517, 1406, + 0, 0, 731, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1408, 0, 528, 527, 537, 538, 530, + 531, 532, 533, 534, 535, 536, 529, 764, 0, 539, + 1424, 1425, 0, 0, 0, 0, 0, 908, 0, 908, + 1324, 1325, 0, 1326, 1327, 1328, 822, 823, 824, 825, + 826, 827, 828, 829, 831, 832, 833, 834, 835, 836, + 837, 838, 839, 840, 841, 830, 0, 0, 0, 191, + 191, 0, 0, 191, 0, 0, 191, 0, 0, 0, + 713, 0, 0, 0, 0, 0, 0, 0, 528, 527, + 537, 538, 530, 531, 532, 533, 534, 535, 536, 529, + 0, 0, 539, 1151, 0, 191, 0, 0, 0, 0, + 0, 744, 0, 0, 0, 864, 26, 27, 54, 29, + 30, 0, 0, 1105, 0, 0, 0, 0, 1155, 0, + 191, 0, 0, 0, 0, 45, 0, 0, 0, 0, + 31, 0, 713, 0, 0, 0, 0, 0, 1132, 528, + 527, 537, 538, 530, 531, 532, 533, 534, 535, 536, + 529, 0, 40, 539, 0, 0, 56, 0, 0, 0, + 0, 0, 0, 0, 0, 667, 0, 908, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1422, 0, + 249, 0, 0, 249, 249, 0, 0, 848, 848, 249, + 0, 0, 0, 848, 1108, 908, 0, 0, 0, 0, + 0, 0, 0, 249, 249, 249, 249, 950, 191, 0, + 848, 191, 191, 191, 191, 191, 974, 0, 0, 975, + 0, 0, 0, 881, 1011, 0, 191, 0, 0, 0, + 617, 0, 672, 0, 191, 191, 0, 0, 0, 0, + 33, 34, 36, 35, 38, 528, 527, 537, 538, 530, + 531, 532, 533, 534, 535, 536, 529, 0, 0, 539, + 0, 39, 46, 47, 0, 0, 48, 49, 37, 0, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 191, 55, 528, 527, 537, 538, 530, 531, 532, 533, - 534, 535, 536, 529, 0, 0, 539, 0, 1180, 668, + 41, 42, 0, 43, 44, 50, 51, 52, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1195, 1196, 0, 0, 1197, 0, - 0, 1199, 0, 682, 683, 684, 685, 686, 687, 688, + 191, 0, 0, 0, 0, 0, 0, 0, 0, 191, + 0, 0, 191, 682, 683, 684, 685, 686, 687, 688, 0, 689, 690, 691, 692, 693, 669, 670, 671, 653, 654, 681, 0, 656, 0, 657, 658, 659, 660, 661, 662, 663, 664, 665, 666, 673, 674, 675, 676, 677, - 678, 679, 680, 0, 0, 0, 0, 0, 1134, 1135, - 0, 0, 1138, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 249, 0, 0, 0, 0, 0, 0, 1247, - 0, 0, 1145, 0, 0, 0, 0, 249, 0, 0, - 0, 0, 0, 0, 0, 713, 0, 0, 0, 0, + 678, 679, 680, 0, 713, 0, 55, 0, 0, 522, + 0, 526, 0, 0, 0, 0, 249, 540, 541, 542, + 543, 544, 545, 546, 0, 523, 524, 525, 521, 528, + 527, 537, 538, 530, 531, 532, 533, 534, 535, 536, + 529, 0, 0, 539, 0, 1314, 528, 527, 537, 538, + 530, 531, 532, 533, 534, 535, 536, 529, 0, 0, + 539, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 848, 0, 0, 0, 0, 0, 0, 848, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 1274, 0, 0, - 0, 0, 0, 0, 564, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1236, 0, 191, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1147, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1243, 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 1383, 564, 0, 0, 0, 0, 0, 424, 414, - 0, 385, 426, 363, 377, 434, 378, 379, 407, 349, - 394, 133, 375, 0, 366, 344, 372, 345, 364, 387, - 100, 390, 362, 416, 397, 114, 0, 0, 0, 432, - 116, 402, 0, 150, 126, 0, 249, 389, 418, 391, - 412, 384, 408, 354, 401, 427, 376, 405, 428, 0, - 0, 0, 386, 82, 0, 0, 640, 639, 641, 910, - 0, 0, 0, 0, 93, 0, 0, 0, 404, 423, - 374, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1136, 1137, 0, 0, 1140, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 191, 0, 0, 0, + 0, 0, 0, 0, 1242, 0, 249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 406, 343, 403, 0, 347, 350, 433, 421, 369, - 370, 1076, 0, 0, 0, 0, 0, 0, 388, 392, - 393, 409, 382, 0, 0, 0, 0, 0, 0, 0, - 0, 367, 0, 400, 0, 848, 0, 351, 348, 0, - 0, 0, 0, 353, 0, 368, 410, 0, 342, 413, - 419, 383, 197, 422, 381, 380, 425, 139, 0, 0, - 153, 105, 104, 113, 417, 365, 373, 96, 371, 145, - 135, 165, 399, 136, 144, 117, 157, 140, 164, 198, - 172, 155, 171, 85, 154, 163, 94, 147, 0, 0, - 0, 87, 161, 152, 124, 109, 110, 86, 0, 143, - 99, 103, 98, 132, 158, 159, 97, 90, 170, 89, - 91, 169, 131, 156, 162, 125, 122, 88, 160, 123, - 121, 112, 101, 106, 137, 119, 138, 107, 128, 127, - 129, 0, 346, 0, 151, 167, 179, 361, 420, 173, - 174, 175, 176, 0, 0, 0, 130, 92, 108, 148, - 120, 111, 118, 142, 178, 134, 146, 95, 166, 149, - 357, 360, 355, 356, 395, 396, 429, 430, 431, 411, - 352, 0, 358, 359, 0, 415, 398, 84, 0, 115, - 177, 141, 102, 168, 424, 414, 0, 385, 426, 363, - 377, 434, 378, 379, 407, 349, 394, 133, 375, 0, + 0, 249, 0, 0, 0, 0, 1249, 0, 0, 713, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 848, 0, 0, 0, 0, 0, + 0, 0, 848, 191, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 424, 414, 0, + 385, 426, 363, 377, 434, 378, 379, 407, 349, 394, + 133, 375, 0, 366, 344, 372, 345, 364, 387, 100, + 390, 362, 416, 397, 114, 0, 0, 191, 432, 116, + 402, 0, 150, 126, 0, 0, 389, 418, 391, 412, + 384, 408, 354, 401, 427, 376, 405, 428, 0, 191, + 0, 386, 82, 0, 0, 640, 639, 641, 910, 0, + 0, 0, 0, 93, 0, 0, 0, 404, 423, 374, + 0, 0, 0, 191, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 406, 343, 403, 0, 347, 350, 433, 421, 369, 370, + 1078, 0, 0, 0, 0, 0, 0, 388, 392, 393, + 409, 382, 0, 0, 0, 0, 0, 0, 0, 0, + 367, 0, 400, 0, 0, 0, 351, 348, 0, 0, + 0, 617, 353, 0, 368, 410, 249, 342, 413, 419, + 383, 197, 422, 381, 380, 425, 139, 0, 0, 153, + 105, 104, 113, 417, 365, 373, 96, 371, 145, 135, + 165, 399, 136, 144, 117, 157, 140, 164, 198, 172, + 155, 171, 85, 154, 163, 94, 147, 0, 0, 0, + 87, 161, 152, 124, 109, 110, 86, 0, 143, 99, + 103, 98, 132, 158, 159, 97, 90, 170, 89, 91, + 169, 131, 156, 162, 125, 122, 88, 160, 123, 121, + 112, 101, 106, 137, 119, 138, 107, 128, 127, 129, + 0, 346, 0, 151, 167, 179, 361, 420, 173, 174, + 175, 176, 0, 0, 0, 130, 92, 108, 148, 120, + 111, 118, 142, 178, 134, 146, 95, 166, 149, 357, + 360, 355, 356, 395, 396, 429, 430, 431, 411, 352, + 0, 358, 359, 0, 415, 398, 84, 0, 115, 177, + 141, 102, 168, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 424, 414, 0, 385, 426, 363, + 377, 434, 378, 379, 407, 349, 394, 133, 375, 848, 366, 344, 372, 345, 364, 387, 100, 390, 362, 416, 397, 114, 0, 0, 0, 432, 116, 402, 0, 150, 126, 0, 0, 389, 418, 391, 412, 384, 408, 354, @@ -1224,7 +1224,7 @@ var yyAct = [...]int16{ 0, 0, 0, 0, 0, 0, 0, 406, 343, 403, 0, 347, 350, 433, 421, 369, 370, 0, 0, 0, 0, 0, 0, 0, 388, 392, 393, 409, 382, 0, - 0, 0, 0, 0, 0, 1148, 0, 367, 0, 400, + 0, 0, 0, 0, 0, 1150, 0, 367, 0, 400, 0, 0, 0, 351, 348, 0, 0, 0, 0, 353, 0, 368, 410, 0, 342, 413, 419, 383, 197, 422, 381, 380, 425, 139, 0, 0, 153, 105, 104, 113, @@ -1521,7 +1521,7 @@ var yyAct = [...]int16{ 264, 265, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 0, 0, 301, 0, 139, 0, 0, 153, 105, 104, 113, 0, 0, 0, 96, - 0, 145, 135, 165, 1412, 136, 144, 117, 157, 140, + 0, 145, 135, 165, 1423, 136, 144, 117, 157, 140, 164, 198, 172, 155, 171, 85, 154, 163, 94, 147, 0, 0, 0, 87, 161, 152, 124, 109, 110, 86, 0, 143, 99, 103, 98, 132, 158, 159, 97, 90, @@ -1996,14 +1996,14 @@ var yyAct = [...]int16{ } var yyPact = [...]int16{ - 1995, -1000, -209, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 2010, -1000, -218, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 819, 854, -1000, -1000, -1000, -1000, - -1000, -1000, 585, 8210, 36, 65, -44, 10515, 62, 1462, - 11277, -1000, -23, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -29, 11277, 408, 561, -1000, -1000, -1000, -1000, -1000, 807, - 815, 608, 795, 665, -1000, 5613, 35, 9235, 10261, 5087, - -1000, 398, 54, 11277, -171, 11785, 32, 32, 32, -1000, + -1000, -1000, -1000, -1000, 914, 948, -1000, -1000, -1000, -1000, + -1000, -1000, 665, 8210, 46, 68, -38, 10515, 66, 309, + 11277, -1000, -30, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -43, 11277, 442, 604, -1000, -1000, -1000, -1000, -1000, 907, + 912, 655, 898, 765, -1000, 5613, 19, 9235, 10261, 5087, + -1000, 440, 54, 11277, -170, 11785, 11, 11, 11, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -2014,23 +2014,23 @@ var yyPact = [...]int16{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - 61, 11277, -1000, 11277, 31, 397, 31, 31, 31, 11277, - -1000, 103, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 11277, - 395, 742, 48, 3983, 3983, 3983, 3983, -15, -17, 3983, - -123, -96, 625, -1000, -1000, -1000, -1000, 3983, -1000, -1000, + 65, 11277, -1000, 11277, 9, 439, 9, 9, 9, 11277, + -1000, 98, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 11277, + 438, 840, 62, 3983, 3983, 3983, 3983, -23, -25, 3983, + -123, -109, 721, -1000, -1000, -1000, -1000, 3983, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 11277, - 650, 592, 411, 755, 6668, 6931, 819, -1000, 561, -1000, - -1000, -1000, 692, -1000, -1000, 296, 828, -1000, 7956, 101, - -1000, 6931, 1672, 556, -1000, -1000, -1000, -1000, 556, -1000, - -1000, -1000, -1000, 89, 7439, 7439, 7439, 7439, 7439, 7439, - -1000, -1000, -1000, -1000, -1000, -1000, 272, -1000, -1000, -1000, - 6405, 556, 7693, 556, 556, 556, 556, 556, 556, 556, - 556, 6931, 556, 556, 556, 556, 556, 556, 556, 556, - 556, 556, 556, 556, 556, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, 10007, 530, 835, -1000, -1000, -1000, - 790, 8718, 9752, 11277, 528, -1000, 551, 550, 4811, -24, - -108, -1000, 41, -1000, -1000, -1000, 166, 9489, -1000, -1000, - 741, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 724, 675, 448, 873, 6668, 6931, 914, -1000, 604, -1000, + -1000, -1000, 807, -1000, -1000, 270, 934, -1000, 7956, 97, + -1000, 6931, 2179, 643, -1000, -1000, -1000, -1000, 643, -1000, + -1000, -1000, -1000, 78, 7439, 7439, 7439, 7439, 7439, 7439, + -1000, -1000, -1000, -1000, -1000, -1000, 241, -1000, -1000, -1000, + 6405, 643, 7693, 643, 643, 643, 643, 643, 643, 643, + 643, 6931, 643, 643, 643, 643, 643, 643, 643, 643, + 643, 643, 643, 643, 643, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 10007, 574, 749, -1000, -1000, -1000, + 895, 8718, 9752, 11277, 551, -1000, 636, 631, 4811, -35, + -120, -1000, 24, -1000, -1000, -1000, 169, 9489, -1000, -1000, + 836, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, @@ -2039,209 +2039,201 @@ var yyPact = [...]int16{ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, 476, -1000, 2115, 394, 3983, - 44, 588, 393, 225, 392, 11277, 11277, 3983, 39, 11277, - 787, 619, 11277, 391, 386, -1000, 3707, -1000, 3983, 3983, + -1000, -1000, -1000, -1000, -1000, 534, -1000, 2045, 432, 3983, + 43, 672, 428, 180, 418, 11277, 11277, 3983, 21, 11277, + 890, 720, 11277, 408, 376, -1000, 3707, -1000, 3983, 3983, 3983, 3983, 3983, 3983, 3983, 3983, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 3983, 3983, 3983, 3983, -1000, -127, -101, - -1000, 11277, -1000, -1000, 83, 83, 2115, 11277, -1000, -1000, - -1000, 849, 118, 291, 805, 99, 552, -1000, 314, 807, - 411, 665, 11531, 547, -1000, -1000, 11277, -1000, 6931, 6931, - 287, -1000, 10769, -1000, -1000, -1000, -1000, -1000, 3155, 131, - 7439, 327, 154, 7439, 7439, 7439, 7439, 7439, 7439, 7439, - 7439, 7439, 7439, 7439, 7439, 7439, 7439, 7439, 7439, 407, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 367, -1000, - 561, 660, 660, 111, -1000, 111, 111, 111, 111, 111, - 283, -1000, 411, 474, 177, 6405, 5350, -1000, 2111, 5613, - 5613, 6931, 6931, 11023, 11023, 5613, 798, 220, 177, 11023, - -1000, 411, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 5613, - 5613, 5613, 5613, 140, 11277, -1000, 11023, 9235, 9235, 9235, - 9235, 9235, -1000, 659, 657, -1000, 643, 641, 647, 11277, - -1000, 465, 8718, 129, 556, -1000, 11277, -1000, 7, 500, - 9235, 11277, -1000, -1000, 4811, 7439, 551, 550, -108, 533, - -1000, -142, -120, 7439, 6139, 107, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 2879, 175, 285, -82, -1000, -1000, -1000, - -1000, 566, -1000, 566, 566, 566, 566, -54, -54, -54, - -54, -1000, -1000, -1000, -1000, -1000, 581, 580, -1000, 566, - 566, 566, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 578, - 578, 578, 567, 567, 591, -1000, 11277, -191, 363, 3983, - 785, 3983, -1000, 108, -1000, 11277, -1000, -1000, 11277, 3983, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 246, -1000, + -1000, -1000, -1000, 3983, 3983, 3983, 3983, -1000, -125, -106, + -1000, 11277, -1000, -1000, 85, 85, 2045, 11277, -1000, -1000, + -1000, 940, 124, 386, 905, 95, 640, -1000, 372, 907, + 448, 765, 11531, 736, -1000, -1000, 11277, -1000, 6931, 6931, + 314, -1000, 10769, -1000, -1000, -1000, -1000, -1000, 3155, 140, + 7439, 258, 151, 7439, 7439, 7439, 7439, 7439, 7439, 7439, + 7439, 7439, 7439, 7439, 7439, 7439, 7439, 7439, 7439, 382, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 359, -1000, + 604, 839, 839, 108, -1000, 108, 108, 108, 108, 108, + 247, -1000, 448, 530, 266, 6405, 5350, -1000, 1868, 5613, + 5613, 6931, 6931, 11023, 11023, 5613, 900, 175, 266, 11023, + -1000, 448, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 5613, + 5613, 5613, 5613, 143, 11277, -1000, 11023, 9235, 9235, 9235, + 9235, 9235, -1000, 760, 748, -1000, 735, 733, 768, 11277, + -1000, 525, 8718, 141, 643, -1000, 11277, -1000, -10, 487, + 9235, 11277, -1000, -1000, 4811, 7439, 636, 631, -120, 612, + -1000, -148, -131, 7439, 6139, 69, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, 2879, 205, 235, -97, -1000, -1000, -1000, + -1000, 651, -1000, 651, 651, 651, 651, -68, -68, -68, + -68, -1000, -1000, -1000, -1000, -1000, 664, 663, -1000, 651, + 651, 651, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 662, + 662, 662, 653, 653, 673, -1000, 11277, -191, 355, 3983, + 887, 3983, -1000, 104, -1000, 11277, -1000, -1000, 11277, 3983, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, 461, -1000, 536, -1000, -1000, 658, 6931, 6931, 6931, - 3431, 6931, -1000, 701, 683, 755, -1000, 798, 811, -1000, - 695, 684, 5613, -1000, -1000, 131, 227, -1000, -1000, 355, - -1000, -1000, -1000, -1000, 95, 556, -1000, -1000, 2142, -1000, - -1000, -1000, -1000, 327, 7439, 7439, 7439, 7439, 639, 639, - 2142, 1981, 722, 1604, 111, 224, 224, 124, 124, 124, - 124, 124, 654, 654, -1000, -1000, -1000, 411, 272, -1000, - -1000, 272, -1000, -1000, 6931, -1000, 411, 411, 5613, 511, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 237, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, 518, -1000, 620, -1000, -1000, 778, 6931, 6931, 6931, + 3431, 6931, -1000, 830, 828, 873, -1000, 900, 927, -1000, + 822, 810, 5613, -1000, -1000, 140, 145, -1000, -1000, 310, + -1000, -1000, -1000, -1000, 91, 643, -1000, -1000, 2196, -1000, + -1000, -1000, -1000, 258, 7439, 7439, 7439, 7439, 56, 56, + 2196, 2035, 635, 753, 108, 324, 324, 107, 107, 107, + 107, 107, 725, 725, -1000, -1000, -1000, 448, 241, -1000, + -1000, 241, -1000, -1000, 6931, -1000, 448, 448, 5613, 565, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 455, 455, 279, 305, 539, -1000, 92, 525, - 455, 5613, 229, -1000, 6931, 411, -1000, 455, 411, 455, - 455, 548, 682, 556, -1000, 540, -1000, 161, 835, 576, - 617, 1231, -1000, -1000, -1000, -1000, 652, -1000, 644, -1000, - -1000, -1000, -1000, -1000, 53, 52, 50, 11785, -1000, 826, - 9235, 537, -1000, -1000, 2142, 533, -108, -117, -1000, -1000, - 2142, -1000, 177, -1000, 425, 532, 2603, -1000, -1000, -1000, - -1000, -1000, -1000, 573, 771, 171, 183, 361, -1000, -1000, - 746, -1000, 255, -84, -1000, -1000, 350, -54, -54, -1000, - -1000, 107, 727, 107, 107, 107, 379, 379, -1000, -1000, - -1000, -1000, 349, -1000, -1000, -1000, 345, -1000, 606, 11785, - 3983, -1000, 4535, -1000, -1000, -1000, -1000, -1000, -1000, 389, - 280, 168, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, -1000, 0, -1000, 3983, -1000, 329, 11277, 11277, - 2115, 789, 11277, 670, 177, 177, 177, 87, -1000, 721, - 680, -1000, 11277, -1000, -1000, -1000, -1000, 518, -1000, -1000, - -1000, 4259, 5613, -1000, 639, 639, 2142, 1531, -1000, 7439, - -1000, 7439, -1000, 177, -1000, -1000, 455, 5613, -1000, -1000, - 16, 407, 16, 7439, 7439, 3431, 7439, 7439, -184, 538, - 214, -1000, 6931, 309, -1000, -1000, -1000, -1000, -1000, 596, - 11023, 556, -1000, 8464, -1000, 11785, 819, 11023, 6931, 6931, - -1000, -1000, 6931, 568, -1000, 6931, -1000, -1000, -1000, 556, - 556, 556, 441, -1000, 819, 537, -1000, -1000, -1000, -150, - -157, -1000, -1000, -1000, 2879, -1000, 2879, 11785, -1000, 359, - 358, -1000, -1000, 594, 63, -1000, -1000, -1000, 462, 107, - 107, -1000, 182, -1000, -1000, -1000, 453, -1000, 448, 520, - 446, 11277, -1000, -1000, 519, -1000, 156, -1000, -1000, 11785, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, 11785, 11277, -1000, -1000, -1000, -1000, -1000, 11785, - -1000, -1000, 379, 6931, -1000, -1000, -1000, 83, -1000, -1000, - 4535, -1000, -1000, -1000, -1000, -1000, 826, 9235, -1000, -1000, - 411, -1000, -1000, 7439, 2142, 2142, -1000, -1000, 411, 566, - 566, -1000, 566, 567, -1000, 566, -38, 566, -39, 556, - 411, 411, 1804, 1001, -1000, 1344, 904, 556, -178, -1000, - 177, 6931, -207, 773, 481, 505, -1000, -1000, 5876, 411, - 443, 79, 441, 807, -1000, 177, 177, 177, 11785, 177, - 11785, 11785, 11785, 8981, 11785, 807, -1000, -1000, -1000, -1000, - 2603, -1000, 439, -1000, 566, -1000, -1000, -77, 846, -1000, - -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -54, 379, -54, 343, -1000, 325, 3983, 4535, 2879, -1000, - 564, -1000, -1000, -1000, -1000, 775, -1000, 177, -1000, 824, - 512, -1000, 2142, -1000, -1000, 100, -1000, -1000, -1000, -1000, - -1000, -1000, 320, -1000, -1000, -1000, 7439, 7439, -1000, 7439, - 7439, 7439, 411, 379, 177, -1000, 5613, 769, -1000, 556, - -1000, -1000, 535, 10769, 10769, -1000, -1000, 436, -1000, 434, - 434, 434, 129, -1000, -1000, 123, 11785, -1000, 160, -1000, - -161, 107, -1000, 107, 428, 415, -1000, -1000, -1000, 11785, - 556, 821, 813, -1000, -1000, 411, 1907, 1907, 1907, 1907, - -10, -1000, -1000, 511, 831, -1000, 556, -1000, 561, 76, - -1000, 11785, -1000, -1000, -1000, -1000, -1000, 123, -1000, 335, - 155, 379, -1000, 288, 767, -1000, 749, -1000, -1000, -1000, - -1000, -1000, 423, -3, -1000, 6931, 6931, -1000, -1000, -1000, - -1000, -1000, 411, 37, -195, 11023, 505, 411, 10769, -1000, - -1000, -1000, 315, -1000, -1000, -1000, 379, -1000, -1000, 588, - 421, -1000, 11785, 177, 504, -1000, 668, -189, -203, 501, - -1000, -1000, -1000, -1000, -191, -1000, -3, 676, -1000, 663, - -1000, -1000, -1000, -6, -193, -8, -196, 556, -204, 7185, - -1000, 1907, 411, -1000, -1000, + -1000, -1000, 514, 514, 318, 239, 609, -1000, 90, 601, + 514, 5613, 220, -1000, 6931, 448, -1000, 514, 448, 514, + 514, 567, 794, 643, -1000, 582, -1000, 165, 749, 660, + 718, 965, -1000, -1000, -1000, -1000, 741, -1000, 734, -1000, + -1000, -1000, -1000, -1000, 53, 52, 48, 11785, -1000, 932, + 9235, 615, -1000, -1000, 2196, 612, -120, -153, -1000, -1000, + 2196, -1000, 266, -1000, 430, 602, 2592, -1000, -1000, -1000, + -1000, -1000, -1000, 657, 865, 171, 170, 343, -1000, -1000, + 842, -1000, 208, -99, -1000, -1000, 313, -68, -68, -1000, + -1000, 69, 835, 69, 69, 69, 417, 417, -1000, -1000, + -1000, -1000, 302, -1000, -1000, -1000, 300, -1000, 688, 11785, + 3983, -1000, 4535, -1000, -1000, -1000, -1000, -1000, -1000, 597, + 191, 186, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -11, -1000, 3983, -1000, 264, 11277, 11277, + 2045, 894, 11277, 776, 266, 266, 266, 88, -1000, 792, + 790, -1000, 11277, -1000, -1000, -1000, -1000, 585, -1000, -1000, + -1000, 4259, 5613, -1000, 56, 56, 2196, 1929, -1000, 7439, + -1000, 7439, -1000, 266, -1000, -1000, 514, 5613, -1000, -1000, + 332, 382, 332, 7439, 7439, 3431, 7439, 7439, -185, 641, + 164, -1000, 6931, 374, -1000, -1000, -1000, -1000, -1000, 686, + 11023, 643, -1000, 8464, -1000, 11785, 932, 914, 11023, 9235, + 6931, 6931, -1000, -1000, 6931, 656, -1000, 6931, -1000, -1000, + -1000, 643, 643, 643, 481, -1000, 914, 615, -212, -1000, + -1000, -137, -149, -1000, -1000, -1000, 2879, -1000, 2879, 11785, + -1000, 340, 323, -1000, -1000, 576, 51, -1000, -1000, -1000, + 474, 69, 69, -1000, 192, -1000, -1000, -1000, 512, -1000, + 510, 583, 503, 11277, -1000, -1000, 575, -1000, 158, -1000, + -1000, 11785, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, 11785, 11277, -1000, -1000, -1000, -1000, + -1000, 11785, -1000, -1000, 417, 6931, -1000, -1000, -1000, 85, + -1000, -1000, 4535, -1000, -1000, -1000, -1000, -1000, 932, 9235, + -1000, -1000, 448, -1000, -1000, 7439, 2196, 2196, -1000, -1000, + 448, 651, 651, -1000, 651, 653, -1000, 651, -52, 651, + -53, 643, 448, 448, 1512, 1795, -1000, 713, 1667, 643, + -180, -1000, 266, 6931, -212, 868, 557, 495, -1000, -1000, + 5876, 448, 500, 87, 481, 914, 907, -1000, 569, 266, + 266, 266, 11785, 266, 11785, 11785, 11785, 8981, 11785, 907, + -212, -1000, 5613, -1000, -1000, -1000, 2592, -1000, 472, -1000, + 651, -1000, -1000, -91, 939, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -68, 417, -68, 291, + -1000, 289, 3983, 4535, 2879, -1000, 647, -1000, -1000, -1000, + -1000, 870, -1000, 266, -1000, 928, 569, -1000, 2196, -1000, + -1000, 102, -1000, -1000, -1000, -1000, -1000, -1000, 277, -1000, + -1000, -1000, 7439, 7439, -1000, 7439, 7439, 7439, 448, 417, + 266, -1000, 861, -1000, 643, -1000, -1000, 573, 10769, 10769, + -1000, 907, -212, 470, -1000, 456, 456, 456, 141, -1000, + -212, -1000, 565, 118, 11785, -1000, 163, -1000, -158, 69, + -1000, 69, 467, 460, -1000, -1000, -1000, 11785, 643, 926, + 911, -1000, -1000, 448, 1617, 1617, 1617, 1617, 301, -1000, + -1000, 938, -1000, 643, -1000, 604, 86, -1000, -212, -1000, + 11785, -1000, -1000, -1000, -1000, -1000, -1000, 118, -1000, 316, + 155, 417, -1000, 254, 844, -1000, 841, -1000, -1000, -1000, + -1000, -1000, 451, -12, -1000, 6931, 6931, -1000, -1000, -1000, + -1000, -1000, 448, 37, -194, 11023, 495, 448, 10769, -1000, + -1000, -1000, -1000, 262, -1000, -1000, -1000, 417, -1000, -1000, + 672, 447, -1000, 11785, 266, 477, -1000, 775, -189, -203, + 377, -1000, -1000, -1000, -1000, -191, -1000, -12, 786, -1000, + 770, -1000, -1000, -1000, -15, -192, -29, -196, 643, -205, + 7185, -1000, 1617, 448, -1000, -1000, } var yyPgo = [...]int16{ - 0, 1113, 13, 39, 1110, 1109, 1106, 867, 865, 860, - 1105, 1104, 1102, 1100, 1097, 1096, 1094, 1091, 1084, 1082, - 1081, 1079, 1078, 1074, 1072, 1070, 1069, 144, 1068, 1067, - 1066, 58, 1064, 70, 1063, 1052, 31, 35, 53, 33, - 1245, 1048, 38, 85, 63, 1046, 49, 1041, 1040, 81, - 1039, 61, 1023, 1022, 1389, 1019, 1018, 11, 41, 1013, - 1012, 1011, 1010, 66, 820, 1009, 1008, 1007, 998, 996, - 995, 994, 48, 7, 8, 34, 12, 993, 311, 6, - 992, 47, 991, 990, 986, 985, 28, 984, 51, 983, - 17, 50, 982, 18, 59, 27, 24, 9, 71, 55, - 64, 981, 29, 56, 44, 978, 974, 380, 973, 972, - 971, 970, 969, 967, 156, 347, 966, 965, 964, 959, - 45, 192, 540, 807, 60, 958, 954, 5, 952, 1369, - 69, 65, 20, 950, 30, 277, 43, 949, 948, 947, - 946, 32, 943, 40, 942, 940, 939, 937, 936, 935, - 934, 171, 930, 927, 926, 16, 21, 925, 918, 57, - 25, 917, 916, 915, 37, 52, 914, 46, 908, 907, - 906, 905, 26, 15, 904, 10, 903, 22, 899, 897, - 2, 896, 19, 895, 3, 893, 4, 36, 890, 888, - 42, 884, 876, 23, 874, 873, 872, 871, 0, 356, - 870, 863, 72, + 0, 1186, 11, 36, 1185, 1183, 1182, 968, 962, 957, + 1178, 1175, 1174, 1173, 1170, 1169, 1166, 1165, 1162, 1161, + 1160, 1159, 1157, 1156, 1154, 1152, 1151, 137, 1149, 1148, + 1147, 56, 1146, 63, 1145, 1143, 41, 146, 55, 38, + 71, 1140, 1137, 34, 75, 107, 90, 1136, 43, 1135, + 1134, 1132, 59, 1131, 1130, 1420, 1128, 58, 13, 30, + 1127, 1125, 1124, 1121, 66, 667, 1120, 1118, 1117, 1115, + 1114, 1111, 1110, 45, 6, 9, 18, 19, 1109, 83, + 10, 1108, 46, 1107, 1106, 1105, 1101, 35, 1097, 51, + 1096, 15, 50, 1092, 17, 60, 27, 21, 4, 73, + 57, 72, 1091, 26, 53, 42, 1090, 1088, 374, 1087, + 1086, 1085, 1082, 1081, 1080, 142, 360, 1078, 1074, 1067, + 1061, 40, 188, 519, 860, 61, 1057, 1053, 5, 1048, + 1523, 67, 70, 22, 1043, 31, 1072, 32, 1041, 1040, + 1039, 1037, 29, 1035, 33, 1034, 1033, 1031, 1030, 1029, + 1028, 1027, 77, 1026, 1025, 1024, 14, 20, 1023, 1021, + 52, 47, 1018, 1017, 1007, 48, 49, 1006, 44, 1005, + 1004, 1003, 1002, 23, 24, 1001, 16, 999, 8, 997, + 992, 2, 991, 28, 989, 3, 988, 7, 39, 987, + 25, 37, 977, 975, 131, 973, 972, 971, 970, 0, + 507, 966, 964, 112, } var yyR1 = [...]uint8{ - 0, 196, 197, 197, 1, 1, 1, 1, 1, 1, + 0, 197, 198, 198, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 6, 3, 4, 4, 5, 5, 7, 7, 7, 30, 30, 8, - 9, 9, 9, 200, 200, 49, 49, 94, 94, 10, - 10, 10, 10, 10, 10, 99, 99, 104, 104, 104, - 105, 105, 105, 105, 139, 139, 137, 137, 11, 11, - 11, 11, 11, 11, 11, 186, 186, 185, 184, 184, - 183, 183, 182, 16, 169, 170, 170, 170, 165, 142, - 142, 143, 143, 143, 143, 143, 150, 146, 146, 144, - 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, - 145, 147, 147, 147, 147, 147, 148, 148, 148, 148, - 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, - 148, 149, 149, 149, 149, 149, 149, 149, 149, 164, - 164, 151, 151, 159, 159, 160, 160, 160, 157, 157, - 158, 158, 161, 161, 161, 152, 152, 152, 152, 152, - 152, 152, 154, 154, 162, 162, 155, 155, 155, 156, - 156, 156, 163, 163, 163, 163, 163, 153, 153, 166, - 166, 178, 178, 177, 177, 177, 168, 168, 174, 174, - 174, 174, 174, 167, 167, 176, 176, 175, 171, 171, - 171, 172, 172, 172, 173, 173, 173, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 187, 187, 187, 187, - 187, 187, 187, 187, 187, 187, 187, 181, 179, 179, - 180, 180, 13, 14, 14, 14, 14, 14, 15, 15, - 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, + 8, 9, 9, 9, 201, 201, 44, 44, 95, 95, + 10, 10, 10, 10, 10, 10, 100, 100, 105, 105, + 105, 106, 106, 106, 106, 140, 140, 138, 138, 11, + 11, 11, 11, 11, 11, 11, 187, 187, 186, 185, + 185, 184, 184, 183, 16, 170, 171, 171, 171, 166, + 143, 143, 144, 144, 144, 144, 144, 151, 147, 147, + 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, + 146, 146, 148, 148, 148, 148, 148, 149, 149, 149, + 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, + 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, + 165, 165, 152, 152, 160, 160, 161, 161, 161, 158, + 158, 159, 159, 162, 162, 162, 153, 153, 153, 153, + 153, 153, 153, 155, 155, 163, 163, 156, 156, 156, + 157, 157, 157, 164, 164, 164, 164, 164, 154, 154, + 167, 167, 179, 179, 178, 178, 178, 169, 169, 175, + 175, 175, 175, 175, 168, 168, 177, 177, 176, 172, + 172, 172, 173, 173, 173, 174, 174, 174, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 188, 188, 188, + 188, 188, 188, 188, 188, 188, 188, 188, 182, 180, + 180, 181, 181, 13, 14, 14, 14, 14, 14, 15, + 15, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, - 18, 18, 18, 18, 18, 18, 18, 112, 112, 109, - 109, 110, 110, 111, 111, 111, 113, 113, 113, 140, - 140, 138, 138, 138, 19, 19, 21, 21, 22, 23, - 20, 20, 20, 20, 20, 24, 25, 25, 25, 190, - 190, 190, 190, 190, 190, 26, 26, 191, 191, 201, - 27, 28, 28, 29, 29, 29, 33, 33, 33, 31, - 31, 32, 32, 38, 38, 37, 37, 39, 39, 39, - 39, 125, 125, 125, 127, 127, 127, 127, 124, 41, - 41, 42, 42, 43, 43, 44, 44, 44, 56, 56, - 93, 93, 95, 95, 45, 45, 45, 45, 46, 46, - 47, 47, 48, 48, 133, 133, 132, 132, 132, 131, - 50, 50, 50, 52, 51, 51, 51, 51, 53, 53, - 55, 55, 54, 54, 57, 57, 57, 57, 58, 58, - 40, 40, 40, 40, 40, 40, 40, 108, 108, 60, - 60, 59, 59, 59, 59, 59, 59, 59, 59, 59, - 59, 59, 59, 71, 71, 71, 71, 71, 71, 61, - 61, 61, 61, 61, 61, 61, 36, 36, 72, 72, - 72, 78, 73, 73, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 18, 18, 18, 18, 18, 18, 18, 18, 113, 113, + 110, 110, 111, 111, 112, 112, 112, 114, 114, 114, + 141, 141, 139, 139, 139, 19, 19, 21, 21, 22, + 23, 20, 20, 20, 20, 20, 24, 25, 25, 25, + 191, 191, 191, 191, 191, 191, 26, 26, 192, 192, + 202, 27, 28, 28, 29, 29, 29, 33, 33, 33, + 31, 31, 32, 32, 38, 38, 37, 37, 39, 39, + 39, 39, 126, 126, 126, 128, 128, 128, 128, 125, + 41, 41, 42, 43, 43, 45, 45, 46, 46, 46, + 57, 57, 94, 94, 96, 96, 47, 47, 47, 47, + 48, 48, 49, 49, 50, 50, 134, 134, 133, 133, + 133, 132, 51, 51, 51, 53, 52, 52, 52, 52, + 54, 54, 56, 56, 55, 55, 58, 58, 58, 58, + 59, 59, 40, 40, 40, 40, 40, 40, 40, 109, + 109, 61, 61, 60, 60, 60, 60, 60, 60, 60, + 60, 60, 60, 60, 60, 72, 72, 72, 72, 72, + 72, 62, 62, 62, 62, 62, 62, 62, 36, 36, + 73, 73, 73, 79, 74, 74, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, + 65, 65, 65, 65, 65, 65, 65, 196, 195, 70, + 70, 70, 68, 68, 68, 68, 68, 68, 68, 68, + 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, + 69, 69, 69, 69, 69, 203, 203, 71, 71, 71, + 71, 34, 34, 34, 34, 34, 137, 137, 142, 142, + 142, 142, 142, 142, 142, 142, 142, 142, 142, 142, + 142, 142, 83, 83, 35, 35, 81, 81, 82, 84, + 84, 67, 67, 67, 80, 80, 80, 123, 123, 123, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64, 64, 64, 64, 195, 194, 69, 69, 69, - 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, - 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, - 68, 68, 68, 202, 202, 70, 70, 70, 70, 34, - 34, 34, 34, 34, 136, 136, 141, 141, 141, 141, - 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, - 82, 82, 35, 35, 80, 80, 81, 83, 83, 66, - 66, 66, 79, 79, 79, 122, 122, 122, 63, 63, - 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, - 63, 188, 188, 65, 65, 65, 84, 84, 85, 85, - 86, 86, 87, 87, 88, 89, 89, 89, 89, 89, - 89, 89, 90, 90, 90, 90, 90, 90, 91, 91, - 91, 62, 62, 62, 62, 62, 62, 92, 92, 92, - 92, 96, 96, 74, 74, 76, 76, 75, 77, 189, - 189, 97, 97, 102, 98, 98, 100, 100, 103, 103, - 103, 101, 101, 101, 128, 128, 128, 106, 106, 114, - 114, 115, 115, 107, 107, 116, 116, 116, 116, 116, - 116, 116, 116, 116, 116, 117, 117, 117, 118, 118, - 119, 119, 119, 126, 126, 123, 123, 129, 129, 129, - 129, 129, 130, 130, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 192, 192, 192, 192, 192, 192, - 192, 192, 192, 192, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, - 120, 120, 120, 120, 120, 120, 120, 121, 121, 121, + 64, 64, 64, 189, 189, 66, 66, 66, 85, 85, + 86, 86, 87, 87, 88, 88, 89, 90, 90, 90, + 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, + 92, 92, 92, 63, 63, 63, 63, 63, 63, 93, + 93, 93, 93, 97, 97, 75, 75, 77, 77, 76, + 78, 190, 190, 98, 98, 103, 99, 99, 101, 101, + 104, 104, 104, 102, 102, 102, 129, 129, 129, 107, + 107, 115, 115, 116, 116, 108, 108, 117, 117, 117, + 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, + 119, 119, 120, 120, 120, 127, 127, 124, 124, 130, + 130, 130, 130, 130, 131, 131, 193, 193, 193, 193, + 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, + 193, 193, 193, 193, 193, 193, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, @@ -2250,77 +2242,86 @@ var yyR1 = [...]uint8{ 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, - 121, 121, 121, 121, 121, 193, 193, 193, 198, 199, - 134, 135, 135, 135, + 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 122, 122, 122, + 122, 122, 122, 122, 122, 122, 122, 194, 194, 194, + 199, 200, 135, 136, 136, 136, } var yyR2 = [...]int8{ 0, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 6, 7, 5, 10, - 1, 3, 1, 3, 8, 8, 6, 1, 1, 8, - 8, 7, 6, 1, 1, 1, 3, 0, 4, 3, - 3, 4, 4, 5, 4, 1, 3, 3, 2, 2, - 2, 2, 2, 1, 1, 1, 1, 1, 2, 8, - 4, 6, 5, 5, 5, 0, 2, 1, 0, 2, - 1, 3, 3, 4, 4, 1, 3, 3, 8, 1, - 3, 3, 1, 1, 1, 1, 1, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, - 2, 1, 2, 2, 2, 1, 4, 4, 2, 2, - 3, 3, 3, 3, 1, 1, 1, 1, 1, 6, - 6, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 3, 0, 3, 0, 5, 0, 3, 5, 0, 1, - 0, 1, 0, 1, 2, 0, 2, 2, 2, 2, - 2, 2, 0, 3, 0, 1, 0, 3, 3, 0, - 2, 2, 0, 2, 1, 2, 1, 0, 2, 5, - 4, 1, 2, 2, 3, 2, 0, 1, 2, 3, - 3, 2, 2, 1, 1, 1, 3, 2, 0, 1, - 3, 1, 2, 3, 1, 1, 1, 6, 7, 7, - 12, 7, 7, 7, 4, 5, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 7, 1, 3, - 8, 8, 5, 4, 6, 5, 4, 4, 3, 2, - 3, 4, 4, 4, 4, 4, 4, 4, 4, 3, - 3, 3, 3, 4, 4, 3, 4, 6, 4, 4, - 2, 4, 2, 2, 2, 2, 3, 1, 1, 0, - 1, 0, 1, 0, 2, 2, 0, 2, 2, 1, - 1, 0, 1, 1, 2, 1, 1, 2, 1, 1, - 2, 2, 2, 2, 2, 3, 4, 4, 7, 1, - 1, 1, 1, 1, 1, 2, 4, 1, 3, 0, - 2, 0, 2, 1, 2, 2, 0, 1, 1, 0, - 1, 0, 1, 0, 1, 1, 3, 1, 2, 3, - 5, 0, 1, 2, 1, 1, 1, 1, 1, 0, - 2, 1, 3, 1, 1, 1, 3, 3, 3, 7, - 1, 3, 1, 3, 4, 4, 4, 3, 2, 4, - 0, 1, 0, 2, 0, 1, 0, 1, 2, 1, - 1, 2, 2, 1, 2, 3, 2, 3, 2, 2, - 2, 1, 1, 3, 0, 5, 5, 5, 0, 2, - 1, 3, 3, 2, 3, 1, 2, 0, 3, 1, - 1, 3, 3, 4, 4, 4, 5, 5, 3, 4, - 5, 6, 2, 1, 2, 1, 2, 1, 2, 1, - 1, 1, 1, 1, 1, 1, 0, 2, 1, 1, - 1, 3, 1, 3, 1, 1, 1, 1, 3, 3, + 1, 3, 1, 3, 8, 8, 6, 1, 1, 10, + 9, 9, 8, 7, 1, 1, 1, 3, 0, 4, + 3, 3, 4, 4, 5, 4, 1, 3, 3, 2, + 2, 2, 2, 2, 1, 1, 1, 1, 1, 2, + 8, 4, 6, 5, 5, 5, 0, 2, 1, 0, + 2, 1, 3, 3, 4, 4, 1, 3, 3, 8, + 1, 3, 3, 1, 1, 1, 1, 1, 2, 1, + 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, + 2, 2, 1, 2, 2, 2, 1, 4, 4, 2, + 2, 3, 3, 3, 3, 1, 1, 1, 1, 1, + 6, 6, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 3, 0, 3, 0, 5, 0, 3, 5, 0, + 1, 0, 1, 0, 1, 2, 0, 2, 2, 2, + 2, 2, 2, 0, 3, 0, 1, 0, 3, 3, + 0, 2, 2, 0, 2, 1, 2, 1, 0, 2, + 5, 4, 1, 2, 2, 3, 2, 0, 1, 2, + 3, 3, 2, 2, 1, 1, 1, 3, 2, 0, + 1, 3, 1, 2, 3, 1, 1, 1, 6, 7, + 7, 12, 7, 7, 7, 4, 5, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 7, 1, + 3, 8, 8, 5, 4, 6, 5, 4, 4, 3, + 2, 3, 4, 4, 4, 4, 4, 4, 4, 4, + 3, 3, 3, 3, 4, 4, 3, 4, 6, 4, + 4, 2, 4, 2, 2, 2, 2, 3, 1, 1, + 0, 1, 0, 1, 0, 2, 2, 0, 2, 2, + 1, 1, 0, 1, 1, 2, 1, 1, 2, 1, + 1, 2, 2, 2, 2, 2, 3, 4, 4, 7, + 1, 1, 1, 1, 1, 1, 2, 4, 1, 3, + 0, 2, 0, 2, 1, 2, 2, 0, 1, 1, + 0, 1, 0, 1, 0, 1, 1, 3, 1, 2, + 3, 5, 0, 1, 2, 1, 1, 1, 1, 1, + 0, 2, 2, 1, 3, 1, 1, 1, 3, 3, + 3, 7, 1, 3, 1, 3, 4, 4, 4, 3, + 2, 4, 0, 1, 0, 2, 0, 1, 0, 1, + 2, 1, 1, 2, 2, 1, 2, 3, 2, 3, + 2, 2, 2, 1, 1, 3, 0, 5, 5, 5, + 0, 2, 1, 3, 3, 2, 3, 1, 2, 0, + 3, 1, 1, 3, 3, 4, 4, 4, 5, 5, + 3, 4, 5, 6, 2, 1, 2, 1, 2, 1, + 2, 1, 1, 1, 1, 1, 1, 1, 0, 2, + 1, 1, 1, 3, 1, 3, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 2, 2, 2, 2, 2, 2, 1, - 1, 1, 1, 1, 1, 2, 3, 4, 5, 6, - 4, 4, 6, 6, 6, 6, 8, 8, 6, 8, - 8, 9, 7, 5, 4, 2, 2, 2, 2, 2, - 2, 2, 2, 0, 2, 4, 4, 4, 4, 0, - 3, 4, 7, 3, 1, 1, 2, 3, 3, 1, - 2, 2, 1, 2, 1, 2, 2, 1, 2, 4, - 0, 1, 0, 2, 1, 2, 4, 0, 2, 1, - 1, 1, 1, 3, 5, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 1, 1, 2, 1, 2, 2, 0, 3, 0, 2, - 0, 3, 1, 3, 2, 0, 1, 1, 3, 3, - 3, 3, 0, 2, 2, 4, 4, 4, 0, 2, - 4, 2, 1, 3, 5, 4, 6, 1, 3, 3, - 5, 0, 5, 1, 3, 1, 2, 3, 1, 0, - 2, 1, 3, 3, 1, 3, 3, 3, 3, 3, - 3, 1, 2, 1, 1, 1, 1, 1, 1, 0, - 2, 0, 3, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, - 0, 1, 1, 0, 2, 1, 1, 1, 1, 1, + 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, + 2, 1, 1, 1, 1, 1, 1, 2, 3, 4, + 5, 6, 4, 4, 6, 6, 6, 6, 8, 8, + 6, 8, 8, 9, 7, 5, 4, 2, 2, 2, + 2, 2, 2, 2, 2, 0, 2, 4, 4, 4, + 4, 0, 3, 4, 7, 3, 1, 1, 2, 3, + 3, 1, 2, 2, 1, 2, 1, 2, 2, 1, + 2, 4, 0, 1, 0, 2, 1, 2, 4, 0, + 2, 1, 1, 1, 1, 3, 5, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 2, 1, 1, 2, 1, 2, 2, 0, 3, + 0, 2, 0, 3, 1, 3, 2, 0, 1, 1, + 3, 3, 3, 3, 0, 2, 2, 4, 4, 4, + 0, 2, 4, 2, 1, 3, 5, 4, 6, 1, + 3, 3, 5, 0, 5, 1, 3, 1, 2, 3, + 1, 0, 2, 1, 3, 3, 1, 3, 3, 3, + 3, 3, 3, 1, 2, 1, 1, 1, 1, 1, + 1, 0, 2, 0, 3, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, + 1, 1, 0, 1, 1, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -2343,19 +2344,19 @@ var yyR2 = [...]int8{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 1, 1, + 1, 1, 0, 0, 1, 1, } var yyChk = [...]int16{ - -1000, -196, -1, -2, -6, -7, -8, -9, -10, -11, + -1000, -197, -1, -2, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -17, -18, -19, -21, -22, -23, -20, -24, -25, -26, -3, -4, 6, 7, -30, 9, 10, 30, -16, 140, 141, 143, 142, 168, 144, 161, 52, 180, 181, 183, 184, 25, 162, 163, 166, 167, - 185, 186, 187, -198, 8, 266, 56, -197, 282, -86, - 15, -29, 5, -27, -201, -27, -27, -27, -27, -27, - -169, 56, -119, 149, 98, 176, 258, 146, 147, 153, - -122, 64, 60, -121, 274, 180, 194, 188, 214, 206, + 185, 186, 187, -199, 8, 266, 56, -198, 282, -87, + 15, -29, 5, -27, -202, -27, -27, -27, -27, -27, + -170, 56, -120, 149, 98, 176, 258, 146, 147, 153, + -123, 64, 60, -122, 274, 180, 194, 188, 214, 206, 204, 207, 244, 71, 183, 254, 164, 203, 199, 197, 27, 219, 279, 198, 159, 158, 220, 224, 245, 192, 193, 248, 218, 160, 32, 276, 37, 172, 249, 222, @@ -2365,22 +2366,22 @@ var yyChk = [...]int16{ 40, 231, 190, 157, 181, 178, 210, 173, 201, 202, 215, 189, 211, 182, 175, 168, 255, 232, 280, 208, 205, 179, 177, 236, 237, 238, 239, 277, 251, 233, - -107, 149, 151, 147, 147, 148, 149, 258, 146, 147, - -54, -129, 64, 65, 63, 60, -121, 149, 176, 147, - 135, 207, 140, 234, 148, 32, 174, -138, -140, 147, - 182, -109, 177, 236, 237, 238, 239, 60, 246, 245, - 247, 240, -129, 182, -134, -134, -134, -134, -134, 186, - -129, 60, -2, -90, 17, 16, -5, -3, -198, 6, - 20, 21, -33, 42, 43, -28, -39, 126, -40, -129, - -59, 100, -64, 29, 64, 63, 60, -121, 23, -66, - -60, -77, -78, -79, 135, 136, 124, 125, 132, 101, - -194, -195, -69, -67, -68, -70, -63, 76, 77, -75, - -198, -122, 59, 46, 47, 267, 268, 269, 270, 273, + -108, 149, 151, 147, 147, 148, 149, 258, 146, 147, + -55, -130, 64, 65, 63, 60, -122, 149, 176, 147, + 135, 207, 140, 234, 148, 32, 174, -139, -141, 147, + 182, -110, 177, 236, 237, 238, 239, 60, 246, 245, + 247, 240, -130, 182, -135, -135, -135, -135, -135, 186, + -130, 60, -2, -91, 17, 16, -5, -3, -199, 6, + 20, 21, -33, 42, 43, -28, -39, 126, -40, -130, + -60, 100, -65, 29, 64, 63, 60, -122, 23, -67, + -61, -78, -79, -80, 135, 136, 124, 125, 132, 101, + -195, -196, -70, -68, -69, -71, -64, 76, 77, -76, + -199, -123, 59, 46, 47, 267, 268, 269, 270, 273, 271, 103, 36, 257, 265, 264, 263, 261, 262, 259, 260, 152, 258, 130, 266, 62, 72, 66, 67, 68, - 69, 75, 61, 73, -107, -42, -43, -44, -45, -56, - -78, -198, -54, 11, -49, -54, -98, -100, -139, -137, - 182, -103, -122, 247, 246, 245, -123, -101, -120, 244, + 69, 75, 61, 73, -108, -43, -45, -46, -47, -57, + -79, -199, -55, 11, -44, -57, -99, -101, -140, -138, + 182, -104, -123, 247, 246, 245, -124, -102, -121, 244, 207, 243, 145, 99, 22, 24, 229, 102, 135, 16, 103, 134, 267, 140, 50, 259, 260, 257, 269, 270, 258, 234, 29, 10, 25, 162, 21, 128, 142, 106, @@ -2390,250 +2391,252 @@ var yyChk = [...]int16{ 130, 51, 38, 100, 75, 54, 98, 15, 49, 118, 143, 266, 47, 146, 6, 272, 30, 161, 45, 147, 235, 105, 150, 76, 5, 153, 9, 52, 55, 263, - 264, 265, 36, 104, 12, -170, -165, 60, 148, -54, - 266, -122, -115, 152, -115, -115, 147, -54, -54, -114, - 152, 60, -114, -114, -114, -54, 137, -54, 60, 30, - 258, 60, 174, 147, 175, 149, -135, -198, -123, -122, - -135, -135, -135, 178, 179, 178, 179, -135, 248, -110, - 241, 54, -135, -129, 11, 22, -198, 55, -199, 58, - -91, 19, 31, -40, 20, -129, -87, -88, -40, -86, - -2, -27, 38, -31, 21, 70, 11, -125, 99, 98, - 115, -124, 22, -127, 63, 64, 65, -122, 137, -40, - -61, 119, 100, 116, 117, 118, 102, 121, 120, 131, + 264, 265, 36, 104, 12, -171, -166, 60, 148, -55, + 266, -123, -116, 152, -116, -116, 147, -55, -55, -115, + 152, 60, -115, -115, -115, -55, 137, -55, 60, 30, + 258, 60, 174, 147, 175, 149, -136, -199, -124, -123, + -136, -136, -136, 178, 179, 178, 179, -136, 248, -111, + 241, 54, -136, -130, 11, 22, -199, 55, -200, 58, + -92, 19, 31, -40, 20, -130, -88, -89, -40, -87, + -2, -27, 38, -31, 21, 70, 11, -126, 99, 98, + 115, -125, 22, -128, 63, 64, 65, -123, 137, -40, + -62, 119, 100, 116, 117, 118, 102, 121, 120, 131, 124, 125, 126, 127, 128, 129, 130, 122, 123, 134, - 108, 109, 110, 111, 112, 113, 114, -108, -198, -78, - -198, 138, 139, -64, 29, -64, -64, -64, -64, -64, - -188, 74, -2, -73, -40, -198, -198, 63, -64, -198, - -198, -198, -198, -198, -198, -198, -198, -82, -40, -198, - -202, -198, -202, -202, -202, -202, -202, -202, -202, -198, - -198, -198, -198, -55, 26, -54, 30, 57, -50, -52, - -51, -53, 44, 48, 50, 45, 46, 47, 51, -133, - 22, -42, -198, -132, 170, -131, 22, -129, -54, -49, - -200, 57, 11, 55, 57, 57, -98, -100, 182, -99, - -104, 248, 250, 150, 108, -128, -122, -193, 29, 64, - 63, 65, 30, 58, 57, -143, -146, -148, -147, -149, - -150, -144, -145, 204, 205, 135, 208, 210, 211, 212, + 108, 109, 110, 111, 112, 113, 114, -109, -199, -79, + -199, 138, 139, -65, 29, -65, -65, -65, -65, -65, + -189, 74, -2, -74, -40, -199, -199, 63, -65, -199, + -199, -199, -199, -199, -199, -199, -199, -83, -40, -199, + -203, -199, -203, -203, -203, -203, -203, -203, -203, -199, + -199, -199, -199, -56, 26, -55, 30, 57, -51, -53, + -52, -54, 44, 48, 50, 45, 46, 47, 51, -134, + 22, -43, -199, -133, 170, -132, 22, -130, -57, -44, + -201, 57, 11, 55, 57, 57, -99, -101, 182, -100, + -105, 248, 250, 150, 108, -129, -123, -194, 29, 64, + 63, 65, 30, 58, 57, -144, -147, -149, -148, -150, + -151, -145, -146, 204, 205, 135, 208, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 30, 164, 201, 202, 203, 97, 220, 221, 222, 223, 224, 225, 226, 227, 206, 188, 189, 190, 191, 192, 193, 194, 196, - 197, 198, 199, 200, 60, -135, 149, -186, 55, 60, - 100, 60, -54, -54, -135, 150, -54, 23, 54, -54, - 60, 60, -130, -129, -120, -135, -135, -135, -135, -135, - -135, -135, -135, -135, -135, -135, -135, 249, -112, 235, - 242, -54, -190, -3, -7, -9, -8, 60, -193, 64, - -190, -142, -143, -191, -129, 9, 119, 57, 18, 18, - 137, 57, -89, 24, 25, -90, -199, -33, -65, -122, - 66, 69, -32, 45, -54, -40, -40, -71, 75, 100, - 76, 77, -124, 126, -130, -123, -120, 64, -64, -72, - -75, -78, 74, 119, 116, 117, 118, 102, -64, -64, - -64, -64, -64, -64, -64, -64, -64, -64, -64, -64, - -64, -64, -64, -64, -136, 60, -193, 60, -63, 63, - 64, -63, 74, -199, 57, -199, -2, -38, 21, -37, - -39, -192, 78, 79, 80, 81, 82, 83, 84, 85, + 197, 198, 199, 200, 60, -136, 149, -187, 55, 60, + 100, 60, -55, -55, -136, 150, -55, 23, 54, -55, + 60, 60, -131, -130, -121, -136, -136, -136, -136, -136, + -136, -136, -136, -136, -136, -136, -136, 249, -113, 235, + 242, -55, -191, -3, -7, -9, -8, 60, -194, 64, + -191, -143, -144, -192, -130, 9, 119, 57, 18, 18, + 137, 57, -90, 24, 25, -91, -200, -33, -66, -123, + 66, 69, -32, 45, -55, -40, -40, -72, 75, 100, + 76, 77, -125, 126, -131, -124, -121, 64, -65, -73, + -76, -79, 74, 119, 116, 117, 118, 102, -65, -65, + -65, -65, -65, -65, -65, -65, -65, -65, -65, -65, + -65, -65, -65, -65, -137, 60, -194, 60, -64, 63, + 64, -64, 74, -200, 57, -200, -2, -38, 21, -37, + -39, -193, 78, 79, 80, 81, 82, 83, 84, 85, 97, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, -37, -37, -40, -40, -79, -122, -129, -79, - -37, -31, -80, -81, 104, -79, -199, -37, -38, -37, - -37, -94, 29, 170, -54, -97, -102, -79, -43, -44, - -44, -43, -44, 44, 44, 44, 49, 44, 49, 44, - -51, -129, -199, -57, 52, 151, 53, -198, -131, -94, - 55, -42, -54, -103, -64, -99, 57, 249, 251, 252, - -64, 54, -40, -156, 134, -171, -172, -173, -123, -193, - 66, -165, -166, -174, 154, 157, 153, -167, 148, 28, - -161, 75, 100, -157, 232, -151, 56, -151, -151, -151, - -151, -155, 207, -155, -155, -155, 56, 56, -151, -151, - -151, -159, 56, -159, -159, -160, 56, -160, -126, 55, - -54, -184, 277, -185, 60, -135, 23, -135, -116, 145, - 142, 143, -181, 141, 229, 207, 71, 29, 15, 267, - 170, 280, 60, 171, -54, -54, -135, -111, 11, 119, - 57, -199, 57, 40, -40, -40, -40, -130, -88, 33, - 33, -91, -106, 19, 11, 36, 36, -37, 75, 76, - 77, 137, -198, -72, -64, -64, -64, -64, -36, 165, - -36, 99, -199, -40, -199, -199, -37, 57, -199, -199, - 57, 55, 22, 57, 11, 137, 57, 11, -199, -37, - -83, -81, 106, -40, -199, -199, -199, -199, -199, -62, - 30, 36, -2, -198, 36, -198, -58, 57, 12, 108, - -47, -46, 54, 55, -48, 54, -46, 44, 44, 148, - 148, 148, -95, -122, -58, -42, -58, -104, -105, 253, - 250, 256, 60, -193, 57, -173, 108, 56, 28, -167, - -167, 60, 60, -152, 29, 75, -158, 233, 66, -155, - -155, -156, 30, -156, -156, -156, -164, -193, -164, 66, - 66, 54, -122, -135, -183, -182, -123, -134, -187, 176, - 155, 156, 159, 158, 60, 148, 28, 154, 157, 170, - 153, -187, 176, -117, -118, 150, 22, 148, 28, 170, - -135, -113, 116, 12, -129, -129, -143, 22, -129, 41, - 137, 34, 35, 34, 35, -54, -41, 11, 126, -123, - -38, -36, -36, 99, -64, -64, -199, -39, -141, 135, - 204, 164, 203, 199, 218, 209, 231, 201, 232, 205, - -136, -141, -64, -64, -123, -64, -64, 274, -86, 107, - -40, 105, -96, 54, -97, -74, -76, -75, -198, -2, - -92, -127, -95, -86, -102, -40, -40, -40, 56, -40, - -198, -198, -198, -199, 57, -86, -58, 250, 254, 255, - -172, -173, -176, -175, -122, 60, 60, -154, 54, -193, - 66, 67, 75, 257, 72, 58, -156, -156, 60, 135, - 58, 57, 58, 57, 58, 57, -54, 57, 108, -134, - -122, -134, -122, -54, -134, -122, -193, -40, -190, -58, - -42, -199, -64, -199, -151, -151, -151, -160, -151, 193, - -151, 193, -198, -199, -199, -199, 57, 19, -199, 57, - 19, -198, -35, 272, -40, -189, 281, 27, -96, 57, - -199, -199, -199, 57, 137, -199, -90, -93, -122, -93, - -93, -93, -132, -122, -90, 58, 57, -151, -162, 229, - 9, -155, -193, -155, 66, 66, -135, -182, -173, 56, - 26, -84, 13, -155, 60, 66, -64, -64, -64, -64, - -64, -199, -193, -37, 28, -76, 36, -2, -198, -127, - -127, 57, 58, -199, -199, -199, -57, -178, -177, 55, - 160, 71, -175, -163, 154, 28, 153, 257, -156, -156, - 58, 58, -93, -198, -85, 14, 16, -199, -199, -199, - -199, -199, -34, 119, 277, 9, -74, -2, 137, -122, - -177, 60, -168, 108, -193, -153, 71, 28, 28, 58, - -179, -180, 170, -40, -73, -199, 275, 51, 278, -97, - -199, -127, 66, -193, -186, -199, 57, -122, 41, 276, - 279, -184, -180, 36, 41, 172, 277, 173, 278, -198, - 279, -64, 169, -199, -199, + 95, 96, -37, -37, -40, -40, -80, -123, -130, -80, + -37, -31, -81, -82, 104, -80, -200, -37, -38, -37, + -37, -95, 29, 170, -55, -98, -103, -80, -45, -46, + -46, -45, -46, 44, 44, 44, 49, 44, 49, 44, + -52, -130, -200, -58, 52, 151, 53, -199, -132, -95, + 55, -43, -57, -104, -65, -100, 57, 249, 251, 252, + -65, 54, -40, -157, 134, -172, -173, -174, -124, -194, + 66, -166, -167, -175, 154, 157, 153, -168, 148, 28, + -162, 75, 100, -158, 232, -152, 56, -152, -152, -152, + -152, -156, 207, -156, -156, -156, 56, 56, -152, -152, + -152, -160, 56, -160, -160, -161, 56, -161, -127, 55, + -55, -185, 277, -186, 60, -136, 23, -136, -117, 145, + 142, 143, -182, 141, 229, 207, 71, 29, 15, 267, + 170, 280, 60, 171, -55, -55, -136, -112, 11, 119, + 57, -200, 57, 40, -40, -40, -40, -131, -89, 33, + 33, -92, -107, 19, 11, 36, 36, -37, 75, 76, + 77, 137, -199, -73, -65, -65, -65, -65, -36, 165, + -36, 99, -200, -40, -200, -200, -37, 57, -200, -200, + 57, 55, 22, 57, 11, 137, 57, 11, -200, -37, + -84, -82, 106, -40, -200, -200, -200, -200, -200, -63, + 30, 36, -2, -199, 36, -199, -42, -59, 57, 11, + 12, 108, -49, -48, 54, 55, -50, 54, -48, 44, + 44, 148, 148, 148, -96, -123, -59, -43, -59, -105, + -106, 253, 250, 256, 60, -194, 57, -174, 108, 56, + 28, -168, -168, 60, 60, -153, 29, 75, -159, 233, + 66, -156, -156, -157, 30, -157, -157, -157, -165, -194, + -165, 66, 66, 54, -123, -136, -184, -183, -124, -135, + -188, 176, 155, 156, 159, 158, 60, 148, 28, 154, + 157, 170, 153, -188, 176, -118, -119, 150, 22, 148, + 28, 170, -136, -114, 116, 12, -130, -130, -144, 22, + -130, 41, 137, 34, 35, 34, 35, -55, -41, 11, + 126, -124, -38, -36, -36, 99, -65, -65, -200, -39, + -142, 135, 204, 164, 203, 199, 218, 209, 231, 201, + 232, 205, -137, -142, -65, -65, -124, -65, -65, 274, + -87, 107, -40, 105, -97, 54, -98, -75, -77, -76, + -199, -2, -93, -128, -96, -59, -87, -103, -43, -40, + -40, -40, 56, -40, -199, -199, -199, -200, 57, -87, + -59, -190, 281, 250, 254, 255, -173, -174, -177, -176, + -123, 60, 60, -155, 54, -194, 66, 67, 75, 257, + 72, 58, -157, -157, 60, 135, 58, 57, 58, 57, + 58, 57, -55, 57, 108, -135, -123, -135, -123, -55, + -135, -123, -194, -40, -191, -59, -43, -200, -65, -200, + -152, -152, -152, -161, -152, 193, -152, 193, -199, -200, + -200, -200, 57, 19, -200, 57, 19, -199, -35, 272, + -40, -190, 27, -97, 57, -200, -200, -200, 57, 137, + -200, -87, -91, -94, -123, -94, -94, -94, -133, -123, + -91, -190, -37, 58, 57, -152, -163, 229, 9, -156, + -194, -156, 66, 66, -136, -183, -174, 56, 26, -85, + 13, -156, 60, 66, -65, -65, -65, -65, -65, -200, + -194, 28, -77, 36, -2, -199, -128, -128, -91, -190, + 57, 58, -200, -200, -200, -58, -190, -179, -178, 55, + 160, 71, -176, -164, 154, 28, 153, 257, -157, -157, + 58, 58, -94, -199, -86, 14, 16, -200, -200, -200, + -200, -200, -34, 119, 277, 9, -75, -2, 137, -190, + -123, -178, 60, -169, 108, -194, -154, 71, 28, 28, + 58, -180, -181, 170, -40, -74, -200, 275, 51, 278, + -98, -200, -128, 66, -194, -187, -200, 57, -123, 41, + 276, 279, -185, -181, 36, 41, 172, 277, 173, 278, + -199, 279, -65, 169, -200, -200, } var yyDef = [...]int16{ 0, -2, 2, -2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 560, 0, 309, 309, 309, 309, - 309, 309, 0, 640, 623, 0, 0, 0, 0, -2, - 285, 286, 0, 288, 289, 870, 870, 870, 870, 870, - 0, 0, 0, 0, 37, 38, 868, 1, 3, 572, - 0, 0, 313, 316, 311, 0, 623, 0, 0, 0, - 68, 0, 0, 855, 0, 856, 621, 621, 621, 641, - 642, 535, 536, 537, 767, 768, 769, 770, 771, 772, - 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, - 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, - 793, 794, 795, 796, 797, 798, 799, 800, 801, 802, - 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, - 813, 814, 815, 816, 817, 818, 819, 820, 821, 822, - 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, - 833, 834, 835, 836, 837, 838, 839, 840, 841, 842, - 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, - 853, 854, 857, 858, 859, 860, 861, 862, 863, 864, - 0, 0, 624, 0, 619, 0, 619, 619, 619, 0, - 239, 382, 647, 648, 649, 650, 651, 855, 856, 0, - 0, 0, 0, 871, 871, 871, 871, 0, 0, 871, - 0, 271, 260, 262, 263, 264, 265, 871, 282, 283, - 280, 270, 284, 287, 290, 291, 292, 293, 294, 0, - 0, 305, 30, 578, 0, 0, 560, 32, 0, 309, - 314, 315, 319, 317, 318, 310, 0, 327, 331, 0, - 390, 0, 395, -2, -2, -2, -2, -2, 0, 434, - 435, 436, 437, 530, 0, 0, 0, 0, 0, 0, - 459, 460, 461, 462, 463, 464, 531, 399, 400, 598, - 0, 532, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 520, 0, 493, 493, 493, 493, 493, 493, 493, - 493, 0, 0, 0, 0, 540, 541, 542, 543, 544, - 545, 546, 547, 548, 0, 0, 341, 343, 344, 345, - 364, 0, 366, 0, 0, 45, 49, 50, 0, 64, - 846, 604, 645, -2, -2, -2, 0, 0, 646, -2, - 774, -2, 674, 675, 676, 677, 678, 679, 680, 681, - 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, - 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, - 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, - 712, 713, 714, 715, 716, 717, 718, 719, 720, 721, - 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, - 732, 733, 734, 735, 736, 737, 738, 739, 740, 741, - 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, - 752, 753, 754, 755, 756, 757, 758, 759, 760, 761, - 762, 763, 764, 765, 766, 0, 85, 0, 0, 871, - 0, 75, 0, 0, 0, 0, 0, 871, 0, 0, - 0, 0, 0, 0, 0, 238, 0, 240, 871, 871, - 871, 871, 871, 871, 871, 871, 249, 872, 873, 645, - 250, 251, 252, 871, 871, 871, 871, 255, 0, 0, - 272, 0, 266, 295, 0, 0, 0, 0, 31, 869, - 25, 0, 0, 573, 574, 0, 561, 562, 565, 572, - 30, 316, 0, 321, 320, 312, 0, 328, 0, 0, - 0, 332, 0, 338, 334, 335, 336, 337, 0, 393, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 419, 420, 421, 422, 423, 424, 425, 396, 0, 412, - 0, 0, 0, 453, 550, 454, 455, 456, 457, 458, - 549, 551, 30, 0, 432, 0, 323, -2, 0, 0, - 0, 0, 0, 0, 0, 0, 319, 0, 521, 0, - 485, 0, 486, 487, 488, 489, 490, 491, 492, 0, - 323, 0, 0, 47, 0, 381, 0, 0, 0, 0, - 0, 0, 370, 0, 0, 373, 0, 0, 0, 0, - 365, 0, 0, 384, 819, 367, 0, 369, -2, 0, - 0, 0, 43, 44, 0, 0, 51, 52, 0, 54, - 55, 0, 0, 0, 0, 169, 614, 615, 616, 535, - 865, 867, 612, 198, 0, 152, 148, 92, 93, 94, - 95, 141, 98, 141, 141, 141, 141, 166, 166, 166, - 166, 124, 125, 126, 127, 128, 0, 0, 111, 141, - 141, 141, 115, 131, 132, 133, 134, 135, 136, 137, - 138, 96, 99, 100, 101, 102, 103, 104, 105, 143, - 143, 143, 145, 145, 643, 70, 0, 78, 0, 871, - 0, 871, 83, 0, 214, 0, 233, 620, 0, 871, - 236, 237, 383, 652, 653, 241, 242, 243, 244, 245, - 246, 247, 248, 253, 258, 254, 259, 256, 273, 267, - 268, 261, 296, 299, 300, 301, 302, 303, 304, 866, - 297, 0, 89, 306, 307, 579, 0, 0, 0, 0, - 0, 0, 564, 566, 567, 578, 33, 319, 0, 553, - 0, 0, 0, 322, 28, 391, 392, 394, 413, 0, - 415, 417, 333, 329, 0, 533, -2, -2, 401, 402, - 428, 429, 430, 0, 0, 0, 0, 0, 426, 426, - 408, 0, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 452, 504, 505, 0, 450, 538, - 539, 451, 552, 431, 0, 597, 30, 0, 0, 324, - 325, 466, 654, 655, 656, 657, 658, 659, 660, 661, - 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, - 672, 673, 0, 0, 0, 0, 0, 532, 0, 0, - 0, 0, 527, 524, 0, 0, 494, 0, 0, 0, - 0, 0, 0, 0, 380, 388, 601, 0, 342, 360, - 362, 0, 357, 371, 372, 374, 0, 376, 0, 378, - 379, 346, 347, 348, 0, 0, 0, 0, 368, 388, - 0, 388, 46, 605, 607, 53, 0, 0, 58, 59, - 606, 608, 609, 610, 0, 84, 199, 201, 204, 205, - 206, 86, 87, 0, 0, 0, 0, 0, 193, 194, - 155, 153, 0, 150, 149, 97, 0, 166, 166, 118, - 119, 169, 0, 169, 169, 169, 0, 0, 112, 113, - 114, 106, 0, 107, 108, 109, 0, 110, 0, 0, - 871, 72, 0, 76, 77, 73, 622, 74, 870, 0, - 0, 635, 215, 625, 626, 627, 628, 629, 630, 631, - 632, 633, 634, 0, 232, 871, 235, 276, 0, 0, - 0, 0, 0, 0, 575, 576, 577, 0, 563, 0, - 0, 26, 0, 617, 618, 554, 555, 339, 414, 416, - 418, 0, 323, 403, 426, 426, 409, 0, 404, 0, - 405, 0, 398, 433, -2, 467, 0, 0, 470, 471, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 560, - 0, 525, 0, 0, 484, 495, 496, 497, 498, 591, - 0, 0, -2, 0, 36, 0, 560, 0, 0, 0, - 354, 361, 0, 0, 355, 0, 356, 375, 377, 0, - 0, 0, 0, 352, 560, 388, 42, 56, 57, 0, - 0, 63, 170, 171, 0, 202, 0, 0, 188, 0, - 0, 191, 192, 162, 0, 154, 91, 151, 0, 169, - 169, 120, 0, 121, 122, 123, 0, 139, 0, 0, - 0, 0, 644, 71, 79, 80, 0, 207, 870, 0, - 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, - 226, 870, 0, 0, 870, 636, 637, 638, 639, 0, - 234, 257, 0, 0, 274, 275, 90, 0, 308, 580, - 0, 570, 571, 568, 569, 27, 388, 0, 330, 534, - 0, 406, 407, 0, 427, 410, 468, 326, 0, 141, - 141, 509, 141, 145, 512, 141, 514, 141, 517, 0, - 0, 0, 0, 0, 533, 0, 0, 0, 522, 483, - 528, 0, 599, 0, 591, 581, 593, 595, 0, 30, - 0, 587, 0, 572, 602, 389, 603, 358, 0, 363, - 0, 0, 0, 366, 0, 572, 41, 60, 61, 62, - 200, 203, 0, 195, 141, 189, 190, 164, 0, 156, - 157, 158, 159, 160, 161, 142, 116, 117, 167, 168, - 166, 0, 166, 0, 146, 0, 871, 0, 0, 208, - 0, 209, 211, 212, 213, 0, 277, 278, 298, 556, - 340, 469, 411, 472, 506, 166, 510, 511, 513, 515, - 516, 518, 0, 474, 473, 475, 0, 0, 478, 0, - 0, 0, 0, 0, 526, 34, 0, 0, 35, 0, - 596, -2, 0, 0, 0, 48, 39, 0, 350, 0, - 0, 0, 384, 353, 40, 180, 0, 197, 172, 165, - 0, 169, 140, 169, 0, 0, 69, 81, 82, 0, - 0, 558, 0, 507, 508, 0, 0, 0, 0, 0, - 499, 482, 523, 600, 0, 594, 0, -2, 0, 589, - 588, 0, 359, 385, 386, 387, 349, 179, 181, 0, - 186, 0, 196, 177, 0, 174, 176, 163, 129, 130, - 144, 147, 0, 0, 29, 0, 0, 519, 476, 477, - 479, 480, 0, 0, 0, 0, 584, 30, 0, 351, - 182, 183, 0, 187, 185, 88, 0, 173, 175, 75, - 0, 228, 0, 559, 557, 481, 0, 0, 0, 592, - -2, 590, 184, 178, 78, 227, 0, 0, 500, 0, - 503, 210, 229, 0, 501, 0, 0, 0, 0, 0, - 502, 0, 0, 230, 231, + 21, 22, 23, 24, 562, 0, 310, 310, 310, 310, + 310, 310, 0, 642, 625, 0, 0, 0, 0, -2, + 286, 287, 0, 289, 290, 872, 872, 872, 872, 872, + 0, 0, 0, 0, 37, 38, 870, 1, 3, 574, + 0, 0, 314, 317, 312, 0, 625, 0, 0, 0, + 69, 0, 0, 857, 0, 858, 623, 623, 623, 643, + 644, 537, 538, 539, 769, 770, 771, 772, 773, 774, + 775, 776, 777, 778, 779, 780, 781, 782, 783, 784, + 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, + 795, 796, 797, 798, 799, 800, 801, 802, 803, 804, + 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, + 815, 816, 817, 818, 819, 820, 821, 822, 823, 824, + 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, + 835, 836, 837, 838, 839, 840, 841, 842, 843, 844, + 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, + 855, 856, 859, 860, 861, 862, 863, 864, 865, 866, + 0, 0, 626, 0, 621, 0, 621, 621, 621, 0, + 240, 384, 649, 650, 651, 652, 653, 857, 858, 0, + 0, 0, 0, 873, 873, 873, 873, 0, 0, 873, + 0, 272, 261, 263, 264, 265, 266, 873, 283, 284, + 281, 271, 285, 288, 291, 292, 293, 294, 295, 0, + 0, 306, 30, 580, 0, 0, 562, 32, 0, 310, + 315, 316, 320, 318, 319, 311, 0, 328, 332, 0, + 392, 0, 397, -2, -2, -2, -2, -2, 0, 436, + 437, 438, 439, 532, 0, 0, 0, 0, 0, 0, + 461, 462, 463, 464, 465, 466, 533, 401, 402, 600, + 0, 534, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 522, 0, 495, 495, 495, 495, 495, 495, 495, + 495, 0, 0, 0, 0, 542, 543, 544, 545, 546, + 547, 548, 549, 550, 0, 0, 343, 345, 346, 347, + 366, 0, 368, 0, 0, 46, 50, 51, 0, 65, + 848, 606, 647, -2, -2, -2, 0, 0, 648, -2, + 776, -2, 676, 677, 678, 679, 680, 681, 682, 683, + 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, + 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, + 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, + 714, 715, 716, 717, 718, 719, 720, 721, 722, 723, + 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, + 734, 735, 736, 737, 738, 739, 740, 741, 742, 743, + 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, + 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, + 764, 765, 766, 767, 768, 0, 86, 0, 0, 873, + 0, 76, 0, 0, 0, 0, 0, 873, 0, 0, + 0, 0, 0, 0, 0, 239, 0, 241, 873, 873, + 873, 873, 873, 873, 873, 873, 250, 874, 875, 647, + 251, 252, 253, 873, 873, 873, 873, 256, 0, 0, + 273, 0, 267, 296, 0, 0, 0, 0, 31, 871, + 25, 0, 0, 575, 576, 0, 563, 564, 567, 574, + 30, 317, 0, 322, 321, 313, 0, 329, 0, 0, + 0, 333, 0, 339, 335, 336, 337, 338, 0, 395, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 421, 422, 423, 424, 425, 426, 427, 398, 0, 414, + 0, 0, 0, 455, 552, 456, 457, 458, 459, 460, + 551, 553, 30, 0, 434, 0, 324, -2, 0, 0, + 0, 0, 0, 0, 0, 0, 320, 0, 523, 0, + 487, 0, 488, 489, 490, 491, 492, 493, 494, 0, + 324, 0, 0, 48, 0, 383, 0, 0, 0, 0, + 0, 0, 372, 0, 0, 375, 0, 0, 0, 0, + 367, 0, 0, 386, 821, 369, 0, 371, -2, 0, + 0, 0, 44, 45, 0, 0, 52, 53, 0, 55, + 56, 0, 0, 0, 0, 170, 616, 617, 618, 537, + 867, 869, 614, 199, 0, 153, 149, 93, 94, 95, + 96, 142, 99, 142, 142, 142, 142, 167, 167, 167, + 167, 125, 126, 127, 128, 129, 0, 0, 112, 142, + 142, 142, 116, 132, 133, 134, 135, 136, 137, 138, + 139, 97, 100, 101, 102, 103, 104, 105, 106, 144, + 144, 144, 146, 146, 645, 71, 0, 79, 0, 873, + 0, 873, 84, 0, 215, 0, 234, 622, 0, 873, + 237, 238, 385, 654, 655, 242, 243, 244, 245, 246, + 247, 248, 249, 254, 259, 255, 260, 257, 274, 268, + 269, 262, 297, 300, 301, 302, 303, 304, 305, 868, + 298, 0, 90, 307, 308, 581, 0, 0, 0, 0, + 0, 0, 566, 568, 569, 580, 33, 320, 0, 555, + 0, 0, 0, 323, 28, 393, 394, 396, 415, 0, + 417, 419, 334, 330, 0, 535, -2, -2, 403, 404, + 430, 431, 432, 0, 0, 0, 0, 0, 428, 428, + 410, 0, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 454, 506, 507, 0, 452, 540, + 541, 453, 554, 433, 0, 599, 30, 0, 0, 325, + 326, 468, 656, 657, 658, 659, 660, 661, 662, 663, + 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, + 674, 675, 0, 0, 0, 0, 0, 534, 0, 0, + 0, 0, 529, 526, 0, 0, 496, 0, 0, 0, + 0, 0, 0, 0, 382, 390, 603, 0, 344, 362, + 364, 0, 359, 373, 374, 376, 0, 378, 0, 380, + 381, 348, 349, 350, 0, 0, 0, 0, 370, 390, + 0, 390, 47, 607, 609, 54, 0, 0, 59, 60, + 608, 610, 611, 612, 0, 85, 200, 202, 205, 206, + 207, 87, 88, 0, 0, 0, 0, 0, 194, 195, + 156, 154, 0, 151, 150, 98, 0, 167, 167, 119, + 120, 170, 0, 170, 170, 170, 0, 0, 113, 114, + 115, 107, 0, 108, 109, 110, 0, 111, 0, 0, + 873, 73, 0, 77, 78, 74, 624, 75, 872, 0, + 0, 637, 216, 627, 628, 629, 630, 631, 632, 633, + 634, 635, 636, 0, 233, 873, 236, 277, 0, 0, + 0, 0, 0, 0, 577, 578, 579, 0, 565, 0, + 0, 26, 0, 619, 620, 556, 557, 340, 416, 418, + 420, 0, 324, 405, 428, 428, 411, 0, 406, 0, + 407, 0, 400, 435, -2, 469, 0, 0, 472, 473, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 562, + 0, 527, 0, 0, 486, 497, 498, 499, 500, 593, + 0, 0, -2, 0, 36, 0, 390, 562, 0, 0, + 0, 0, 356, 363, 0, 0, 357, 0, 358, 377, + 379, 0, 0, 0, 0, 354, 562, 390, 601, 57, + 58, 0, 0, 64, 171, 172, 0, 203, 0, 0, + 189, 0, 0, 192, 193, 163, 0, 155, 92, 152, + 0, 170, 170, 121, 0, 122, 123, 124, 0, 140, + 0, 0, 0, 0, 646, 72, 80, 81, 0, 208, + 872, 0, 217, 218, 219, 220, 221, 222, 223, 224, + 225, 226, 227, 872, 0, 0, 872, 638, 639, 640, + 641, 0, 235, 258, 0, 0, 275, 276, 91, 0, + 309, 582, 0, 572, 573, 570, 571, 27, 390, 0, + 331, 536, 0, 408, 409, 0, 429, 412, 470, 327, + 0, 142, 142, 511, 142, 146, 514, 142, 516, 142, + 519, 0, 0, 0, 0, 0, 535, 0, 0, 0, + 524, 485, 530, 0, 601, 0, 593, 583, 595, 597, + 0, 30, 0, 589, 0, 562, 574, 604, 342, 391, + 605, 360, 0, 365, 0, 0, 0, 368, 0, 574, + 601, 43, 0, 61, 62, 63, 201, 204, 0, 196, + 142, 190, 191, 165, 0, 157, 158, 159, 160, 161, + 162, 143, 117, 118, 168, 169, 167, 0, 167, 0, + 147, 0, 873, 0, 0, 209, 0, 210, 212, 213, + 214, 0, 278, 279, 299, 558, 341, 471, 413, 474, + 508, 167, 512, 513, 515, 517, 518, 520, 0, 476, + 475, 477, 0, 0, 480, 0, 0, 0, 0, 0, + 528, 34, 0, 35, 0, 598, -2, 0, 0, 0, + 49, 574, 601, 0, 352, 0, 0, 0, 386, 355, + 601, 42, 602, 181, 0, 198, 173, 166, 0, 170, + 141, 170, 0, 0, 70, 82, 83, 0, 0, 560, + 0, 509, 510, 0, 0, 0, 0, 0, 501, 484, + 525, 0, 596, 0, -2, 0, 591, 590, 601, 40, + 0, 361, 387, 388, 389, 351, 41, 180, 182, 0, + 187, 0, 197, 178, 0, 175, 177, 164, 130, 131, + 145, 148, 0, 0, 29, 0, 0, 521, 478, 479, + 481, 482, 0, 0, 0, 0, 586, 30, 0, 39, + 353, 183, 184, 0, 188, 186, 89, 0, 174, 176, + 76, 0, 229, 0, 561, 559, 483, 0, 0, 0, + 594, -2, 592, 185, 179, 79, 228, 0, 0, 502, + 0, 505, 211, 230, 0, 503, 0, 0, 0, 0, + 0, 504, 0, 0, 231, 232, } var yyTok1 = [...]int16{ @@ -3025,29 +3028,29 @@ yydefault: case 1: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:339 +//line sql.y:338 { setParseTree(yylex, yyDollar[1].statement) } case 2: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:344 +//line sql.y:343 { } case 3: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:345 +//line sql.y:344 { } case 4: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:349 +//line sql.y:348 { yyVAL.statement = yyDollar[1].selStmt } case 25: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:375 +//line sql.y:374 { sel := yyDollar[1].selStmt.(*Select) sel.OrderBy = yyDollar[2].orderBy @@ -3057,55 +3060,55 @@ yydefault: } case 26: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:383 +//line sql.y:382 { yyVAL.selStmt = &Union{Type: yyDollar[2].str, Left: yyDollar[1].selStmt, Right: yyDollar[3].selStmt, OrderBy: yyDollar[4].orderBy, Limit: yyDollar[5].limit, Lock: yyDollar[6].str} } case 27: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:387 +//line sql.y:386 { yyVAL.selStmt = &Select{Comments: Comments(yyDollar[2].bytes2), Cache: yyDollar[3].str, SelectExprs: SelectExprs{Nextval{Expr: yyDollar[5].expr}}, From: TableExprs{&AliasedTableExpr{Expr: yyDollar[7].tableName}}} } case 28: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:393 +//line sql.y:392 { yyVAL.statement = &Stream{Comments: Comments(yyDollar[2].bytes2), SelectExpr: yyDollar[3].selectExpr, Table: yyDollar[5].tableName} } case 29: yyDollar = yyS[yypt-10 : yypt+1] -//line sql.y:400 +//line sql.y:399 { yyVAL.selStmt = &Select{Comments: Comments(yyDollar[2].bytes2), Cache: yyDollar[3].str, Distinct: yyDollar[4].str, Hints: yyDollar[5].str, SelectExprs: yyDollar[6].selectExprs, From: yyDollar[7].tableExprs, Where: NewWhere(WhereStr, yyDollar[8].expr), GroupBy: GroupBy(yyDollar[9].exprs), Having: NewWhere(HavingStr, yyDollar[10].expr)} } case 30: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:406 +//line sql.y:405 { yyVAL.selStmt = yyDollar[1].selStmt } case 31: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:410 +//line sql.y:409 { yyVAL.selStmt = &ParenSelect{Select: yyDollar[2].selStmt} } case 32: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:416 +//line sql.y:415 { yyVAL.selStmt = yyDollar[1].selStmt } case 33: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:420 +//line sql.y:419 { yyVAL.selStmt = &ParenSelect{Select: yyDollar[2].selStmt} } case 34: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:427 +//line sql.y:426 { // insert_data returns a *Insert pre-filled with Columns & Values ins := yyDollar[6].ins @@ -3120,7 +3123,7 @@ yydefault: } case 35: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:440 +//line sql.y:439 { cols := make(Columns, 0, len(yyDollar[7].updateExprs)) vals := make(ValTuple, 0, len(yyDollar[8].updateExprs)) @@ -3132,217 +3135,233 @@ yydefault: } case 36: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:450 +//line sql.y:449 { yyVAL.statement = &Insert{Action: yyDollar[1].str, Comments: Comments(yyDollar[2].bytes2), Ignore: yyDollar[3].str, Table: yyDollar[4].tableName, Default: true} } case 37: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:456 +//line sql.y:455 { yyVAL.str = InsertStr } case 38: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:460 +//line sql.y:459 { yyVAL.str = ReplaceStr } case 39: - yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:466 + yyDollar = yyS[yypt-10 : yypt+1] +//line sql.y:465 { - yyVAL.statement = &Update{Comments: Comments(yyDollar[2].bytes2), TableExprs: yyDollar[3].tableExprs, Exprs: yyDollar[5].updateExprs, Where: NewWhere(WhereStr, yyDollar[6].expr), OrderBy: yyDollar[7].orderBy, Limit: yyDollar[8].limit} + if yylex.(*Tokenizer).IsMySQL() { + yylex.Error("MySQL dialect doesn't support FROM TableExpr with update statement") + return 1 + } + + yyVAL.statement = &Update{Comments: Comments(yyDollar[2].bytes2), TableExprs: yyDollar[3].tableExprs, Exprs: yyDollar[5].updateExprs, From: yyDollar[6].tableExprs, Where: NewWhere(WhereStr, yyDollar[7].expr), OrderBy: yyDollar[8].orderBy, Limit: yyDollar[9].limit, Returning: yyDollar[10].returning} } case 40: - yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:472 + yyDollar = yyS[yypt-9 : yypt+1] +//line sql.y:474 { - yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), TableExprs: TableExprs{&AliasedTableExpr{Expr: yyDollar[4].tableName}}, Partitions: yyDollar[5].partitions, Where: NewWhere(WhereStr, yyDollar[6].expr), OrderBy: yyDollar[7].orderBy, Limit: yyDollar[8].limit} + if yylex.(*Tokenizer).IsMySQL() && len(yyDollar[9].returning) != 0 { + yylex.Error("MySQL/MariaDB dialect doesn't support returning with update statement") + return 1 + } + + yyVAL.statement = &Update{Comments: Comments(yyDollar[2].bytes2), TableExprs: yyDollar[3].tableExprs, Exprs: yyDollar[5].updateExprs, Where: NewWhere(WhereStr, yyDollar[6].expr), OrderBy: yyDollar[7].orderBy, Limit: yyDollar[8].limit, Returning: yyDollar[9].returning} } case 41: - yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:476 + yyDollar = yyS[yypt-9 : yypt+1] +//line sql.y:485 { - yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[4].tableNames, TableExprs: yyDollar[6].tableExprs, Where: NewWhere(WhereStr, yyDollar[7].expr)} + yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), TableExprs: TableExprs{yyDollar[4].aliasedTableName}, Partitions: yyDollar[5].partitions, Where: NewWhere(WhereStr, yyDollar[6].expr), OrderBy: yyDollar[7].orderBy, Limit: yyDollar[8].limit, Returning: yyDollar[9].returning} } case 42: - yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:480 + yyDollar = yyS[yypt-8 : yypt+1] +//line sql.y:489 { - yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[3].tableNames, TableExprs: yyDollar[5].tableExprs, Where: NewWhere(WhereStr, yyDollar[6].expr)} + yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[4].tableExprs, TableExprs: yyDollar[6].tableExprs, Where: NewWhere(WhereStr, yyDollar[7].expr), Returning: yyDollar[8].returning} } case 43: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:485 + yyDollar = yyS[yypt-7 : yypt+1] +//line sql.y:493 { + yyVAL.statement = &Delete{Comments: Comments(yyDollar[2].bytes2), Targets: yyDollar[3].tableExprs, TableExprs: yyDollar[5].tableExprs, Where: NewWhere(WhereStr, yyDollar[6].expr), Returning: yyDollar[7].returning} } case 44: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:486 +//line sql.y:498 { } case 45: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:490 +//line sql.y:499 { - yyVAL.tableNames = TableNames{yyDollar[1].tableName} } case 46: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:494 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:503 { - yyVAL.tableNames = append(yyVAL.tableNames, yyDollar[3].tableName) + yyVAL.tableExprs = TableExprs{yyDollar[1].aliasedTableName} } case 47: + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:507 + { + yyVAL.tableExprs = append(yyVAL.tableExprs, yyDollar[3].aliasedTableName) + } + case 48: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:499 +//line sql.y:512 { yyVAL.partitions = nil } - case 48: + case 49: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:503 +//line sql.y:516 { yyVAL.partitions = yyDollar[3].partitions } - case 49: + case 50: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:509 +//line sql.y:522 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Exprs: yyDollar[3].setExprs} } - case 50: + case 51: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:513 +//line sql.y:526 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Exprs: yyDollar[3].setExprs} } - case 51: + case 52: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:517 +//line sql.y:530 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Scope: yyDollar[3].str, Exprs: yyDollar[4].setExprs} } - case 52: + case 53: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:521 +//line sql.y:534 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Scope: yyDollar[3].str, Exprs: yyDollar[4].setExprs} } - case 53: + case 54: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:525 +//line sql.y:538 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Scope: yyDollar[3].str, Exprs: yyDollar[5].setExprs} } - case 54: + case 55: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:529 +//line sql.y:542 { yyVAL.statement = &Set{Comments: Comments(yyDollar[2].bytes2), Exprs: yyDollar[4].setExprs} } - case 55: + case 56: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:535 +//line sql.y:548 { yyVAL.setExprs = SetExprs{yyDollar[1].setExpr} } - case 56: + case 57: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:539 +//line sql.y:552 { yyVAL.setExprs = append(yyVAL.setExprs, yyDollar[3].setExpr) } - case 57: + case 58: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:545 +//line sql.y:558 { yyVAL.setExpr = yyDollar[3].setExpr } - case 58: + case 59: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:549 +//line sql.y:562 { yyVAL.setExpr = &SetExpr{Name: NewColIdent("tx_read_only"), Expr: NewIntVal([]byte("0"))} } - case 59: + case 60: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:553 +//line sql.y:566 { yyVAL.setExpr = &SetExpr{Name: NewColIdent("tx_read_only"), Expr: NewIntVal([]byte("1"))} } - case 60: + case 61: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:559 +//line sql.y:572 { yyVAL.setExpr = &SetExpr{Name: NewColIdent("tx_isolation"), Expr: NewStrVal([]byte("repeatable read"))} } - case 61: + case 62: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:563 +//line sql.y:576 { yyVAL.setExpr = &SetExpr{Name: NewColIdent("tx_isolation"), Expr: NewStrVal([]byte("read committed"))} } - case 62: + case 63: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:567 +//line sql.y:580 { yyVAL.setExpr = &SetExpr{Name: NewColIdent("tx_isolation"), Expr: NewStrVal([]byte("read uncommitted"))} } - case 63: + case 64: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:571 +//line sql.y:584 { yyVAL.setExpr = &SetExpr{Name: NewColIdent("tx_isolation"), Expr: NewStrVal([]byte("serializable"))} } - case 65: + case 66: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:580 +//line sql.y:593 { yyVAL.str = LocalStr } - case 66: + case 67: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:587 +//line sql.y:600 { yyVAL.str = SessionStr } - case 67: + case 68: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:591 +//line sql.y:604 { yyVAL.str = GlobalStr } - case 68: + case 69: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:597 +//line sql.y:610 { yyDollar[1].ddl.TableSpec = yyDollar[2].TableSpec yyVAL.statement = yyDollar[1].ddl } - case 69: + case 70: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:602 +//line sql.y:615 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[7].tableName, NewName: yyDollar[7].tableName} } - case 70: + case 71: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:607 +//line sql.y:620 { yyVAL.statement = &DDL{Action: CreateStr, NewName: yyDollar[3].tableName.ToViewName()} } - case 71: + case 72: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:611 +//line sql.y:624 { yyVAL.statement = &DDL{Action: CreateStr, NewName: yyDollar[5].tableName.ToViewName()} } - case 72: + case 73: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:615 +//line sql.y:628 { yyVAL.statement = &DDL{Action: CreateVindexStr, VindexSpec: &VindexSpec{ Name: yyDollar[3].colIdent, @@ -3350,104 +3369,104 @@ yydefault: Params: yyDollar[5].vindexParams, }} } - case 73: + case 74: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:623 +//line sql.y:636 { yyVAL.statement = &DBDDL{Action: CreateStr, DBName: string(yyDollar[4].bytes)} } - case 74: + case 75: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:627 +//line sql.y:640 { yyVAL.statement = &DBDDL{Action: CreateStr, DBName: string(yyDollar[4].bytes)} } - case 75: + case 76: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:632 +//line sql.y:645 { yyVAL.colIdent = NewColIdent("") } - case 76: + case 77: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:636 +//line sql.y:649 { yyVAL.colIdent = yyDollar[2].colIdent } - case 77: + case 78: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:642 +//line sql.y:655 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 78: + case 79: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:647 +//line sql.y:660 { var v []VindexParam yyVAL.vindexParams = v } - case 79: + case 80: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:652 +//line sql.y:665 { yyVAL.vindexParams = yyDollar[2].vindexParams } - case 80: + case 81: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:658 +//line sql.y:671 { yyVAL.vindexParams = make([]VindexParam, 0, 4) yyVAL.vindexParams = append(yyVAL.vindexParams, yyDollar[1].vindexParam) } - case 81: + case 82: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:663 +//line sql.y:676 { yyVAL.vindexParams = append(yyVAL.vindexParams, yyDollar[3].vindexParam) } - case 82: + case 83: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:669 +//line sql.y:682 { yyVAL.vindexParam = VindexParam{Key: yyDollar[1].colIdent, Val: yyDollar[3].str} } - case 83: + case 84: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:675 +//line sql.y:688 { yyVAL.ddl = &DDL{Action: CreateStr, NewName: yyDollar[4].tableName} setDDL(yylex, yyVAL.ddl) } - case 84: + case 85: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:682 +//line sql.y:695 { yyVAL.TableSpec = yyDollar[2].TableSpec yyVAL.TableSpec.Options = yyDollar[4].str } - case 85: + case 86: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:689 +//line sql.y:702 { yyVAL.TableSpec = &TableSpec{} yyVAL.TableSpec.AddColumn(yyDollar[1].columnDefinition) } - case 86: + case 87: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:694 +//line sql.y:707 { yyVAL.TableSpec.AddColumn(yyDollar[3].columnDefinition) } - case 87: + case 88: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:698 +//line sql.y:711 { yyVAL.TableSpec.AddIndex(yyDollar[3].indexDefinition) } - case 88: + case 89: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:704 +//line sql.y:717 { yyDollar[2].columnType.NotNull = yyDollar[3].boolVal yyDollar[2].columnType.Default = yyDollar[4].optVal @@ -3457,98 +3476,90 @@ yydefault: yyDollar[2].columnType.Comment = yyDollar[8].optVal yyVAL.columnDefinition = &ColumnDefinition{Name: NewColIdent(string(yyDollar[1].bytes)), Type: yyDollar[2].columnType} } - case 89: + case 90: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:716 +//line sql.y:729 { yyVAL.columnTypes = ColumnTypes{yyDollar[1].columnType} } - case 90: + case 91: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:720 +//line sql.y:733 { yyVAL.columnTypes = append(yyDollar[1].columnTypes, yyDollar[3].columnType) } - case 91: + case 92: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:726 +//line sql.y:739 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Unsigned = yyDollar[2].boolVal yyVAL.columnType.Zerofill = yyDollar[3].boolVal } - case 96: + case 97: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:738 +//line sql.y:751 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } - case 97: + case 98: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:745 +//line sql.y:758 { yyVAL.columnType = yyDollar[1].columnType yyVAL.columnType.Length = yyDollar[2].optVal } - case 98: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:750 - { - yyVAL.columnType = yyDollar[1].columnType - } case 99: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:756 +//line sql.y:763 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + yyVAL.columnType = yyDollar[1].columnType } case 100: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:760 +//line sql.y:769 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 101: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:764 +//line sql.y:773 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 102: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:768 +//line sql.y:777 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 103: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:772 +//line sql.y:781 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 104: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:776 +//line sql.y:785 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 105: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:780 +//line sql.y:789 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 106: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:786 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:793 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} - yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length - yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 107: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:792 +//line sql.y:799 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -3556,7 +3567,7 @@ yydefault: } case 108: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:798 +//line sql.y:805 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -3564,7 +3575,7 @@ yydefault: } case 109: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:804 +//line sql.y:811 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length @@ -3572,620 +3583,628 @@ yydefault: } case 110: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:810 +//line sql.y:817 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 111: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:818 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:823 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + yyVAL.columnType.Length = yyDollar[2].LengthScaleOption.Length + yyVAL.columnType.Scale = yyDollar[2].LengthScaleOption.Scale } case 112: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:822 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:831 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 113: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:826 +//line sql.y:835 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } case 114: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:830 +//line sql.y:839 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } case 115: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:834 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:843 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } case 116: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:840 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:847 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 117: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:844 +//line sql.y:853 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } case 118: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:848 + yyDollar = yyS[yypt-4 : yypt+1] +//line sql.y:857 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: yyDollar[3].str, Collate: yyDollar[4].str} } case 119: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:852 +//line sql.y:861 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } case 120: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:856 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:865 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } case 121: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:860 +//line sql.y:869 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 122: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:864 +//line sql.y:873 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 123: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:868 +//line sql.y:877 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 124: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:872 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:881 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), Charset: yyDollar[2].str, Collate: yyDollar[3].str} } case 125: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:876 +//line sql.y:885 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 126: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:880 +//line sql.y:889 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 127: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:884 +//line sql.y:893 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 128: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:888 +//line sql.y:897 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 129: - yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:892 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:901 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 130: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:897 +//line sql.y:905 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} } case 131: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:903 + yyDollar = yyS[yypt-6 : yypt+1] +//line sql.y:910 { - yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes), EnumValues: yyDollar[3].strs, Charset: yyDollar[5].str, Collate: yyDollar[6].str} } case 132: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:907 +//line sql.y:916 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 133: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:911 +//line sql.y:920 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 134: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:915 +//line sql.y:924 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 135: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:919 +//line sql.y:928 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 136: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:923 +//line sql.y:932 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 137: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:927 +//line sql.y:936 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 138: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:931 +//line sql.y:940 { yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} } case 139: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:937 +//line sql.y:944 + { + yyVAL.columnType = ColumnType{Type: string(yyDollar[1].bytes)} + } + case 140: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:950 { yyVAL.strs = make([]string, 0, 4) yyVAL.strs = append(yyVAL.strs, "'"+string(yyDollar[1].bytes)+"'") } - case 140: + case 141: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:942 +//line sql.y:955 { yyVAL.strs = append(yyDollar[1].strs, "'"+string(yyDollar[3].bytes)+"'") } - case 141: + case 142: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:947 +//line sql.y:960 { yyVAL.optVal = nil } - case 142: + case 143: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:951 +//line sql.y:964 { yyVAL.optVal = NewIntVal(yyDollar[2].bytes) } - case 143: + case 144: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:956 +//line sql.y:969 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 144: + case 145: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:960 +//line sql.y:973 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), Scale: NewIntVal(yyDollar[4].bytes), } } - case 145: + case 146: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:968 +//line sql.y:981 { yyVAL.LengthScaleOption = LengthScaleOption{} } - case 146: + case 147: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:972 +//line sql.y:985 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), } } - case 147: + case 148: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:978 +//line sql.y:991 { yyVAL.LengthScaleOption = LengthScaleOption{ Length: NewIntVal(yyDollar[2].bytes), Scale: NewIntVal(yyDollar[4].bytes), } } - case 148: + case 149: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:986 +//line sql.y:999 { yyVAL.boolVal = BoolVal(false) } - case 149: + case 150: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:990 +//line sql.y:1003 { yyVAL.boolVal = BoolVal(true) } - case 150: + case 151: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:995 +//line sql.y:1008 { yyVAL.boolVal = BoolVal(false) } - case 151: + case 152: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:999 +//line sql.y:1012 { yyVAL.boolVal = BoolVal(true) } - case 152: + case 153: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1005 +//line sql.y:1018 { yyVAL.boolVal = BoolVal(false) } - case 153: + case 154: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1009 +//line sql.y:1022 { yyVAL.boolVal = BoolVal(false) } - case 154: + case 155: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1013 +//line sql.y:1026 { yyVAL.boolVal = BoolVal(true) } - case 155: + case 156: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1018 +//line sql.y:1031 { yyVAL.optVal = nil } - case 156: + case 157: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1022 +//line sql.y:1035 { yyVAL.optVal = NewStrVal(yyDollar[2].bytes) } - case 157: + case 158: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1026 +//line sql.y:1039 { yyVAL.optVal = NewIntVal(yyDollar[2].bytes) } - case 158: + case 159: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1030 +//line sql.y:1043 { yyVAL.optVal = NewFloatVal(yyDollar[2].bytes) } - case 159: + case 160: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1034 +//line sql.y:1047 { yyVAL.optVal = NewValArg(yyDollar[2].bytes) } - case 160: + case 161: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1038 +//line sql.y:1051 { yyVAL.optVal = NewValArg(yyDollar[2].bytes) } - case 161: + case 162: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1042 +//line sql.y:1055 { yyVAL.optVal = NewBitVal(yyDollar[2].bytes) } - case 162: + case 163: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1047 +//line sql.y:1060 { yyVAL.optVal = nil } - case 163: + case 164: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1051 +//line sql.y:1064 { yyVAL.optVal = NewValArg(yyDollar[3].bytes) } - case 164: + case 165: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1056 +//line sql.y:1069 { yyVAL.boolVal = BoolVal(false) } - case 165: + case 166: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1060 +//line sql.y:1073 { yyVAL.boolVal = BoolVal(true) } - case 166: + case 167: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1065 +//line sql.y:1078 { yyVAL.str = "" } - case 167: + case 168: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1069 +//line sql.y:1082 { yyVAL.str = string(yyDollar[3].bytes) } - case 168: + case 169: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1073 +//line sql.y:1086 { yyVAL.str = string(yyDollar[3].bytes) } - case 169: + case 170: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1078 +//line sql.y:1091 { yyVAL.str = "" } - case 170: + case 171: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1082 +//line sql.y:1095 { yyVAL.str = string(yyDollar[2].bytes) } - case 171: + case 172: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1086 +//line sql.y:1099 { yyVAL.str = string(yyDollar[2].bytes) } - case 172: + case 173: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1091 +//line sql.y:1104 { yyVAL.colKeyOpt = colKeyNone } - case 173: + case 174: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1095 +//line sql.y:1108 { yyVAL.colKeyOpt = colKeyPrimary } - case 174: + case 175: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1099 +//line sql.y:1112 { yyVAL.colKeyOpt = colKey } - case 175: + case 176: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1103 +//line sql.y:1116 { yyVAL.colKeyOpt = colKeyUniqueKey } - case 176: + case 177: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1107 +//line sql.y:1120 { yyVAL.colKeyOpt = colKeyUnique } - case 177: + case 178: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1112 +//line sql.y:1125 { yyVAL.optVal = nil } - case 178: + case 179: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1116 +//line sql.y:1129 { yyVAL.optVal = NewStrVal(yyDollar[2].bytes) } - case 179: + case 180: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1122 +//line sql.y:1135 { yyVAL.indexDefinition = &IndexDefinition{Info: yyDollar[1].indexInfo, Columns: yyDollar[3].indexColumns, Options: yyDollar[5].indexOptions} } - case 180: + case 181: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1126 +//line sql.y:1139 { yyVAL.indexDefinition = &IndexDefinition{Info: yyDollar[1].indexInfo, Columns: yyDollar[3].indexColumns} } - case 181: + case 182: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1132 +//line sql.y:1145 { yyVAL.indexOptions = []*IndexOption{yyDollar[1].indexOption} } - case 182: + case 183: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1136 +//line sql.y:1149 { yyVAL.indexOptions = append(yyVAL.indexOptions, yyDollar[2].indexOption) } - case 183: + case 184: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1142 +//line sql.y:1155 { yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Using: string(yyDollar[2].bytes)} } - case 184: + case 185: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1146 +//line sql.y:1159 { // should not be string yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Value: NewIntVal(yyDollar[3].bytes)} } - case 185: + case 186: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1151 +//line sql.y:1164 { yyVAL.indexOption = &IndexOption{Name: string(yyDollar[1].bytes), Value: NewStrVal(yyDollar[2].bytes)} } - case 186: + case 187: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1157 +//line sql.y:1170 { yyVAL.str = "" } - case 187: + case 188: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1161 +//line sql.y:1174 { yyVAL.str = string(yyDollar[1].bytes) } - case 188: + case 189: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1167 +//line sql.y:1180 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].bytes), Name: NewColIdent("PRIMARY"), Primary: true, Unique: true} } - case 189: + case 190: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1171 +//line sql.y:1184 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), Name: NewColIdent(string(yyDollar[3].bytes)), Spatial: true, Unique: false} } - case 190: + case 191: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1175 +//line sql.y:1188 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes) + " " + string(yyDollar[2].str), Name: NewColIdent(string(yyDollar[3].bytes)), Unique: true} } - case 191: + case 192: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1179 +//line sql.y:1192 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].bytes), Name: NewColIdent(string(yyDollar[2].bytes)), Unique: true} } - case 192: + case 193: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1183 +//line sql.y:1196 { yyVAL.indexInfo = &IndexInfo{Type: string(yyDollar[1].str), Name: NewColIdent(string(yyDollar[2].bytes)), Unique: false} } - case 193: + case 194: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1189 +//line sql.y:1202 { yyVAL.str = string(yyDollar[1].bytes) } - case 194: + case 195: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1193 +//line sql.y:1206 { yyVAL.str = string(yyDollar[1].bytes) } - case 195: + case 196: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1199 +//line sql.y:1212 { yyVAL.indexColumns = []*IndexColumn{yyDollar[1].indexColumn} } - case 196: + case 197: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1203 +//line sql.y:1216 { yyVAL.indexColumns = append(yyVAL.indexColumns, yyDollar[3].indexColumn) } - case 197: + case 198: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1209 +//line sql.y:1222 { yyVAL.indexColumn = &IndexColumn{Column: yyDollar[1].colIdent, Length: yyDollar[2].optVal} } - case 198: + case 199: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1214 +//line sql.y:1227 { yyVAL.str = "" } - case 199: + case 200: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1218 +//line sql.y:1231 { yyVAL.str = " " + string(yyDollar[1].str) } - case 200: + case 201: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1222 +//line sql.y:1235 { yyVAL.str = string(yyDollar[1].str) + ", " + string(yyDollar[3].str) } - case 201: + case 202: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1230 +//line sql.y:1243 { yyVAL.str = yyDollar[1].str } - case 202: + case 203: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1234 +//line sql.y:1247 { yyVAL.str = yyDollar[1].str + " " + yyDollar[2].str } - case 203: + case 204: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1238 +//line sql.y:1251 { yyVAL.str = yyDollar[1].str + "=" + yyDollar[3].str } - case 204: + case 205: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1244 +//line sql.y:1257 { yyVAL.str = yyDollar[1].colIdent.String() } - case 205: + case 206: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1249 +//line sql.y:1262 { yyVAL.str = defaultDialect.QuoteHandler().WrapStringLiteral(string(yyDollar[1].bytes)) } - case 206: + case 207: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1253 +//line sql.y:1266 { yyVAL.str = string(yyDollar[1].bytes) } - case 207: + case 208: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1259 +//line sql.y:1272 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName, NewName: yyDollar[4].tableName} } - case 208: + case 209: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1263 +//line sql.y:1276 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName, NewName: yyDollar[4].tableName} } - case 209: + case 210: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1267 +//line sql.y:1280 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName, NewName: yyDollar[4].tableName} } - case 210: + case 211: yyDollar = yyS[yypt-12 : yypt+1] -//line sql.y:1271 +//line sql.y:1284 { yyVAL.statement = &DDL{ Action: AddColVindexStr, @@ -4198,9 +4217,9 @@ yydefault: VindexCols: yyDollar[9].columns, } } - case 211: + case 212: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1284 +//line sql.y:1297 { yyVAL.statement = &DDL{ Action: DropColVindexStr, @@ -4210,71 +4229,71 @@ yydefault: }, } } - case 212: + case 213: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1294 +//line sql.y:1307 { // Change this to a rename statement yyVAL.statement = &DDL{Action: RenameStr, Table: yyDollar[4].tableName, NewName: yyDollar[7].tableName} } - case 213: + case 214: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1299 +//line sql.y:1312 { // Rename an index can just be an alter yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName, NewName: yyDollar[4].tableName} } - case 214: + case 215: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1304 +//line sql.y:1317 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[3].tableName.ToViewName(), NewName: yyDollar[3].tableName.ToViewName()} } - case 215: + case 216: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1308 +//line sql.y:1321 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[4].tableName, PartitionSpec: yyDollar[5].partSpec} } - case 227: + case 228: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1327 +//line sql.y:1340 { yyVAL.partSpec = &PartitionSpec{Action: ReorganizeStr, Name: yyDollar[3].colIdent, Definitions: yyDollar[6].partDefs} } - case 228: + case 229: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1333 +//line sql.y:1346 { yyVAL.partDefs = []*PartitionDefinition{yyDollar[1].partDef} } - case 229: + case 230: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1337 +//line sql.y:1350 { yyVAL.partDefs = append(yyDollar[1].partDefs, yyDollar[3].partDef) } - case 230: + case 231: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:1343 +//line sql.y:1356 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Limit: yyDollar[7].expr} } - case 231: + case 232: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:1347 +//line sql.y:1360 { yyVAL.partDef = &PartitionDefinition{Name: yyDollar[2].colIdent, Maxvalue: true} } - case 232: + case 233: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1353 +//line sql.y:1366 { yyVAL.statement = &DDL{Action: RenameStr, Table: yyDollar[3].tableName, NewName: yyDollar[5].tableName} } - case 233: + case 234: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1359 +//line sql.y:1372 { var exists bool if yyDollar[3].byt != 0 { @@ -4282,16 +4301,16 @@ yydefault: } yyVAL.statement = &DDL{Action: DropStr, Table: yyDollar[4].tableName, IfExists: exists} } - case 234: + case 235: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1367 +//line sql.y:1380 { // Change this to an alter statement yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[5].tableName, NewName: yyDollar[5].tableName} } - case 235: + case 236: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1372 +//line sql.y:1385 { var exists bool if yyDollar[3].byt != 0 { @@ -4299,135 +4318,135 @@ yydefault: } yyVAL.statement = &DDL{Action: DropStr, Table: yyDollar[4].tableName.ToViewName(), IfExists: exists} } - case 236: + case 237: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1380 +//line sql.y:1393 { yyVAL.statement = &DBDDL{Action: DropStr, DBName: string(yyDollar[4].bytes)} } - case 237: + case 238: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1384 +//line sql.y:1397 { yyVAL.statement = &DBDDL{Action: DropStr, DBName: string(yyDollar[4].bytes)} } - case 238: + case 239: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1390 +//line sql.y:1403 { yyVAL.statement = &DDL{Action: TruncateStr, Table: yyDollar[3].tableName} } - case 239: + case 240: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1394 +//line sql.y:1407 { yyVAL.statement = &DDL{Action: TruncateStr, Table: yyDollar[2].tableName} } - case 240: + case 241: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1399 +//line sql.y:1412 { yyVAL.statement = &DDL{Action: AlterStr, Table: yyDollar[3].tableName, NewName: yyDollar[3].tableName} } - case 241: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1405 - { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} - } case 242: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1409 +//line sql.y:1418 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 243: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1413 +//line sql.y:1422 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 244: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1418 +//line sql.y:1426 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 245: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1422 +//line sql.y:1431 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 246: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1426 +//line sql.y:1435 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 247: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1430 +//line sql.y:1439 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 248: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1434 +//line sql.y:1443 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 249: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1438 + yyDollar = yyS[yypt-4 : yypt+1] +//line sql.y:1447 { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes) + " " + string(yyDollar[3].bytes)} } case 250: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1442 +//line sql.y:1451 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 251: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1446 +//line sql.y:1455 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 252: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1450 +//line sql.y:1459 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 253: - yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1454 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:1463 { - yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 254: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1458 +//line sql.y:1467 { yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} } case 255: + yyDollar = yyS[yypt-4 : yypt+1] +//line sql.y:1471 + { + yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} + } + case 256: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1462 +//line sql.y:1475 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 256: + case 257: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1466 +//line sql.y:1479 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 257: + case 258: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:1470 +//line sql.y:1483 { // this is ugly, but I couldn't find a better way for now if yyDollar[4].str == "processlist" { @@ -4437,279 +4456,279 @@ yydefault: yyVAL.statement = &Show{Type: yyDollar[4].str, ShowTablesOpt: showTablesOpt} } } - case 258: + case 259: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1480 +//line sql.y:1493 { yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} } - case 259: + case 260: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1484 +//line sql.y:1497 { yyVAL.statement = &Show{Scope: yyDollar[2].str, Type: string(yyDollar[3].bytes)} } - case 260: + case 261: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1488 +//line sql.y:1501 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } - case 261: + case 262: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1492 +//line sql.y:1505 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes), OnTable: yyDollar[4].tableName} } - case 262: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1496 - { - yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} - } case 263: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1500 +//line sql.y:1509 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 264: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1504 +//line sql.y:1513 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 265: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1508 +//line sql.y:1517 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 266: - yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1518 + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:1521 { yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 267: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1524 + yyDollar = yyS[yypt-3 : yypt+1] +//line sql.y:1531 { - yyVAL.str = string(yyDollar[1].bytes) + yyVAL.statement = &Show{Type: string(yyDollar[2].bytes)} } case 268: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1528 +//line sql.y:1537 { yyVAL.str = string(yyDollar[1].bytes) } case 269: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1534 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:1541 { - yyVAL.str = "" + yyVAL.str = string(yyDollar[1].bytes) } case 270: + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:1547 + { + yyVAL.str = "" + } + case 271: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1538 +//line sql.y:1551 { yyVAL.str = "extended " } - case 271: + case 272: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1544 +//line sql.y:1557 { yyVAL.str = "" } - case 272: + case 273: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1548 +//line sql.y:1561 { yyVAL.str = "full " } - case 273: + case 274: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1554 +//line sql.y:1567 { yyVAL.str = "" } - case 274: + case 275: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1558 +//line sql.y:1571 { yyVAL.str = yyDollar[2].tableIdent.v } - case 275: + case 276: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1562 +//line sql.y:1575 { yyVAL.str = yyDollar[2].tableIdent.v } - case 276: + case 277: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1568 +//line sql.y:1581 { yyVAL.showFilter = nil } - case 277: + case 278: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1572 +//line sql.y:1585 { yyVAL.showFilter = &ShowFilter{Like: string(yyDollar[2].bytes)} } - case 278: + case 279: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1576 +//line sql.y:1589 { yyVAL.showFilter = &ShowFilter{Filter: yyDollar[2].expr} } - case 280: + case 281: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1583 +//line sql.y:1596 { yyVAL.str = LocalStr } - case 281: + case 282: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1589 +//line sql.y:1602 { yyVAL.str = "" } - case 282: + case 283: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1593 +//line sql.y:1606 { yyVAL.str = SessionStr } - case 283: + case 284: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1597 +//line sql.y:1610 { yyVAL.str = GlobalStr } - case 284: + case 285: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1603 +//line sql.y:1616 { yyVAL.statement = &Use{DBName: yyDollar[2].tableIdent} } - case 285: + case 286: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1607 +//line sql.y:1620 { yyVAL.statement = &Use{DBName: TableIdent{v: ""}} } - case 286: + case 287: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1613 +//line sql.y:1626 { yyVAL.statement = &Begin{} } - case 287: + case 288: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1617 +//line sql.y:1630 { yyVAL.statement = &Begin{} } - case 288: + case 289: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1623 +//line sql.y:1636 { yyVAL.statement = &Commit{} } - case 289: + case 290: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1629 +//line sql.y:1642 { yyVAL.statement = &Rollback{} } - case 290: - yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1635 - { - yyVAL.statement = &OtherRead{} - } case 291: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1639 +//line sql.y:1648 { yyVAL.statement = &OtherRead{} } case 292: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1643 +//line sql.y:1652 { yyVAL.statement = &OtherRead{} } case 293: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1647 +//line sql.y:1656 { - yyVAL.statement = &OtherAdmin{} + yyVAL.statement = &OtherRead{} } case 294: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1651 +//line sql.y:1660 { yyVAL.statement = &OtherAdmin{} } case 295: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:1664 + { + yyVAL.statement = &OtherAdmin{} + } + case 296: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1657 +//line sql.y:1670 { yyVAL.statement = &DeallocatePrepare{PreparedStatementName: yyDollar[3].tableIdent} } - case 296: + case 297: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1663 +//line sql.y:1676 { yyVAL.statement = &Prepare{PreparedStatementName: yyDollar[2].tableIdent, PreparedStatementQuery: yyDollar[4].preparedQuery} } - case 297: + case 298: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1667 +//line sql.y:1680 { yyVAL.statement = &Prepare{PreparedStatementName: yyDollar[2].tableIdent, PreparedStatementQuery: yyDollar[4].preparedQuery} } - case 298: + case 299: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1671 +//line sql.y:1684 { yyVAL.statement = &Prepare{PreparedStatementName: yyDollar[2].tableIdent, ColumnTypes: yyDollar[4].columnTypes, PreparedStatementQuery: yyDollar[7].preparedQuery} } - case 299: + case 300: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1677 +//line sql.y:1690 { yyVAL.preparedQuery = yyDollar[1].selStmt.(*Select) } - case 300: + case 301: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1681 +//line sql.y:1694 { yyVAL.preparedQuery = yyDollar[1].statement.(*Insert) } - case 301: + case 302: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1685 +//line sql.y:1698 { yyVAL.preparedQuery = yyDollar[1].statement.(*Delete) } - case 302: + case 303: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1689 +//line sql.y:1702 { yyVAL.preparedQuery = yyDollar[1].statement.(*Update) } - case 303: + case 304: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1693 +//line sql.y:1706 { yyVAL.preparedQuery = NewTableIdent(string(yyDollar[1].bytes)) } - case 304: + case 305: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1697 +//line sql.y:1710 { statement, err := NewPreparedQueryFromString(string(yyDollar[1].bytes)) if statement == nil { @@ -4722,424 +4741,430 @@ yydefault: } yyVAL.preparedQuery = statement } - case 305: + case 306: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1712 +//line sql.y:1725 { yyVAL.statement = &Execute{PreparedStatementName: NewTableIdent(string(yyDollar[2].bytes))} } - case 306: + case 307: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1716 +//line sql.y:1729 { yyVAL.statement = &Execute{PreparedStatementName: NewTableIdent(string(yyDollar[2].bytes)), Using: yyDollar[4].usingInExecuteList} } - case 307: + case 308: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1722 +//line sql.y:1735 { yyVAL.usingInExecuteList = UsingInExecuteList{yyDollar[1].tableIdent} } - case 308: + case 309: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1726 +//line sql.y:1739 { yyVAL.usingInExecuteList = append(yyDollar[1].usingInExecuteList, yyDollar[3].tableIdent) } - case 309: + case 310: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1731 +//line sql.y:1744 { setAllowComments(yylex, true) } - case 310: + case 311: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1735 +//line sql.y:1748 { yyVAL.bytes2 = yyDollar[2].bytes2 setAllowComments(yylex, false) } - case 311: + case 312: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1741 +//line sql.y:1754 { yyVAL.bytes2 = nil } - case 312: + case 313: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1745 +//line sql.y:1758 { yyVAL.bytes2 = append(yyDollar[1].bytes2, yyDollar[2].bytes) } - case 313: + case 314: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1751 +//line sql.y:1764 { yyVAL.str = UnionStr } - case 314: + case 315: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1755 +//line sql.y:1768 { yyVAL.str = UnionAllStr } - case 315: + case 316: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1759 +//line sql.y:1772 { yyVAL.str = UnionDistinctStr } - case 316: + case 317: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1764 +//line sql.y:1777 { yyVAL.str = "" } - case 317: + case 318: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1768 +//line sql.y:1781 { yyVAL.str = SQLNoCacheStr } - case 318: + case 319: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1772 +//line sql.y:1785 { yyVAL.str = SQLCacheStr } - case 319: + case 320: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1777 +//line sql.y:1790 { yyVAL.str = "" } - case 320: + case 321: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1781 +//line sql.y:1794 { yyVAL.str = DistinctStr } - case 321: + case 322: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1786 +//line sql.y:1799 { yyVAL.str = "" } - case 322: + case 323: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1790 +//line sql.y:1803 { yyVAL.str = StraightJoinHint } - case 323: + case 324: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1795 +//line sql.y:1808 { yyVAL.selectExprs = nil } - case 324: + case 325: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1799 +//line sql.y:1812 { yyVAL.selectExprs = yyDollar[1].selectExprs } - case 325: + case 326: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1805 +//line sql.y:1818 { yyVAL.selectExprs = SelectExprs{yyDollar[1].selectExpr} } - case 326: + case 327: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1809 +//line sql.y:1822 { yyVAL.selectExprs = append(yyVAL.selectExprs, yyDollar[3].selectExpr) } - case 327: + case 328: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1815 +//line sql.y:1828 { yyVAL.selectExpr = &StarExpr{} } - case 328: + case 329: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1819 +//line sql.y:1832 { yyVAL.selectExpr = &AliasedExpr{Expr: yyDollar[1].expr, As: yyDollar[2].colIdent} } - case 329: + case 330: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1823 +//line sql.y:1836 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Name: yyDollar[1].tableIdent}} } - case 330: + case 331: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:1827 +//line sql.y:1840 { yyVAL.selectExpr = &StarExpr{TableName: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}} } - case 331: + case 332: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1832 +//line sql.y:1845 { yyVAL.colIdent = ColIdent{} } - case 332: + case 333: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1836 +//line sql.y:1849 { yyVAL.colIdent = yyDollar[1].colIdent } - case 333: + case 334: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1840 +//line sql.y:1853 { yyVAL.colIdent = yyDollar[2].colIdent } - case 334: + case 335: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1846 +//line sql.y:1859 { yyVAL.colIdent = NewColIdentWithQuotes(string(yyDollar[1].bytes), '\'') } - case 335: + case 336: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1850 +//line sql.y:1863 { yyVAL.colIdent = NewColIdentWithQuotes(string(yyDollar[1].bytes), '"') } - case 336: + case 337: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1854 +//line sql.y:1867 { yyVAL.colIdent = NewColIdentWithQuotes(string(yyDollar[1].bytes), '`') } - case 339: + case 340: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1866 +//line sql.y:1879 { yyVAL.tableExprs = TableExprs{&AliasedTableExpr{Expr: TableName{Name: NewTableIdent("dual")}}} } - case 340: + case 341: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1870 +//line sql.y:1883 { yyVAL.tableExprs = yyDollar[2].tableExprs } - case 341: + case 342: + yyDollar = yyS[yypt-2 : yypt+1] +//line sql.y:1889 + { + yyVAL.tableExprs = yyDollar[2].tableExprs + } + case 343: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1876 +//line sql.y:1895 { yyVAL.tableExprs = TableExprs{yyDollar[1].tableExpr} } - case 342: + case 344: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1880 +//line sql.y:1899 { yyVAL.tableExprs = append(yyVAL.tableExprs, yyDollar[3].tableExpr) } - case 345: + case 347: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1890 +//line sql.y:1909 { yyVAL.tableExpr = yyDollar[1].aliasedTableName } - case 346: + case 348: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1894 +//line sql.y:1913 { yyVAL.tableExpr = &AliasedTableExpr{Expr: yyDollar[1].subquery, As: yyDollar[3].tableIdent} } - case 347: + case 349: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1898 +//line sql.y:1917 { yyVAL.tableExpr = &ParenTableExpr{Exprs: yyDollar[2].tableExprs} } - case 348: + case 350: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1904 +//line sql.y:1923 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, As: yyDollar[2].tableIdent, Hints: yyDollar[3].indexHints} } - case 349: + case 351: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:1908 +//line sql.y:1927 { yyVAL.aliasedTableName = &AliasedTableExpr{Expr: yyDollar[1].tableName, Partitions: yyDollar[4].partitions, As: yyDollar[6].tableIdent, Hints: yyDollar[7].indexHints} } - case 350: + case 352: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1914 +//line sql.y:1933 { yyVAL.columns = Columns{yyDollar[1].colIdent} } - case 351: + case 353: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1918 +//line sql.y:1937 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } - case 352: + case 354: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1924 +//line sql.y:1943 { yyVAL.partitions = Partitions{yyDollar[1].colIdent} } - case 353: + case 355: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1928 +//line sql.y:1947 { yyVAL.partitions = append(yyVAL.partitions, yyDollar[3].colIdent) } - case 354: + case 356: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1941 +//line sql.y:1960 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 355: + case 357: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1945 +//line sql.y:1964 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 356: + case 358: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1949 +//line sql.y:1968 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr, Condition: yyDollar[4].joinCondition} } - case 357: + case 359: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:1953 +//line sql.y:1972 { yyVAL.tableExpr = &JoinTableExpr{LeftExpr: yyDollar[1].tableExpr, Join: yyDollar[2].str, RightExpr: yyDollar[3].tableExpr} } - case 358: + case 360: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1959 +//line sql.y:1978 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } - case 359: + case 361: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:1961 +//line sql.y:1980 { yyVAL.joinCondition = JoinCondition{Using: yyDollar[3].columns} } - case 360: + case 362: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1965 +//line sql.y:1984 { yyVAL.joinCondition = JoinCondition{} } - case 361: + case 363: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1967 +//line sql.y:1986 { yyVAL.joinCondition = yyDollar[1].joinCondition } - case 362: + case 364: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1971 +//line sql.y:1990 { yyVAL.joinCondition = JoinCondition{} } - case 363: + case 365: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1973 +//line sql.y:1992 { yyVAL.joinCondition = JoinCondition{On: yyDollar[2].expr} } - case 364: + case 366: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1976 +//line sql.y:1995 { yyVAL.empty = struct{}{} } - case 365: + case 367: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1978 +//line sql.y:1997 { yyVAL.empty = struct{}{} } - case 366: + case 368: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:1981 +//line sql.y:2000 { yyVAL.tableIdent = NewTableIdent("") } - case 367: + case 369: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1985 +//line sql.y:2004 { yyVAL.tableIdent = yyDollar[1].tableIdent } - case 368: + case 370: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:1989 +//line sql.y:2008 { yyVAL.tableIdent = yyDollar[2].tableIdent } - case 370: + case 372: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:1999 +//line sql.y:2018 { yyVAL.str = JoinStr } - case 371: + case 373: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2003 +//line sql.y:2022 { yyVAL.str = JoinStr } - case 372: + case 374: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2007 +//line sql.y:2026 { yyVAL.str = JoinStr } - case 373: + case 375: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2013 +//line sql.y:2032 { yyVAL.str = StraightJoinStr } - case 374: + case 376: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2019 +//line sql.y:2038 { yyVAL.str = LeftJoinStr } - case 375: + case 377: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2023 +//line sql.y:2042 { yyVAL.str = LeftJoinStr } - case 376: + case 378: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2027 +//line sql.y:2046 { yyVAL.str = RightJoinStr } - case 377: + case 379: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2031 +//line sql.y:2050 { yyVAL.str = RightJoinStr } - case 378: + case 380: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2037 +//line sql.y:2056 { yyVAL.str = NaturalJoinStr } - case 379: + case 381: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2041 +//line sql.y:2060 { if yyDollar[2].str == LeftJoinStr { yyVAL.str = NaturalLeftJoinStr @@ -5147,159 +5172,159 @@ yydefault: yyVAL.str = NaturalRightJoinStr } } - case 380: + case 382: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2051 +//line sql.y:2070 { yyVAL.tableName = yyDollar[2].tableName } - case 381: + case 383: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2055 +//line sql.y:2074 { yyVAL.tableName = yyDollar[1].tableName } - case 382: + case 384: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2061 +//line sql.y:2080 { yyVAL.tableName = TableName{Name: yyDollar[1].tableIdent} } - case 383: + case 385: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2065 +//line sql.y:2084 { yyVAL.tableName = TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent} } - case 384: + case 386: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2070 +//line sql.y:2089 { yyVAL.indexHints = nil } - case 385: + case 387: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2074 +//line sql.y:2093 { yyVAL.indexHints = &IndexHints{Type: UseStr, Indexes: yyDollar[4].columns} } - case 386: + case 388: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2078 +//line sql.y:2097 { yyVAL.indexHints = &IndexHints{Type: IgnoreStr, Indexes: yyDollar[4].columns} } - case 387: + case 389: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2082 +//line sql.y:2101 { yyVAL.indexHints = &IndexHints{Type: ForceStr, Indexes: yyDollar[4].columns} } - case 388: + case 390: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2087 +//line sql.y:2106 { yyVAL.expr = nil } - case 389: + case 391: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2091 +//line sql.y:2110 { yyVAL.expr = yyDollar[2].expr } - case 390: + case 392: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2097 +//line sql.y:2116 { yyVAL.expr = yyDollar[1].expr } - case 391: + case 393: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2101 +//line sql.y:2120 { yyVAL.expr = &AndExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 392: + case 394: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2105 +//line sql.y:2124 { yyVAL.expr = &OrExpr{Left: yyDollar[1].expr, Right: yyDollar[3].expr} } - case 393: + case 395: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2109 +//line sql.y:2128 { yyVAL.expr = &NotExpr{Expr: yyDollar[2].expr} } - case 394: + case 396: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2113 +//line sql.y:2132 { yyVAL.expr = &IsExpr{Operator: yyDollar[3].str, Expr: yyDollar[1].expr} } - case 395: + case 397: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2117 +//line sql.y:2136 { yyVAL.expr = yyDollar[1].expr } - case 396: + case 398: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2121 +//line sql.y:2140 { yyVAL.expr = &Default{ColName: yyDollar[2].str} } - case 397: + case 399: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2127 +//line sql.y:2146 { yyVAL.str = "" } - case 398: + case 400: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2131 +//line sql.y:2150 { yyVAL.str = string(yyDollar[2].bytes) } - case 399: + case 401: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2137 +//line sql.y:2156 { yyVAL.boolVal = BoolVal(true) } - case 400: + case 402: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2141 +//line sql.y:2160 { yyVAL.boolVal = BoolVal(false) } - case 401: + case 403: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2147 +//line sql.y:2166 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: yyDollar[2].str, Right: yyDollar[3].expr} } - case 402: + case 404: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2151 +//line sql.y:2170 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: InStr, Right: yyDollar[3].colTuple} } - case 403: + case 405: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2155 +//line sql.y:2174 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotInStr, Right: yyDollar[4].colTuple} } - case 404: + case 406: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2159 +//line sql.y:2178 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: LikeStr, Right: yyDollar[3].expr, Escape: yyDollar[4].expr} } - case 405: + case 407: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2163 +//line sql.y:2182 { if yylex.(*Tokenizer).IsMySQL() { yylex.Error("MySQL dialect doesn't support `ILIKE` statement") @@ -5307,15 +5332,15 @@ yydefault: } yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: ILikeStr, Right: yyDollar[3].expr, Escape: yyDollar[4].expr} } - case 406: + case 408: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2171 +//line sql.y:2190 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotLikeStr, Right: yyDollar[4].expr, Escape: yyDollar[5].expr} } - case 407: + case 409: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2175 +//line sql.y:2194 { if yylex.(*Tokenizer).IsMySQL() { yylex.Error("MySQL dialect doesn't support `ILIKE` statement") @@ -5323,291 +5348,291 @@ yydefault: } yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotILikeStr, Right: yyDollar[4].expr, Escape: yyDollar[5].expr} } - case 408: + case 410: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2183 +//line sql.y:2202 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: RegexpStr, Right: yyDollar[3].expr} } - case 409: + case 411: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2187 +//line sql.y:2206 { yyVAL.expr = &ComparisonExpr{Left: yyDollar[1].expr, Operator: NotRegexpStr, Right: yyDollar[4].expr} } - case 410: + case 412: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2191 +//line sql.y:2210 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: BetweenStr, From: yyDollar[3].expr, To: yyDollar[5].expr} } - case 411: + case 413: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2195 +//line sql.y:2214 { yyVAL.expr = &RangeCond{Left: yyDollar[1].expr, Operator: NotBetweenStr, From: yyDollar[4].expr, To: yyDollar[6].expr} } - case 412: + case 414: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2199 +//line sql.y:2218 { yyVAL.expr = &ExistsExpr{Subquery: yyDollar[2].subquery} } - case 413: + case 415: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2205 +//line sql.y:2224 { yyVAL.str = IsNullStr } - case 414: + case 416: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2209 +//line sql.y:2228 { yyVAL.str = IsNotNullStr } - case 415: + case 417: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2213 +//line sql.y:2232 { yyVAL.str = IsTrueStr } - case 416: + case 418: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2217 +//line sql.y:2236 { yyVAL.str = IsNotTrueStr } - case 417: + case 419: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2221 +//line sql.y:2240 { yyVAL.str = IsFalseStr } - case 418: + case 420: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2225 +//line sql.y:2244 { yyVAL.str = IsNotFalseStr } - case 419: + case 421: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2231 +//line sql.y:2250 { yyVAL.str = EqualStr } - case 420: + case 422: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2235 +//line sql.y:2254 { yyVAL.str = LessThanStr } - case 421: + case 423: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2239 +//line sql.y:2258 { yyVAL.str = GreaterThanStr } - case 422: + case 424: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2243 +//line sql.y:2262 { yyVAL.str = LessEqualStr } - case 423: + case 425: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2247 +//line sql.y:2266 { yyVAL.str = GreaterEqualStr } - case 424: + case 426: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2251 +//line sql.y:2270 { yyVAL.str = NotEqualStr } - case 425: + case 427: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2255 +//line sql.y:2274 { yyVAL.str = NullSafeEqualStr } - case 426: + case 428: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2260 +//line sql.y:2279 { yyVAL.expr = nil } - case 427: + case 429: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2264 +//line sql.y:2283 { yyVAL.expr = yyDollar[2].expr } - case 428: + case 430: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2270 +//line sql.y:2289 { yyVAL.colTuple = yyDollar[1].valTuple } - case 429: + case 431: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2274 +//line sql.y:2293 { yyVAL.colTuple = yyDollar[1].subquery } - case 430: + case 432: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2278 +//line sql.y:2297 { yyVAL.colTuple = ListArg(yyDollar[1].bytes) } - case 431: + case 433: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2284 +//line sql.y:2303 { yyVAL.subquery = &Subquery{yyDollar[2].selStmt} } - case 432: + case 434: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2290 +//line sql.y:2309 { yyVAL.exprs = Exprs{yyDollar[1].expr} } - case 433: + case 435: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2294 +//line sql.y:2313 { yyVAL.exprs = append(yyDollar[1].exprs, yyDollar[3].expr) } - case 434: + case 436: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2300 +//line sql.y:2319 { yyVAL.expr = yyDollar[1].expr } - case 435: + case 437: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2304 +//line sql.y:2323 { yyVAL.expr = yyDollar[1].boolVal } - case 436: + case 438: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2308 +//line sql.y:2327 { yyVAL.expr = yyDollar[1].expr } - case 437: + case 439: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2312 +//line sql.y:2331 { yyVAL.expr = yyDollar[1].subquery } - case 438: + case 440: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2316 +//line sql.y:2335 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitAndStr, Right: yyDollar[3].expr} } - case 439: + case 441: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2320 +//line sql.y:2339 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitOrStr, Right: yyDollar[3].expr} } - case 440: + case 442: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2324 +//line sql.y:2343 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: BitXorStr, Right: yyDollar[3].expr} } - case 441: + case 443: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2328 +//line sql.y:2347 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: PlusStr, Right: yyDollar[3].expr} } - case 442: + case 444: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2332 +//line sql.y:2351 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MinusStr, Right: yyDollar[3].expr} } - case 443: + case 445: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2336 +//line sql.y:2355 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: MultStr, Right: yyDollar[3].expr} } - case 444: + case 446: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2340 +//line sql.y:2359 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: DivStr, Right: yyDollar[3].expr} } - case 445: + case 447: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2344 +//line sql.y:2363 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: IntDivStr, Right: yyDollar[3].expr} } - case 446: + case 448: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2348 +//line sql.y:2367 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } - case 447: + case 449: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2352 +//line sql.y:2371 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ModStr, Right: yyDollar[3].expr} } - case 448: + case 450: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2356 +//line sql.y:2375 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftLeftStr, Right: yyDollar[3].expr} } - case 449: + case 451: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2360 +//line sql.y:2379 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].expr, Operator: ShiftRightStr, Right: yyDollar[3].expr} } - case 450: + case 452: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2364 +//line sql.y:2383 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONExtractOp, Right: yyDollar[3].expr} } - case 451: + case 453: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2368 +//line sql.y:2387 { yyVAL.expr = &BinaryExpr{Left: yyDollar[1].colName, Operator: JSONUnquoteExtractOp, Right: yyDollar[3].expr} } - case 452: + case 454: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2372 +//line sql.y:2391 { yyVAL.expr = &CollateExpr{Expr: yyDollar[1].expr, Charset: yyDollar[3].str} } - case 453: + case 455: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2376 +//line sql.y:2395 { yyVAL.expr = &UnaryExpr{Operator: BinaryStr, Expr: yyDollar[2].expr} } - case 454: + case 456: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2380 +//line sql.y:2399 { yyVAL.expr = &UnaryExpr{Operator: UBinaryStr, Expr: yyDollar[2].expr} } - case 455: + case 457: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2384 +//line sql.y:2403 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { yyVAL.expr = num @@ -5615,9 +5640,9 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UPlusStr, Expr: yyDollar[2].expr} } } - case 456: + case 458: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2392 +//line sql.y:2411 { if num, ok := yyDollar[2].expr.(*SQLVal); ok && num.Type == IntVal { // Handle double negative @@ -5631,33 +5656,33 @@ yydefault: yyVAL.expr = &UnaryExpr{Operator: UMinusStr, Expr: yyDollar[2].expr} } } - case 457: + case 459: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2406 +//line sql.y:2425 { yyVAL.expr = &UnaryExpr{Operator: TildaStr, Expr: yyDollar[2].expr} } - case 458: + case 460: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2410 +//line sql.y:2429 { yyVAL.expr = &UnaryExpr{Operator: BangStr, Expr: yyDollar[2].expr} } - case 459: + case 461: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2414 +//line sql.y:2433 { yyVAL.expr = yyDollar[1].intervalExpr } - case 460: + case 462: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2418 +//line sql.y:2437 { yyVAL.expr = yyDollar[1].intervalExpr } - case 465: + case 467: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2428 +//line sql.y:2447 { if yylex.(*Tokenizer).IsMySQL() { yylex.Error("MySQL don't support PostgreSQL syntax of interval expression") @@ -5666,9 +5691,9 @@ yydefault: // Postgresql type of interval where interval value is string with values+units yyVAL.intervalExpr = &IntervalExpr{Expr: NewStrVal(yyDollar[2].bytes)} } - case 466: + case 468: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2439 +//line sql.y:2458 { if yylex.(*Tokenizer).IsPostgreSQL() { yylex.Error("PostgreSQL don't support Mysql syntax of interval expression") @@ -5680,371 +5705,371 @@ yydefault: // will be non-trivial because of grammar conflicts. yyVAL.intervalExpr = &IntervalExpr{Expr: yyDollar[2].expr, Unit: string(yyDollar[3].bytes)} } - case 467: + case 469: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2457 +//line sql.y:2476 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Exprs: yyDollar[3].selectExprs} } - case 468: + case 470: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2461 +//line sql.y:2480 { yyVAL.expr = &FuncExpr{Name: yyDollar[1].colIdent, Distinct: true, Exprs: yyDollar[4].selectExprs} } - case 469: + case 471: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2465 +//line sql.y:2484 { yyVAL.expr = &FuncExpr{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].colIdent, Exprs: yyDollar[5].selectExprs} } - case 470: + case 472: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2475 +//line sql.y:2494 { yyVAL.expr = &FuncExpr{Name: NewColIdent("left"), Exprs: yyDollar[3].selectExprs} } - case 471: + case 473: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2479 +//line sql.y:2498 { yyVAL.expr = &FuncExpr{Name: NewColIdent("right"), Exprs: yyDollar[3].selectExprs} } - case 472: + case 474: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2483 +//line sql.y:2502 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } - case 473: + case 475: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2487 +//line sql.y:2506 { yyVAL.expr = &ConvertExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].convertType} } - case 474: + case 476: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2491 +//line sql.y:2510 { yyVAL.expr = &ConvertUsingExpr{Expr: yyDollar[3].expr, Type: yyDollar[5].str} } - case 475: + case 477: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2495 +//line sql.y:2514 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: nil} } - case 476: + case 478: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2499 +//line sql.y:2518 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 477: + case 479: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2503 +//line sql.y:2522 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 478: + case 480: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:2507 +//line sql.y:2526 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: nil} } - case 479: + case 481: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2511 +//line sql.y:2530 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 480: + case 482: yyDollar = yyS[yypt-8 : yypt+1] -//line sql.y:2515 +//line sql.y:2534 { yyVAL.expr = &SubstrExpr{Name: yyDollar[3].colName, From: yyDollar[5].expr, To: yyDollar[7].expr} } - case 481: + case 483: yyDollar = yyS[yypt-9 : yypt+1] -//line sql.y:2519 +//line sql.y:2538 { yyVAL.expr = &MatchExpr{Columns: yyDollar[3].selectExprs, Expr: yyDollar[7].expr, Option: yyDollar[8].str} } - case 482: + case 484: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2523 +//line sql.y:2542 { yyVAL.expr = &GroupConcatExpr{Distinct: yyDollar[3].str, Exprs: yyDollar[4].selectExprs, OrderBy: yyDollar[5].orderBy, Separator: yyDollar[6].str} } - case 483: + case 485: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2527 +//line sql.y:2546 { yyVAL.expr = &CaseExpr{Expr: yyDollar[2].expr, Whens: yyDollar[3].whens, Else: yyDollar[4].expr} } - case 484: + case 486: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2531 +//line sql.y:2550 { yyVAL.expr = &ValuesFuncExpr{Name: yyDollar[3].colName} } - case 485: + case 487: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2543 +//line sql.y:2562 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_timestamp")} } - case 486: + case 488: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2547 +//line sql.y:2566 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_timestamp")} } - case 487: + case 489: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2551 +//line sql.y:2570 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_time")} } - case 488: + case 490: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2555 +//line sql.y:2574 { yyVAL.expr = &FuncExpr{Name: NewColIdent("utc_date")} } - case 489: + case 491: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2560 +//line sql.y:2579 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtime")} } - case 490: + case 492: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2565 +//line sql.y:2584 { yyVAL.expr = &FuncExpr{Name: NewColIdent("localtimestamp")} } - case 491: + case 493: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2570 +//line sql.y:2589 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_date")} } - case 492: + case 494: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2575 +//line sql.y:2594 { yyVAL.expr = &FuncExpr{Name: NewColIdent("current_time")} } - case 495: + case 497: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2589 +//line sql.y:2608 { yyVAL.expr = &FuncExpr{Name: NewColIdent("if"), Exprs: yyDollar[3].selectExprs} } - case 496: + case 498: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2593 +//line sql.y:2612 { yyVAL.expr = &FuncExpr{Name: NewColIdent("database"), Exprs: yyDollar[3].selectExprs} } - case 497: + case 499: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2597 +//line sql.y:2616 { yyVAL.expr = &FuncExpr{Name: NewColIdent("mod"), Exprs: yyDollar[3].selectExprs} } - case 498: + case 500: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2601 +//line sql.y:2620 { yyVAL.expr = &FuncExpr{Name: NewColIdent("replace"), Exprs: yyDollar[3].selectExprs} } - case 499: + case 501: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2607 +//line sql.y:2626 { yyVAL.str = "" } - case 500: + case 502: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2611 +//line sql.y:2630 { yyVAL.str = BooleanModeStr } - case 501: + case 503: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2615 +//line sql.y:2634 { yyVAL.str = NaturalLanguageModeStr } - case 502: + case 504: yyDollar = yyS[yypt-7 : yypt+1] -//line sql.y:2619 +//line sql.y:2638 { yyVAL.str = NaturalLanguageModeWithQueryExpansionStr } - case 503: + case 505: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2623 +//line sql.y:2642 { yyVAL.str = QueryExpansionStr } - case 504: + case 506: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2629 +//line sql.y:2648 { yyVAL.str = string(yyDollar[1].bytes) } - case 505: + case 507: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2633 +//line sql.y:2652 { yyVAL.str = string(yyDollar[1].bytes) } - case 506: + case 508: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2639 +//line sql.y:2658 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 507: + case 509: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2643 +//line sql.y:2662 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: yyDollar[3].str, Operator: CharacterSetStr} } - case 508: + case 510: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2647 +//line sql.y:2666 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal, Charset: string(yyDollar[3].bytes)} } - case 509: + case 511: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2651 +//line sql.y:2670 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 510: + case 512: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2655 +//line sql.y:2674 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 511: + case 513: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2659 +//line sql.y:2678 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} yyVAL.convertType.Length = yyDollar[2].LengthScaleOption.Length yyVAL.convertType.Scale = yyDollar[2].LengthScaleOption.Scale } - case 512: + case 514: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2665 +//line sql.y:2684 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 513: + case 515: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2669 +//line sql.y:2688 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 514: + case 516: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2673 +//line sql.y:2692 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 515: + case 517: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2677 +//line sql.y:2696 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 516: + case 518: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2681 +//line sql.y:2700 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes), Length: yyDollar[2].optVal} } - case 517: + case 519: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2685 +//line sql.y:2704 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 518: + case 520: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2689 +//line sql.y:2708 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 519: + case 521: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2693 +//line sql.y:2712 { yyVAL.convertType = &ConvertType{Type: string(yyDollar[1].bytes)} } - case 520: + case 522: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2698 +//line sql.y:2717 { yyVAL.expr = nil } - case 521: + case 523: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2702 +//line sql.y:2721 { yyVAL.expr = yyDollar[1].expr } - case 522: + case 524: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2707 +//line sql.y:2726 { yyVAL.str = string("") } - case 523: + case 525: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2711 +//line sql.y:2730 { yyVAL.str = " separator '" + string(yyDollar[2].bytes) + "'" } - case 524: + case 526: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2717 +//line sql.y:2736 { yyVAL.whens = []*When{yyDollar[1].when} } - case 525: + case 527: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2721 +//line sql.y:2740 { yyVAL.whens = append(yyDollar[1].whens, yyDollar[2].when) } - case 526: + case 528: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2727 +//line sql.y:2746 { yyVAL.when = &When{Cond: yyDollar[2].expr, Val: yyDollar[4].expr} } - case 527: + case 529: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2732 +//line sql.y:2751 { yyVAL.expr = nil } - case 528: + case 530: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2736 +//line sql.y:2755 { yyVAL.expr = yyDollar[2].expr } - case 529: + case 531: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2742 +//line sql.y:2761 { if yylex.(*Tokenizer).IsMySQL() && !yylex.(*Tokenizer).dialect.(*mysql.MySQLDialect).IsModeANSIOn() { yyVAL.expr = NewStrVal(yyDollar[1].bytes) @@ -6052,63 +6077,63 @@ yydefault: yyVAL.expr = &ColName{Name: NewColIdentWithQuotes(string(yyDollar[1].bytes), '"')} } } - case 530: + case 532: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2751 +//line sql.y:2770 { yyVAL.expr = yyDollar[1].colName } - case 531: + case 533: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2755 +//line sql.y:2774 { yyVAL.expr = yyDollar[1].expr } - case 532: + case 534: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2761 +//line sql.y:2780 { yyVAL.colName = &ColName{Name: yyDollar[1].colIdent} } - case 533: + case 535: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2765 +//line sql.y:2784 { yyVAL.colName = &ColName{Qualifier: TableName{Name: yyDollar[1].tableIdent}, Name: yyDollar[3].colIdent} } - case 534: + case 536: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:2769 +//line sql.y:2788 { yyVAL.colName = &ColName{Qualifier: TableName{Qualifier: yyDollar[1].tableIdent, Name: yyDollar[3].tableIdent}, Name: yyDollar[5].colIdent} } - case 535: + case 537: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2775 +//line sql.y:2794 { yyVAL.colIdent = NewColIdentWithQuotes(string(yyDollar[1].bytes), '"') } - case 536: + case 538: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2779 +//line sql.y:2798 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 537: + case 539: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2783 +//line sql.y:2802 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 538: + case 540: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2790 +//line sql.y:2809 { yyVAL.expr = NewStrVal(yyDollar[1].bytes) } - case 539: + case 541: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2794 +//line sql.y:2813 { val, err := NewMySQLDoubleQuotedStrVal(yyDollar[1].bytes) if err != nil { @@ -6117,57 +6142,57 @@ yydefault: } yyVAL.expr = val } - case 540: + case 542: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2803 +//line sql.y:2822 { yyVAL.expr = NewHexVal(yyDollar[1].bytes) } - case 541: + case 543: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2807 +//line sql.y:2826 { yyVAL.expr = NewBitVal(yyDollar[1].bytes) } - case 542: + case 544: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2811 +//line sql.y:2830 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } - case 543: + case 545: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2815 +//line sql.y:2834 { yyVAL.expr = NewFloatVal(yyDollar[1].bytes) } - case 544: + case 546: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2819 +//line sql.y:2838 { yyVAL.expr = NewHexNum(yyDollar[1].bytes) } - case 545: + case 547: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2823 +//line sql.y:2842 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } - case 546: + case 548: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2827 +//line sql.y:2846 { yyVAL.expr = &NullVal{} } - case 547: + case 549: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2831 +//line sql.y:2850 { yyVAL.expr = NewPgEscapeString(yyDollar[1].bytes) } - case 548: + case 550: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2835 +//line sql.y:2854 { result, err := NewDollarExpr(string(yyDollar[1].bytes)) if err != nil { @@ -6176,33 +6201,33 @@ yydefault: } yyVAL.expr = result } - case 549: + case 551: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2844 +//line sql.y:2863 { yyVAL.expr = NewCastVal(yyDollar[1].expr, yyDollar[2].bytes) } - case 550: + case 552: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2848 +//line sql.y:2867 { yyVAL.expr = &Default{} } - case 551: + case 553: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2854 +//line sql.y:2873 { yyVAL.bytes = yyDollar[1].bytes } - case 552: + case 554: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2859 +//line sql.y:2878 { yyVAL.bytes = append(yyDollar[1].bytes, yyDollar[2].bytes...) } - case 553: + case 555: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2867 +//line sql.y:2886 { // TODO(sougou): Deprecate this construct. if yyDollar[1].colIdent.Lowered() != "value" { @@ -6211,129 +6236,129 @@ yydefault: } yyVAL.expr = NewIntVal([]byte("1")) } - case 554: + case 556: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2876 +//line sql.y:2895 { yyVAL.expr = NewIntVal(yyDollar[1].bytes) } - case 555: + case 557: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2880 +//line sql.y:2899 { yyVAL.expr = NewValArg(yyDollar[1].bytes) } - case 556: + case 558: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2885 +//line sql.y:2904 { yyVAL.exprs = nil } - case 557: + case 559: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2889 +//line sql.y:2908 { yyVAL.exprs = yyDollar[3].exprs } - case 558: + case 560: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2894 +//line sql.y:2913 { yyVAL.expr = nil } - case 559: + case 561: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2898 +//line sql.y:2917 { yyVAL.expr = yyDollar[2].expr } - case 560: + case 562: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2903 +//line sql.y:2922 { yyVAL.orderBy = nil } - case 561: + case 563: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2907 +//line sql.y:2926 { yyVAL.orderBy = yyDollar[3].orderBy } - case 562: + case 564: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2913 +//line sql.y:2932 { yyVAL.orderBy = OrderBy{yyDollar[1].order} } - case 563: + case 565: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2917 +//line sql.y:2936 { yyVAL.orderBy = append(yyDollar[1].orderBy, yyDollar[3].order) } - case 564: + case 566: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2923 +//line sql.y:2942 { yyVAL.order = &Order{Expr: yyDollar[1].expr, Direction: yyDollar[2].str} } - case 565: + case 567: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2928 +//line sql.y:2947 { yyVAL.str = AscScr } - case 566: + case 568: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2932 +//line sql.y:2951 { yyVAL.str = AscScr } - case 567: + case 569: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:2936 +//line sql.y:2955 { yyVAL.str = DescScr } - case 568: + case 570: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2940 +//line sql.y:2959 { yyVAL.str = DescNullsFirstScr } - case 569: + case 571: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2944 +//line sql.y:2963 { yyVAL.str = DescNullsLastScr } - case 570: + case 572: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2948 +//line sql.y:2967 { yyVAL.str = AscNullsFirstScr } - case 571: + case 573: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:2952 +//line sql.y:2971 { yyVAL.str = AscNullsLastScr } - case 572: + case 574: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2957 +//line sql.y:2976 { yyVAL.limit = nil } - case 573: + case 575: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2961 +//line sql.y:2980 { yyVAL.limit = &Limit{Rowcount: yyDollar[2].expr, Type: LimitTypeLimitOnly} } - case 574: + case 576: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2965 +//line sql.y:2984 { if yylex.(*Tokenizer).IsMySQL() { yylex.Error("MySQL dialect doesn't allow 'LIMIT ALL' syntax of LIMIT statements") @@ -6341,9 +6366,9 @@ yydefault: } yyVAL.limit = &Limit{Type: LimitTypeLimitAll} } - case 575: + case 577: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2973 +//line sql.y:2992 { if yylex.(*Tokenizer).IsPostgreSQL() { yylex.Error("PostgreSQL dialect doesn't allow 'LIMIT offset, limit' syntax of LIMIT statements") @@ -6351,15 +6376,15 @@ yydefault: } yyVAL.limit = &Limit{Offset: yyDollar[2].expr, Rowcount: yyDollar[4].expr, Type: LimitTypeCommaSeparated} } - case 576: + case 578: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2981 +//line sql.y:3000 { yyVAL.limit = &Limit{Offset: yyDollar[4].expr, Rowcount: yyDollar[2].expr, Type: LimitTypeLimitAndOffset} } - case 577: + case 579: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:2985 +//line sql.y:3004 { if yylex.(*Tokenizer).IsMySQL() { yylex.Error("MySQL dialect doesn't allow 'LIMIT ALL' syntax of LIMIT statements") @@ -6367,131 +6392,131 @@ yydefault: } yyVAL.limit = &Limit{Offset: yyDollar[4].expr, Type: LimitTypeLimitAllAndOffset} } - case 578: + case 580: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:2994 +//line sql.y:3013 { yyVAL.str = "" } - case 579: + case 581: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:2998 +//line sql.y:3017 { yyVAL.str = ForUpdateStr } - case 580: + case 582: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3002 +//line sql.y:3021 { yyVAL.str = ShareModeStr } - case 581: + case 583: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3015 +//line sql.y:3034 { yyVAL.ins = &Insert{Rows: yyDollar[2].values} } - case 582: + case 584: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3019 +//line sql.y:3038 { yyVAL.ins = &Insert{Rows: yyDollar[1].selStmt} } - case 583: + case 585: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3023 +//line sql.y:3042 { // Drop the redundant parenthesis. yyVAL.ins = &Insert{Rows: yyDollar[2].selStmt} } - case 584: + case 586: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3028 +//line sql.y:3047 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].values} } - case 585: + case 587: yyDollar = yyS[yypt-4 : yypt+1] -//line sql.y:3032 +//line sql.y:3051 { yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[4].selStmt} } - case 586: + case 588: yyDollar = yyS[yypt-6 : yypt+1] -//line sql.y:3036 +//line sql.y:3055 { // Drop the redundant parenthesis. yyVAL.ins = &Insert{Columns: yyDollar[2].columns, Rows: yyDollar[5].selStmt} } - case 587: + case 589: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3043 +//line sql.y:3062 { yyVAL.columns = Columns{yyDollar[1].colIdent} } - case 588: + case 590: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3047 +//line sql.y:3066 { yyVAL.columns = Columns{yyDollar[3].colIdent} } - case 589: + case 591: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3051 +//line sql.y:3070 { yyVAL.columns = append(yyVAL.columns, yyDollar[3].colIdent) } - case 590: + case 592: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3055 +//line sql.y:3074 { yyVAL.columns = append(yyVAL.columns, yyDollar[5].colIdent) } - case 591: + case 593: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3060 +//line sql.y:3079 { yyVAL.updateExprs = nil } - case 592: + case 594: yyDollar = yyS[yypt-5 : yypt+1] -//line sql.y:3064 +//line sql.y:3083 { yyVAL.updateExprs = yyDollar[5].updateExprs } - case 593: + case 595: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3070 +//line sql.y:3089 { yyVAL.values = Values{yyDollar[1].valTuple} } - case 594: + case 596: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3074 +//line sql.y:3093 { yyVAL.values = append(yyDollar[1].values, yyDollar[3].valTuple) } - case 595: + case 597: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3080 +//line sql.y:3099 { yyVAL.valTuple = yyDollar[1].valTuple } - case 596: + case 598: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3084 +//line sql.y:3103 { yyVAL.valTuple = ValTuple{} } - case 597: + case 599: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3090 +//line sql.y:3109 { yyVAL.valTuple = ValTuple(yyDollar[2].exprs) } - case 598: + case 600: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3096 +//line sql.y:3115 { if len(yyDollar[1].valTuple) == 1 { yyVAL.expr = &ParenExpr{yyDollar[1].valTuple[0]} @@ -6499,267 +6524,267 @@ yydefault: yyVAL.expr = yyDollar[1].valTuple } } - case 599: + case 601: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3107 +//line sql.y:3126 { yyVAL.returning = nil } - case 600: + case 602: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3112 +//line sql.y:3131 { yyVAL.returning = Returning(yyDollar[2].selectExprs) } - case 601: + case 603: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3119 +//line sql.y:3138 { yyVAL.updateExprs = UpdateExprs{yyDollar[1].updateExpr} } - case 602: + case 604: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3123 +//line sql.y:3142 { yyVAL.updateExprs = append(yyDollar[1].updateExprs, yyDollar[3].updateExpr) } - case 603: + case 605: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3129 +//line sql.y:3148 { yyVAL.updateExpr = &UpdateExpr{Name: yyDollar[1].colName, Expr: yyDollar[3].expr} } - case 604: + case 606: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3135 +//line sql.y:3154 { yyVAL.setExprs = SetExprs{yyDollar[1].setExpr} } - case 605: + case 607: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3139 +//line sql.y:3158 { yyVAL.setExprs = append(yyDollar[1].setExprs, yyDollar[3].setExpr) } - case 606: + case 608: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3145 +//line sql.y:3164 { yyVAL.setExprs = SetExprs{&SetExpr{Name: yyDollar[1].colIdent, Expr: yyDollar[3].expr}} } - case 607: + case 609: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3149 +//line sql.y:3168 { yyVAL.setExprs = append(yyDollar[1].setExprs, &SetExpr{Name: yyDollar[1].setExprs[0].Name, Expr: yyDollar[3].expr}) } - case 608: + case 610: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3155 +//line sql.y:3174 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: NewStrVal([]byte("on"))} } - case 609: + case 611: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3159 +//line sql.y:3178 { yyVAL.setExpr = &SetExpr{Name: yyDollar[1].colIdent, Expr: yyDollar[3].expr} } - case 610: + case 612: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3163 +//line sql.y:3182 { yyVAL.setExpr = &SetExpr{Name: NewColIdent(string(yyDollar[1].bytes)), Expr: yyDollar[2].expr} } - case 612: + case 614: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3170 +//line sql.y:3189 { yyVAL.bytes = []byte("charset") } - case 614: + case 616: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3177 +//line sql.y:3196 { yyVAL.expr = NewStrVal([]byte(yyDollar[1].colIdent.String())) } - case 615: + case 617: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3181 +//line sql.y:3200 { yyVAL.expr = NewStrVal(yyDollar[1].bytes) } - case 616: + case 618: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3185 +//line sql.y:3204 { yyVAL.expr = &Default{} } - case 619: + case 621: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3194 +//line sql.y:3213 { yyVAL.byt = 0 } - case 620: + case 622: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3196 +//line sql.y:3215 { yyVAL.byt = 1 } - case 621: + case 623: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3199 +//line sql.y:3218 { yyVAL.empty = struct{}{} } - case 622: + case 624: yyDollar = yyS[yypt-3 : yypt+1] -//line sql.y:3201 +//line sql.y:3220 { yyVAL.empty = struct{}{} } - case 623: + case 625: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3204 +//line sql.y:3223 { yyVAL.str = "" } - case 624: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3206 - { - yyVAL.str = IgnoreStr - } - case 625: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3210 - { - yyVAL.empty = struct{}{} - } case 626: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3212 +//line sql.y:3225 { - yyVAL.empty = struct{}{} + yyVAL.str = IgnoreStr } case 627: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3214 +//line sql.y:3229 { yyVAL.empty = struct{}{} } case 628: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3216 +//line sql.y:3231 { yyVAL.empty = struct{}{} } case 629: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3218 +//line sql.y:3233 { yyVAL.empty = struct{}{} } case 630: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3220 +//line sql.y:3235 { yyVAL.empty = struct{}{} } case 631: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3222 +//line sql.y:3237 { yyVAL.empty = struct{}{} } case 632: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3224 +//line sql.y:3239 { yyVAL.empty = struct{}{} } case 633: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3226 +//line sql.y:3241 { yyVAL.empty = struct{}{} } case 634: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3228 +//line sql.y:3243 { yyVAL.empty = struct{}{} } case 635: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3231 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3245 { yyVAL.empty = struct{}{} } case 636: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3233 +//line sql.y:3247 { yyVAL.empty = struct{}{} } case 637: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3235 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:3250 { yyVAL.empty = struct{}{} } case 638: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3239 +//line sql.y:3252 { yyVAL.empty = struct{}{} } case 639: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3241 +//line sql.y:3254 { yyVAL.empty = struct{}{} } case 640: - yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3244 + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3258 { yyVAL.empty = struct{}{} } case 641: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3246 +//line sql.y:3260 { yyVAL.empty = struct{}{} } case 642: - yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3248 + yyDollar = yyS[yypt-0 : yypt+1] +//line sql.y:3263 { yyVAL.empty = struct{}{} } case 643: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3265 + { + yyVAL.empty = struct{}{} + } + case 644: + yyDollar = yyS[yypt-1 : yypt+1] +//line sql.y:3267 + { + yyVAL.empty = struct{}{} + } + case 645: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3251 +//line sql.y:3270 { yyVAL.colIdent = ColIdent{} } - case 644: + case 646: yyDollar = yyS[yypt-2 : yypt+1] -//line sql.y:3253 +//line sql.y:3272 { yyVAL.colIdent = yyDollar[2].colIdent } - case 646: + case 648: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3259 +//line sql.y:3278 { yyVAL.colIdent = NewColIdent(string(yyDollar[1].bytes)) } - case 647: + case 649: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3265 +//line sql.y:3284 { if yylex.(*Tokenizer).IsMySQL() && !yylex.(*Tokenizer).dialect.(*mysql.MySQLDialect).IsModeANSIOn() { yylex.Error("MySQL dialect configured ANSI_mode=off and doesn't allow double quoted table identifiers") @@ -6767,9 +6792,9 @@ yydefault: } yyVAL.tableIdent = NewTableIdentWithQuotes(string(yyDollar[1].bytes), '"') } - case 648: + case 650: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3273 +//line sql.y:3292 { if yylex.(*Tokenizer).IsPostgreSQL() { yylex.Error("PostgreSQL dialect doesn't allow to use backtick quotes for table identifiers") @@ -6777,66 +6802,66 @@ yydefault: } yyVAL.tableIdent = NewTableIdentWithQuotes(string(yyDollar[1].bytes), '`') } - case 649: + case 651: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3281 +//line sql.y:3300 { yyVAL.tableIdent = NewTableIdentWithQuotes(string(yyDollar[1].bytes), '\'') } - case 650: + case 652: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3286 +//line sql.y:3305 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 651: + case 653: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3290 +//line sql.y:3309 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 653: + case 655: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3297 +//line sql.y:3316 { yyVAL.tableIdent = NewTableIdent(string(yyDollar[1].bytes)) } - case 868: + case 870: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3543 +//line sql.y:3562 { if incNesting(yylex) { yylex.Error("max nesting level reached") return 1 } } - case 869: + case 871: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3552 +//line sql.y:3571 { decNesting(yylex) } - case 870: + case 872: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3557 +//line sql.y:3576 { forceEOF(yylex) } - case 871: + case 873: yyDollar = yyS[yypt-0 : yypt+1] -//line sql.y:3562 +//line sql.y:3581 { forceEOF(yylex) } - case 872: + case 874: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3566 +//line sql.y:3585 { forceEOF(yylex) } - case 873: + case 875: yyDollar = yyS[yypt-1 : yypt+1] -//line sql.y:3570 +//line sql.y:3589 { forceEOF(yylex) } diff --git a/sqlparser/sql.y b/sqlparser/sql.y index 9bef47104..3e772db74 100644 --- a/sqlparser/sql.y +++ b/sqlparser/sql.y @@ -238,10 +238,9 @@ func setDebugLevel(level int) { %type select_expression_list select_expression_list_opt %type select_expression %type expression -%type from_opt table_references +%type from_opt from_table_opt table_references aliased_table_name_list %type table_reference table_factor join_table %type join_condition join_condition_opt on_expression_opt -%type table_name_list %type inner_join outer_join straight_join natural_join %type table_name into_table_name %type aliased_table_name @@ -462,35 +461,49 @@ insert_or_replace: } update_statement: - UPDATE comment_opt table_references SET update_list where_expression_opt order_by_opt limit_opt + UPDATE comment_opt table_references SET update_list from_table_opt where_expression_opt order_by_opt limit_opt returning_opt { - $$ = &Update{Comments: Comments($2), TableExprs: $3, Exprs: $5, Where: NewWhere(WhereStr, $6), OrderBy: $7, Limit: $8} + if yylex.(*Tokenizer).IsMySQL() { + yylex.Error("MySQL dialect doesn't support FROM TableExpr with update statement") + return 1 + } + + $$ = &Update{Comments: Comments($2), TableExprs: $3, Exprs: $5, From: $6, Where: NewWhere(WhereStr, $7), OrderBy: $8, Limit: $9, Returning: $10} } +| UPDATE comment_opt table_references SET update_list where_expression_opt order_by_opt limit_opt returning_opt + { + if yylex.(*Tokenizer).IsMySQL() && len($9) != 0 { + yylex.Error("MySQL/MariaDB dialect doesn't support returning with update statement") + return 1 + } + + $$ = &Update{Comments: Comments($2), TableExprs: $3, Exprs: $5, Where: NewWhere(WhereStr, $6), OrderBy: $7, Limit: $8, Returning: $9} + } delete_statement: - DELETE comment_opt FROM table_name opt_partition_clause where_expression_opt order_by_opt limit_opt + DELETE comment_opt FROM aliased_table_name opt_partition_clause where_expression_opt order_by_opt limit_opt returning_opt { - $$ = &Delete{Comments: Comments($2), TableExprs: TableExprs{&AliasedTableExpr{Expr:$4}}, Partitions: $5, Where: NewWhere(WhereStr, $6), OrderBy: $7, Limit: $8} + $$ = &Delete{Comments: Comments($2), TableExprs: TableExprs{$4}, Partitions: $5, Where: NewWhere(WhereStr, $6), OrderBy: $7, Limit: $8, Returning: $9} } -| DELETE comment_opt FROM table_name_list USING table_references where_expression_opt +| DELETE comment_opt FROM aliased_table_name_list USING table_references where_expression_opt returning_opt { - $$ = &Delete{Comments: Comments($2), Targets: $4, TableExprs: $6, Where: NewWhere(WhereStr, $7)} + $$ = &Delete{Comments: Comments($2), Targets: $4, TableExprs: $6, Where: NewWhere(WhereStr, $7), Returning: $8} } -| DELETE comment_opt table_name_list from_or_using table_references where_expression_opt +| DELETE comment_opt aliased_table_name_list from_or_using table_references where_expression_opt returning_opt { - $$ = &Delete{Comments: Comments($2), Targets: $3, TableExprs: $5, Where: NewWhere(WhereStr, $6)} + $$ = &Delete{Comments: Comments($2), Targets: $3, TableExprs: $5, Where: NewWhere(WhereStr, $6), Returning: $7} } from_or_using: FROM {} | USING {} -table_name_list: - table_name +aliased_table_name_list: + aliased_table_name { - $$ = TableNames{$1} + $$ = TableExprs{$1} } -| table_name_list ',' table_name +| aliased_table_name_list ',' aliased_table_name { $$ = append($$, $3) } @@ -1871,6 +1884,12 @@ from_opt: $$ = $2 } +from_table_opt: + FROM table_references + { + $$ = $2 + } + table_references: table_reference { diff --git a/tests/test.py b/tests/test.py index 4c5148b32..676e90c6b 100644 --- a/tests/test.py +++ b/tests/test.py @@ -6788,6 +6788,10 @@ def execute_via_1(self, query, values): """Execute SQLAlchemy execute query via AcraServer with "TEST_TLS_CLIENT_CERT".""" return self.engine1.execute(query, values) + def execute_via_2(self, query): + """Execute SQLAlchemy execute query via AcraServer with "TEST_TLS_CLIENT_CERT".""" + return self.engine2.execute(query).fetchall() + def insert_via_1_bulk(self, query, values): """Execute SQLAlchemy Bulk INSERT query via AcraServer with "TEST_TLS_CLIENT_CERT".""" self.engine1.execute(query.values(values)) @@ -7470,7 +7474,19 @@ def insert_with_enum_and_return_data(self): def insert_with_star_and_return_data(self): raise NotImplementedError - def test_insert_returning_with_col_enum(self): + def delete_and_return_data_with_star(self, id): + raise NotImplementedError + + def delete_and_return_data_with_enum(self, id): + raise NotImplementedError + + def update_and_return_data_with_enum(self, date): + raise NotImplementedError + + def update_and_return_data_with_star(self, date): + raise NotImplementedError + + def test_returning_with_col_enum(self): source, hidden, data = self.insert_with_enum_and_return_data() self.assertEqual(source['token_str'], data['token_str']) self.assertEqual(source['token_i64'], data['token_i64']) @@ -7480,8 +7496,24 @@ def test_insert_returning_with_col_enum(self): self.assertNotEqual(hidden['token_i64'], data['token_i64']) self.assertNotEqual(hidden['token_email'], data['token_email']) self.assertNotEqual(hidden['token_i32'], data['token_i32']) - - def test_insert_returning_with_star(self): + source = self.delete_and_return_data_with_enum(source['id']) + self.assertEqual(source['token_i32'], data['token_i32']) + self.assertEqual(source['token_i64'], data['token_i64']) + self.assertEqual(source['token_str'], data['token_str']) + self.assertEqual(source['token_email'], data['token_email']) + if TEST_POSTGRESQL: + data['token_i32'] = random_int32() + data['token_i64'] = random_int64() + data['token_str'] = random_str() + data['token_bytes'] = random_bytes() + data['token_email'] = random_email() + source = self.update_and_return_data_with_enum(data) + self.assertEqual(source['token_i32'], data['token_i32']) + self.assertEqual(source['token_i64'], data['token_i64']) + self.assertEqual(source['token_str'], data['token_str']) + self.assertEqual(source['token_email'], data['token_email']) + + def test_returning_with_star(self): source, hidden, data = self.insert_with_star_and_return_data() self.assertEqual(source['token_i32'], data['token_i32']) self.assertEqual(source['token_i64'], data['token_i64']) @@ -7491,6 +7523,22 @@ def test_insert_returning_with_star(self): self.assertNotEqual(hidden['token_i64'], data['token_i64']) self.assertNotEqual(hidden['token_str'], data['token_str']) self.assertNotEqual(hidden['token_email'], data['token_email']) + source = self.delete_and_return_data_with_star(source['id']) + self.assertEqual(source['token_i32'], data['token_i32']) + self.assertEqual(source['token_i64'], data['token_i64']) + self.assertEqual(source['token_str'], data['token_str']) + self.assertEqual(source['token_email'], data['token_email']) + if TEST_POSTGRESQL: + data['token_i32'] = random_int32() + data['token_i64'] = random_int64() + data['token_str'] = random_str() + data['token_bytes'] = random_bytes() + data['token_email'] = random_email() + source = self.update_and_return_data_with_star(data) + self.assertEqual(source['token_i32'], data['token_i32']) + self.assertEqual(source['token_i64'], data['token_i64']) + self.assertEqual(source['token_str'], data['token_str']) + self.assertEqual(source['token_email'], data['token_email']) class TestReturningProcessingMariaDB(TestReturningProcessingMixing, BaseTokenization): @@ -7528,6 +7576,20 @@ def build_raw_query_with_star(self): 'VALUES ({}, {}, {}, {}, {}, \'{}\', \'{}\') ' \ 'RETURNING *'.format(id, self.data['empty'], self.data['empty'], self.data['token_i32'], self.data['token_i64'], self.data['token_str'], self.data['token_email']) + def build_delete_query_with_star_returning(self, id): + # TODO(zhars, 2021-5-20): rewrite query when sqlalchemy will support RETURNING statements + return 'DELETE FROM test_tokenization_specific_client_id ' \ + 'WHERE id = {} ' \ + 'RETURNING *'.format(id) + + def build_delete_query_with_enum_returning(self, id): + # TODO(zhars, 2021-5-20): rewrite query when sqlalchemy will support RETURNING statements + return 'DELETE FROM test_tokenization_specific_client_id ' \ + 'WHERE id = {} ' \ + 'RETURNING 0, 1 as literal, test_tokenization_specific_client_id.id, test_tokenization_specific_client_id.token_str,' \ + 'test_tokenization_specific_client_id.token_i64, test_tokenization_specific_client_id.token_email, ' \ + 'test_tokenization_specific_client_id.token_i32, NULL'.format(id, self.data['empty'], self.data['empty'], self.data['token_i32'], self.data['token_i64'], self.data['token_str'], self.data['token_email']) + def insert_with_enum_and_return_data(self): metadata.create_all(self.engine_raw, [self.specific_client_id_table]) self.fetch_from_2(sa.select([self.specific_client_id_table]).where(self.specific_client_id_table.c.id == id)) @@ -7536,6 +7598,26 @@ def insert_with_enum_and_return_data(self): hidden = self.fetch_from_1(self.build_raw_query_with_enum())[0] return source, hidden, self.data + def delete_and_return_data_with_star(self, id): + metadata.create_all(self.engine_raw, [self.specific_client_id_table]) + self.fetch_from_2(sa.select([self.specific_client_id_table]).where(self.specific_client_id_table.c.id == id)) + + source = self.execute_via_2(self.build_delete_query_with_star_returning(id))[0] + row = self.fetch_from_2(sa.select([self.specific_client_id_table]).where(self.specific_client_id_table.c.id == id)) + self.assertEqual(len(row), 0) + + return source + + def delete_and_return_data_with_enum(self, id): + metadata.create_all(self.engine_raw, [self.specific_client_id_table]) + self.fetch_from_2(sa.select([self.specific_client_id_table]).where(self.specific_client_id_table.c.id == id)) + + source = self.execute_via_2(self.build_delete_query_with_enum_returning(id))[0] + row = self.fetch_from_2(sa.select([self.specific_client_id_table]).where(self.specific_client_id_table.c.id == id)) + self.assertEqual(len(row), 0) + + return source + def insert_with_star_and_return_data(self): metadata.create_all(self.engine_raw, [self.specific_client_id_table]) self.fetch_from_2(sa.select([self.specific_client_id_table]).where(self.specific_client_id_table.c.id == id)) @@ -7574,6 +7656,26 @@ def build_raw_query_with_star(self): self.data['id'] = get_random_id() return self.specific_client_id_table.insert().returning(sa.literal_column('*')), self.data + def build_delete_query_with_star_returning(self, id): + return self.specific_client_id_table.delete().where(self.specific_client_id_table.c.id == id).returning(sa.literal_column('*')) + + def build_delete_query_with_enum_returning(self, id): + return self.specific_client_id_table.delete().where(self.specific_client_id_table.c.id == id). \ + returning(0, sa.literal('1').label('literal'), + self.specific_client_id_table.c.id, self.specific_client_id_table.c.token_str, self.specific_client_id_table.c.token_i64, + self.specific_client_id_table.c.token_email, self.specific_client_id_table.c.token_i32, + sa.text('null')) + + def build_update_query_with_star_returning(self, data): + return self.specific_client_id_table.update().where(self.specific_client_id_table.c.id == data['id']).returning(sa.literal_column('*')) + + def build_update_query_with_enum_returning(self, data): + return self.specific_client_id_table.update().where(self.specific_client_id_table.c.id == data['id']). \ + returning(0, sa.literal('1').label('literal'), + self.specific_client_id_table.c.id, self.specific_client_id_table.c.token_str, self.specific_client_id_table.c.token_i64, + self.specific_client_id_table.c.token_email, self.specific_client_id_table.c.token_i32, + sa.text('null')) + def insert_with_enum_and_return_data(self): metadata.create_all(self.engine_raw, [self.specific_client_id_table]) self.fetch_from_2(sa.select([self.specific_client_id_table]).where(self.specific_client_id_table.c.id == get_random_id())) @@ -7598,6 +7700,32 @@ def insert_with_star_and_return_data(self): hidden = connection.execute(hidden_query, data).fetchone() return source, hidden, self.data + def delete_and_return_data_with_star(self, id): + metadata.create_all(self.engine_raw, [self.specific_client_id_table]) + self.fetch_from_2(sa.select([self.specific_client_id_table]).where(self.specific_client_id_table.c.id == id)) + + source = self.engine2.execute(self.build_delete_query_with_star_returning(id)).fetchone() + return source + + def delete_and_return_data_with_enum(self, id): + metadata.create_all(self.engine_raw, [self.specific_client_id_table]) + self.fetch_from_2(sa.select([self.specific_client_id_table]).where(self.specific_client_id_table.c.id == id)) + + source = self.engine2.execute(self.build_delete_query_with_enum_returning(id)).fetchone() + return source + + def update_and_return_data_with_enum(self, data): + source_query = self.build_update_query_with_enum_returning(data) + with self.engine2.connect() as connection: + source = connection.execute(source_query, data).fetchone() + return source + + def update_and_return_data_with_star(self, data): + source_query = self.build_update_query_with_star_returning(data) + with self.engine2.connect() as connection: + source = connection.execute(source_query, data).fetchone() + return source + class TestTokenizationWithBoltDB(BaseTokenizationWithBoltDB, TestTokenization): pass