func (qe *QueryEngine) execDDL(logStats *sqlQueryStats, ddl string) *mproto.QueryResult { ddlPlan := sqlparser.DDLParse(ddl) if ddlPlan.Action == 0 { panic(NewTabletError(FAIL, "DDL is not understood")) } // Stolen from Begin conn := qe.txPool.Get() txid, err := qe.activeTxPool.SafeBegin(conn) if err != nil { conn.Recycle() panic(err) } // Stolen from Commit defer qe.activeTxPool.SafeCommit(txid) // Stolen from Execute conn = qe.activeTxPool.Get(txid) defer conn.Recycle() result, err := qe.executeSql(logStats, conn, ddl, false) if err != nil { panic(NewTabletErrorSql(FAIL, err)) } qe.schemaInfo.DropTable(ddlPlan.TableName) if ddlPlan.Action != sqlparser.DROP { // CREATE, ALTER, RENAME qe.schemaInfo.CreateTable(ddlPlan.NewName) } return result }
// InvalidateForDDL performs schema and rowcache changes for the ddl. func (qe *QueryEngine) InvalidateForDDL(ddlInvalidate *proto.DDLInvalidate) { ddlPlan := sqlparser.DDLParse(ddlInvalidate.DDL) if ddlPlan.Action == 0 { panic(NewTabletError(FAIL, "DDL is not understood")) } qe.schemaInfo.DropTable(ddlPlan.TableName) if ddlPlan.Action != sqlparser.DROP { // CREATE, ALTER, RENAME qe.schemaInfo.CreateTable(ddlPlan.NewName) } }
func (qe *QueryEngine) InvalidateForDDL(ddlInvalidate *proto.DDLInvalidate) { qe.mu.RLock() defer qe.mu.RUnlock() ddlPlan := sqlparser.DDLParse(ddlInvalidate.DDL) if ddlPlan.Action == 0 { panic(NewTabletError(FAIL, "DDL is not understood")) } qe.schemaInfo.DropTable(ddlPlan.TableName) if ddlPlan.Action != sqlparser.DROP { // CREATE, ALTER, RENAME qe.schemaInfo.CreateTable(ddlPlan.NewName) } qe.adminCache.Set(ROWCACHE_INVALIDATION_POSITION, 0, 0, []byte(ddlInvalidate.Position)) }