// ExecuteEntityIds excutes a non-streaming query based on given KeyspaceId map. func (vtg *VTGate) ExecuteEntityIds(ctx context.Context, sql string, bindVariables map[string]interface{}, keyspace string, entityColumnName string, entityKeyspaceIDs []*vtgatepb.ExecuteEntityIdsRequest_EntityId, tabletType topodatapb.TabletType, session *vtgatepb.Session, notInTransaction bool, options *querypb.ExecuteOptions) (*sqltypes.Result, error) { startTime := time.Now() ltt := topoproto.TabletTypeLString(tabletType) statsKey := []string{"ExecuteEntityIds", keyspace, ltt} defer vtg.timings.Record(statsKey, startTime) sql = sqlannotation.AnnotateIfDML(sql, nil) qr, err := vtg.resolver.ExecuteEntityIds(ctx, sql, bindVariables, keyspace, entityColumnName, entityKeyspaceIDs, tabletType, session, notInTransaction, options) if err == nil { vtg.rowsReturned.Add(statsKey, int64(len(qr.Rows))) return qr, nil } query := map[string]interface{}{ "Sql": sql, "BindVariables": bindVariables, "Keyspace": keyspace, "EntityColumnName": entityColumnName, "EntityKeyspaceIDs": entityKeyspaceIDs, "TabletType": ltt, "Session": session, "NotInTransaction": notInTransaction, "Options": options, } err = handleExecuteError(err, statsKey, query, vtg.logExecuteEntityIds) return nil, err }
// ExecuteShards executes a non-streaming query on the specified shards. func (vtg *VTGate) ExecuteShards(ctx context.Context, sql string, bindVariables map[string]interface{}, keyspace string, shards []string, tabletType topodatapb.TabletType, session *vtgatepb.Session, notInTransaction bool) (*sqltypes.Result, error) { startTime := time.Now() ltt := topoproto.TabletTypeLString(tabletType) statsKey := []string{"ExecuteShards", keyspace, ltt} defer vtg.timings.Record(statsKey, startTime) sql = sqlannotation.AnnotateIfDML(sql, nil) qr, err := vtg.resolver.Execute( ctx, sql, bindVariables, keyspace, tabletType, session, func(keyspace string) (string, []string, error) { return keyspace, shards, nil }, notInTransaction, ) if err == nil { vtg.rowsReturned.Add(statsKey, int64(len(qr.Rows))) return qr, nil } query := map[string]interface{}{ "Sql": sql, "BindVariables": bindVariables, "Keyspace": keyspace, "Shards": shards, "TabletType": ltt, "Session": session, "NotInTransaction": notInTransaction, } handleExecuteError(err, statsKey, query, vtg.logExecuteShards) return nil, err }
// Helper function used in ExecuteBatchShards func annotateBoundShardQueriesAsUnfriendly(queries []*vtgatepb.BoundShardQuery) { for i, q := range queries { queries[i].Query.Sql = sqlannotation.AnnotateIfDML(q.Query.Sql, nil) } }
// Helper function used in ExecuteBatchKeyspaceIds func annotateBoundKeyspaceIDQueries(queries []*vtgatepb.BoundKeyspaceIdQuery) { for i, q := range queries { queries[i].Query.Sql = sqlannotation.AnnotateIfDML(q.Query.Sql, q.KeyspaceIds) } }