// GetStreamPlan is similar to GetPlan, but doesn't use the cache // and doesn't enforce a limit. It also just returns the parsed query. func (si *SchemaInfo) GetStreamPlan(sql string) *planbuilder.ExecPlan { GetTable := func(tableName string) (*schema.Table, bool) { tableInfo, ok := si.tables[tableName] if !ok { return nil, false } return tableInfo.Table, true } plan, err := planbuilder.GetStreamExecPlan(sql, GetTable) if err != nil { panic(NewTabletError(FAIL, "%s", err)) } return plan }
// GetStreamPlan is similar to GetPlan, but doesn't use the cache // and doesn't enforce a limit. It just returns the parsed query. func (si *SchemaInfo) GetStreamPlan(sql string) *ExecPlan { var tableInfo *TableInfo GetTable := func(tableName string) (table *schema.Table, ok bool) { si.mu.Lock() defer si.mu.Unlock() tableInfo, ok = si.tables[tableName] if !ok { return nil, false } return tableInfo.Table, true } splan, err := planbuilder.GetStreamExecPlan(sql, GetTable) if err != nil { panic(PrefixTabletError(ErrFail, vtrpc.ErrorCode_UNKNOWN_ERROR, err, "")) } plan := &ExecPlan{ExecPlan: splan, TableInfo: tableInfo} plan.Rules = si.queryRuleSources.filterByPlan(sql, plan.PlanId, plan.TableName) plan.Authorized = tableacl.Authorized(plan.TableName, plan.PlanId.MinRole()) return plan }
// GetStreamPlan is similar to GetPlan, but doesn't use the cache // and doesn't enforce a limit. It just returns the parsed query. func (si *SchemaInfo) GetStreamPlan(sql string) *ExecPlan { var tableInfo *TableInfo GetTable := func(tableName string) (table *schema.Table, ok bool) { si.mu.Lock() defer si.mu.Unlock() tableInfo, ok = si.tables[tableName] if !ok { return nil, false } return tableInfo.Table, true } splan, err := planbuilder.GetStreamExecPlan(sql, GetTable) if err != nil { panic(NewTabletError(FAIL, "%s", err)) } plan := &ExecPlan{ExecPlan: splan, TableInfo: tableInfo} plan.Rules = si.rules.filterByPlan(sql, plan.PlanId, plan.TableName) plan.Authorized = tableacl.Authorized(plan.TableName, plan.PlanId.MinRole()) return plan }