diff --git a/coordinator/mock/mock_coordinator.go b/coordinator/mock/mock_coordinator.go index 63a68cf7c..16d457ff1 100644 --- a/coordinator/mock/mock_coordinator.go +++ b/coordinator/mock/mock_coordinator.go @@ -163,6 +163,20 @@ func (mr *MockCoordinatorMockRecorder) AlterReferenceRelationStorage(ctx, relNam return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AlterReferenceRelationStorage", reflect.TypeOf((*MockCoordinator)(nil).AlterReferenceRelationStorage), ctx, relName, shs) } +// AlterReferenceRelationStorageAdvanced mocks base method. +func (m *MockCoordinator) AlterReferenceRelationStorageAdvanced(ctx context.Context, relName *rfqn.RelationFQN, shs []string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AlterReferenceRelationStorageAdvanced", ctx, relName, shs) + ret0, _ := ret[0].(error) + return ret0 +} + +// AlterReferenceRelationStorageAdvanced indicates an expected call of AlterReferenceRelationStorageAdvanced. +func (mr *MockCoordinatorMockRecorder) AlterReferenceRelationStorageAdvanced(ctx, relName, shs any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AlterReferenceRelationStorageAdvanced", reflect.TypeOf((*MockCoordinator)(nil).AlterReferenceRelationStorageAdvanced), ctx, relName, shs) +} + // AlterSequenceDetachRelation mocks base method. func (m *MockCoordinator) AlterSequenceDetachRelation(ctx context.Context, rel *rfqn.RelationFQN) error { m.ctrl.T.Helper() diff --git a/coordinator/pkg/clustered_coord.go b/coordinator/pkg/clustered_coord.go index 985176fed..dc27db546 100644 --- a/coordinator/pkg/clustered_coord.go +++ b/coordinator/pkg/clustered_coord.go @@ -2644,6 +2644,52 @@ func (qc *ClusteredCoordinator) SyncReferenceRelations(ctx context.Context, relN }) } +// AlterReferenceRelationStorage implements meta.EntityMgr. +func (qc *ClusteredCoordinator) AlterReferenceRelationStorageAdvanced(ctx context.Context, relName *rfqn.RelationFQN, shs []string) error { + rel, err := qc.GetReferenceRelation(ctx, relName) + if err != nil { + return err + } + shardsExSet := make(map[string]struct{}) + shardsToAdd := make([]string, 0) + shardsIntersect := make([]string, 0) + for _, sh := range rel.ShardIds { + shardsExSet[sh] = struct{}{} + } + for _, sh := range shs { + if _, ok := shardsExSet[sh]; !ok { + shardsToAdd = append(shardsToAdd, sh) + } else if ok { + shardsIntersect = append(shardsIntersect, sh) + } + } + + if len(shardsIntersect) < len(rel.ShardIds) { + // We need to drop shards + if err := qc.db.AlterReferenceRelationStorage(ctx, relName, shardsIntersect); err != nil { + return fmt.Errorf("failed to alter reference relation storage: failed to remove excess shards in coordinator: %s", err) + } + if err := qc.traverseRouters(ctx, func(cc *grpc.ClientConn) error { + c := proto.NewReferenceRelationsServiceClient(cc) + _, err := c.AlterReferenceRelationStorage(ctx, &proto.AlterReferenceRelationStorageRequest{ + Relation: rfqn.RelationFQNToProto(relName), + ShardIds: shardsIntersect, + }) + return err + }); err != nil { + return fmt.Errorf("failed to alter reference relation storage: failed to remove excess shards in routers: %s", err) + } + } + + rels := []*rfqn.RelationFQN{relName} + for _, sh := range shardsToAdd { + if err := qc.SyncReferenceRelations(ctx, rels, sh); err != nil { + return fmt.Errorf("failed to alter reference relation storage: failed to sync relation on shard \"%s\": %s", sh, err) + } + } + return nil +} + // TODO: unit tests func (qc *ClusteredCoordinator) DropReferenceRelation(ctx context.Context, relName *rfqn.RelationFQN) error { diff --git a/coordinator/provider/distributions.go b/coordinator/provider/distributions.go index 886c93a9b..52169bd3a 100644 --- a/coordinator/provider/distributions.go +++ b/coordinator/provider/distributions.go @@ -70,8 +70,7 @@ func (d *DistributionsServer) AlterDistributionAttach(ctx context.Context, req * func (d *DistributionsServer) AlterDistributionDetach(ctx context.Context, req *protos.AlterDistributionDetachRequest) (*emptypb.Empty, error) { for _, rel := range req.GetRelNames() { - qualifiedName := &rfqn.RelationFQN{RelationName: rel.RelationName, SchemaName: rel.SchemaName} - if err := d.impl.AlterDistributionDetach(ctx, req.GetId(), qualifiedName); err != nil { + if err := d.impl.AlterDistributionDetach(ctx, req.GetId(), rfqn.RelationFQNFromProto(rel)); err != nil { return nil, err } } diff --git a/coordinator/provider/rrelations.go b/coordinator/provider/rrelations.go index 800b10e64..a86a93f5c 100644 --- a/coordinator/provider/rrelations.go +++ b/coordinator/provider/rrelations.go @@ -24,22 +24,20 @@ func NewReferenceRelationServer(impl coordinator.Coordinator) *ReferenceRelation } func (rr *ReferenceRelationServer) CreateReferenceRelations(ctx context.Context, req *protos.CreateReferenceRelationsRequest) (*emptypb.Empty, error) { - if err := rr.impl.CreateReferenceRelation(ctx, + return nil, rr.impl.CreateReferenceRelation(ctx, rrelations.RefRelationFromProto(req.Relation), - rrelations.AutoIncrementEntriesFromProto(req.Entries)); err != nil { - return nil, err - } - return nil, nil + rrelations.AutoIncrementEntriesFromProto(req.Entries)) } func (rr *ReferenceRelationServer) DropReferenceRelations(ctx context.Context, req *protos.DropReferenceRelationsRequest) (*emptypb.Empty, error) { for _, qualName := range req.GetRelations() { - if err := rr.impl.DropReferenceRelation(ctx, &rfqn.RelationFQN{ - RelationName: qualName.RelationName, - SchemaName: qualName.SchemaName, - }); err != nil { + if err := rr.impl.DropReferenceRelation(ctx, rfqn.RelationFQNFromProto(qualName)); err != nil { return nil, err } } return nil, nil } + +func (rr *ReferenceRelationServer) AlterReferenceRelationStorageAdvanced(ctx context.Context, req *protos.AlterReferenceRelationStorageRequest) (*emptypb.Empty, error) { + return nil, rr.impl.AlterReferenceRelationStorage(ctx, rfqn.RelationFQNFromProto(req.Relation), req.ShardIds) +} diff --git a/pkg/coord/adapter.go b/pkg/coord/adapter.go index 9025a90df..8c52e4434 100644 --- a/pkg/coord/adapter.go +++ b/pkg/coord/adapter.go @@ -108,6 +108,16 @@ func (a *Adapter) AlterReferenceRelationStorage(ctx context.Context, relName *rf return fmt.Errorf("AlterReferenceRelationStorage should not be used in proxy adapter") } +// AlterReferenceRelationStorage implements meta.EntityMgr. +func (a *Adapter) AlterReferenceRelationStorageAdvanced(ctx context.Context, relName *rfqn.RelationFQN, shs []string) error { + c := proto.NewReferenceRelationsServiceClient(a.conn) + _, err := c.AlterReferenceRelationStorageAdvanced(ctx, &proto.AlterReferenceRelationStorageRequest{ + Relation: rfqn.RelationFQNToProto(relName), + ShardIds: shs, + }) + return err +} + // CreateReferenceRelation implements meta.EntityMgr. func (a *Adapter) CreateReferenceRelation(ctx context.Context, r *rrelation.ReferenceRelation, entry []*rrelation.AutoIncrementEntry) error { c := proto.NewReferenceRelationsServiceClient(a.conn) diff --git a/pkg/coord/clocal.go b/pkg/coord/clocal.go index 47fb7a5b3..1fdfd3715 100644 --- a/pkg/coord/clocal.go +++ b/pkg/coord/clocal.go @@ -440,11 +440,6 @@ func (lc *LocalInstanceMetadataMgr) StopMoveTaskGroup(_ context.Context, _ strin return ErrNotCoordinator } -// AlterReferenceRelationStorage implements meta.EntityMgr. -func (lc *LocalInstanceMetadataMgr) AlterReferenceRelationStorage(ctx context.Context, relName *rfqn.RelationFQN, shs []string) error { - return lc.qdb.AlterReferenceRelationStorage(ctx, relName, shs) -} - // SyncReferenceRelations implements meta.EntityMgr. func (lc *LocalInstanceMetadataMgr) SyncReferenceRelations(ctx context.Context, ids []*rfqn.RelationFQN, destShard string) error { return ErrNotCoordinator diff --git a/pkg/coord/coord.go b/pkg/coord/coord.go index 8032a1ae0..4f35710c5 100644 --- a/pkg/coord/coord.go +++ b/pkg/coord/coord.go @@ -37,11 +37,16 @@ func NewCoordinator(q qdb.XQDB, d qdb.DCStateKeeper) Coordinator { } } -// AlterReferenceRelationStorage implements meta.EntityMgr. +// AlterReferenceRelationStorage alters shards, on which reference relation is contained. func (lc *Coordinator) AlterReferenceRelationStorage(ctx context.Context, relName *rfqn.RelationFQN, shs []string) error { return lc.qdb.AlterReferenceRelationStorage(ctx, relName, shs) } +// AlterReferenceRelationStorage implements meta.EntityMgr. +func (lc *Coordinator) AlterReferenceRelationStorageAdvanced(ctx context.Context, relName *rfqn.RelationFQN, shs []string) error { + return ErrNotCoordinator +} + // SyncReferenceRelations implements meta.EntityMgr. func (lc *Coordinator) SyncReferenceRelations(ctx context.Context, relNames []*rfqn.RelationFQN, destShard string) error { for _, qualName := range relNames { diff --git a/pkg/meta/meta.go b/pkg/meta/meta.go index 3671a8363..ef8d34132 100644 --- a/pkg/meta/meta.go +++ b/pkg/meta/meta.go @@ -1181,6 +1181,17 @@ func ProcMetadataCommand(ctx context.Context, }}, } + return tts, nil + case *spqrparser.AlterReferenceTableStorage: + if err := mgr.AlterReferenceRelationStorageAdvanced(ctx, stmt.RelationSelector, stmt.Shards); err != nil { + return nil, err + } + tts := &tupleslot.TupleTableSlot{ + Desc: engine.GetVPHeader("relation", "shard"), + } + for _, sh := range stmt.Shards { + tts.WriteDataRow(stmt.RelationSelector.String(), sh) + } return tts, nil default: return nil, ErrUnknownCoordinatorCommand diff --git a/pkg/mock/meta/mock_meta.go b/pkg/mock/meta/mock_meta.go index acba6aac8..8ce2b837c 100644 --- a/pkg/mock/meta/mock_meta.go +++ b/pkg/mock/meta/mock_meta.go @@ -162,6 +162,20 @@ func (mr *MockEntityMgrMockRecorder) AlterReferenceRelationStorage(ctx, relName, return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AlterReferenceRelationStorage", reflect.TypeOf((*MockEntityMgr)(nil).AlterReferenceRelationStorage), ctx, relName, shs) } +// AlterReferenceRelationStorageAdvanced mocks base method. +func (m *MockEntityMgr) AlterReferenceRelationStorageAdvanced(ctx context.Context, relName *rfqn.RelationFQN, shs []string) error { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "AlterReferenceRelationStorageAdvanced", ctx, relName, shs) + ret0, _ := ret[0].(error) + return ret0 +} + +// AlterReferenceRelationStorageAdvanced indicates an expected call of AlterReferenceRelationStorageAdvanced. +func (mr *MockEntityMgrMockRecorder) AlterReferenceRelationStorageAdvanced(ctx, relName, shs any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "AlterReferenceRelationStorageAdvanced", reflect.TypeOf((*MockEntityMgr)(nil).AlterReferenceRelationStorageAdvanced), ctx, relName, shs) +} + // AlterSequenceDetachRelation mocks base method. func (m *MockEntityMgr) AlterSequenceDetachRelation(ctx context.Context, rel *rfqn.RelationFQN) error { m.ctrl.T.Helper() diff --git a/pkg/models/rrelation/rmgr.go b/pkg/models/rrelation/rmgr.go index 6a9bac703..f97a92841 100644 --- a/pkg/models/rrelation/rmgr.go +++ b/pkg/models/rrelation/rmgr.go @@ -17,4 +17,5 @@ type ReferenceRelationMgr interface { /* Method for cluster-wide reference relation data replication */ SyncReferenceRelations(ctx context.Context, ids []*rfqn.RelationFQN, destShard string) error + AlterReferenceRelationStorageAdvanced(ctx context.Context, relName *rfqn.RelationFQN, shs []string) error } diff --git a/pkg/protos/reference_relation.pb.go b/pkg/protos/reference_relation.pb.go index 6a690b3b4..0e422f9b3 100644 --- a/pkg/protos/reference_relation.pb.go +++ b/pkg/protos/reference_relation.pb.go @@ -416,13 +416,14 @@ const file_protos_reference_relation_proto_rawDesc = "" + "\trelations\x18\x02 \x03(\v2\x13.spqr.QualifiedNameR\trelations\"t\n" + "$AlterReferenceRelationStorageRequest\x12/\n" + "\brelation\x18\x01 \x01(\v2\x13.spqr.QualifiedNameR\brelation\x12\x1b\n" + - "\tshard_ids\x18\x02 \x03(\tR\bshardIds2\xe8\x03\n" + + "\tshard_ids\x18\x02 \x03(\tR\bshardIds2\xd7\x04\n" + "\x19ReferenceRelationsService\x12[\n" + "\x18CreateReferenceRelations\x12%.spqr.CreateReferenceRelationsRequest\x1a\x16.google.protobuf.Empty\"\x00\x12W\n" + "\x16DropReferenceRelations\x12#.spqr.DropReferenceRelationsRequest\x1a\x16.google.protobuf.Empty\"\x00\x12U\n" + "\x16ListReferenceRelations\x12\x16.google.protobuf.Empty\x1a!.spqr.ListReferenceRelationsReply\"\x00\x12e\n" + "\x1dAlterReferenceRelationStorage\x12*.spqr.AlterReferenceRelationStorageRequest\x1a\x16.google.protobuf.Empty\"\x00\x12W\n" + - "\x16SyncReferenceRelations\x12#.spqr.SyncReferenceRelationsRequest\x1a\x16.google.protobuf.Empty\"\x00B\fZ\n" + + "\x16SyncReferenceRelations\x12#.spqr.SyncReferenceRelationsRequest\x1a\x16.google.protobuf.Empty\"\x00\x12m\n" + + "%AlterReferenceRelationStorageAdvanced\x12*.spqr.AlterReferenceRelationStorageRequest\x1a\x16.google.protobuf.Empty\"\x00B\fZ\n" + "spqr/protob\x06proto3" var ( @@ -464,13 +465,15 @@ var file_protos_reference_relation_proto_depIdxs = []int32{ 9, // 10: spqr.ReferenceRelationsService.ListReferenceRelations:input_type -> google.protobuf.Empty 6, // 11: spqr.ReferenceRelationsService.AlterReferenceRelationStorage:input_type -> spqr.AlterReferenceRelationStorageRequest 5, // 12: spqr.ReferenceRelationsService.SyncReferenceRelations:input_type -> spqr.SyncReferenceRelationsRequest - 9, // 13: spqr.ReferenceRelationsService.CreateReferenceRelations:output_type -> google.protobuf.Empty - 9, // 14: spqr.ReferenceRelationsService.DropReferenceRelations:output_type -> google.protobuf.Empty - 4, // 15: spqr.ReferenceRelationsService.ListReferenceRelations:output_type -> spqr.ListReferenceRelationsReply - 9, // 16: spqr.ReferenceRelationsService.AlterReferenceRelationStorage:output_type -> google.protobuf.Empty - 9, // 17: spqr.ReferenceRelationsService.SyncReferenceRelations:output_type -> google.protobuf.Empty - 13, // [13:18] is the sub-list for method output_type - 8, // [8:13] is the sub-list for method input_type + 6, // 13: spqr.ReferenceRelationsService.AlterReferenceRelationStorageAdvanced:input_type -> spqr.AlterReferenceRelationStorageRequest + 9, // 14: spqr.ReferenceRelationsService.CreateReferenceRelations:output_type -> google.protobuf.Empty + 9, // 15: spqr.ReferenceRelationsService.DropReferenceRelations:output_type -> google.protobuf.Empty + 4, // 16: spqr.ReferenceRelationsService.ListReferenceRelations:output_type -> spqr.ListReferenceRelationsReply + 9, // 17: spqr.ReferenceRelationsService.AlterReferenceRelationStorage:output_type -> google.protobuf.Empty + 9, // 18: spqr.ReferenceRelationsService.SyncReferenceRelations:output_type -> google.protobuf.Empty + 9, // 19: spqr.ReferenceRelationsService.AlterReferenceRelationStorageAdvanced:output_type -> google.protobuf.Empty + 14, // [14:20] is the sub-list for method output_type + 8, // [8:14] is the sub-list for method input_type 8, // [8:8] is the sub-list for extension type_name 8, // [8:8] is the sub-list for extension extendee 0, // [0:8] is the sub-list for field type_name diff --git a/pkg/protos/reference_relation_grpc.pb.go b/pkg/protos/reference_relation_grpc.pb.go index 5682a2066..da4ce816c 100644 --- a/pkg/protos/reference_relation_grpc.pb.go +++ b/pkg/protos/reference_relation_grpc.pb.go @@ -20,11 +20,12 @@ import ( const _ = grpc.SupportPackageIsVersion9 const ( - ReferenceRelationsService_CreateReferenceRelations_FullMethodName = "/spqr.ReferenceRelationsService/CreateReferenceRelations" - ReferenceRelationsService_DropReferenceRelations_FullMethodName = "/spqr.ReferenceRelationsService/DropReferenceRelations" - ReferenceRelationsService_ListReferenceRelations_FullMethodName = "/spqr.ReferenceRelationsService/ListReferenceRelations" - ReferenceRelationsService_AlterReferenceRelationStorage_FullMethodName = "/spqr.ReferenceRelationsService/AlterReferenceRelationStorage" - ReferenceRelationsService_SyncReferenceRelations_FullMethodName = "/spqr.ReferenceRelationsService/SyncReferenceRelations" + ReferenceRelationsService_CreateReferenceRelations_FullMethodName = "/spqr.ReferenceRelationsService/CreateReferenceRelations" + ReferenceRelationsService_DropReferenceRelations_FullMethodName = "/spqr.ReferenceRelationsService/DropReferenceRelations" + ReferenceRelationsService_ListReferenceRelations_FullMethodName = "/spqr.ReferenceRelationsService/ListReferenceRelations" + ReferenceRelationsService_AlterReferenceRelationStorage_FullMethodName = "/spqr.ReferenceRelationsService/AlterReferenceRelationStorage" + ReferenceRelationsService_SyncReferenceRelations_FullMethodName = "/spqr.ReferenceRelationsService/SyncReferenceRelations" + ReferenceRelationsService_AlterReferenceRelationStorageAdvanced_FullMethodName = "/spqr.ReferenceRelationsService/AlterReferenceRelationStorageAdvanced" ) // ReferenceRelationsServiceClient is the client API for ReferenceRelationsService service. @@ -36,6 +37,7 @@ type ReferenceRelationsServiceClient interface { ListReferenceRelations(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*ListReferenceRelationsReply, error) AlterReferenceRelationStorage(ctx context.Context, in *AlterReferenceRelationStorageRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) SyncReferenceRelations(ctx context.Context, in *SyncReferenceRelationsRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) + AlterReferenceRelationStorageAdvanced(ctx context.Context, in *AlterReferenceRelationStorageRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) } type referenceRelationsServiceClient struct { @@ -96,6 +98,16 @@ func (c *referenceRelationsServiceClient) SyncReferenceRelations(ctx context.Con return out, nil } +func (c *referenceRelationsServiceClient) AlterReferenceRelationStorageAdvanced(ctx context.Context, in *AlterReferenceRelationStorageRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) { + cOpts := append([]grpc.CallOption{grpc.StaticMethod()}, opts...) + out := new(emptypb.Empty) + err := c.cc.Invoke(ctx, ReferenceRelationsService_AlterReferenceRelationStorageAdvanced_FullMethodName, in, out, cOpts...) + if err != nil { + return nil, err + } + return out, nil +} + // ReferenceRelationsServiceServer is the server API for ReferenceRelationsService service. // All implementations must embed UnimplementedReferenceRelationsServiceServer // for forward compatibility. @@ -105,6 +117,7 @@ type ReferenceRelationsServiceServer interface { ListReferenceRelations(context.Context, *emptypb.Empty) (*ListReferenceRelationsReply, error) AlterReferenceRelationStorage(context.Context, *AlterReferenceRelationStorageRequest) (*emptypb.Empty, error) SyncReferenceRelations(context.Context, *SyncReferenceRelationsRequest) (*emptypb.Empty, error) + AlterReferenceRelationStorageAdvanced(context.Context, *AlterReferenceRelationStorageRequest) (*emptypb.Empty, error) mustEmbedUnimplementedReferenceRelationsServiceServer() } @@ -130,6 +143,9 @@ func (UnimplementedReferenceRelationsServiceServer) AlterReferenceRelationStorag func (UnimplementedReferenceRelationsServiceServer) SyncReferenceRelations(context.Context, *SyncReferenceRelationsRequest) (*emptypb.Empty, error) { return nil, status.Error(codes.Unimplemented, "method SyncReferenceRelations not implemented") } +func (UnimplementedReferenceRelationsServiceServer) AlterReferenceRelationStorageAdvanced(context.Context, *AlterReferenceRelationStorageRequest) (*emptypb.Empty, error) { + return nil, status.Error(codes.Unimplemented, "method AlterReferenceRelationStorageAdvanced not implemented") +} func (UnimplementedReferenceRelationsServiceServer) mustEmbedUnimplementedReferenceRelationsServiceServer() { } func (UnimplementedReferenceRelationsServiceServer) testEmbeddedByValue() {} @@ -242,6 +258,24 @@ func _ReferenceRelationsService_SyncReferenceRelations_Handler(srv interface{}, return interceptor(ctx, in, info, handler) } +func _ReferenceRelationsService_AlterReferenceRelationStorageAdvanced_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AlterReferenceRelationStorageRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ReferenceRelationsServiceServer).AlterReferenceRelationStorageAdvanced(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: ReferenceRelationsService_AlterReferenceRelationStorageAdvanced_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ReferenceRelationsServiceServer).AlterReferenceRelationStorageAdvanced(ctx, req.(*AlterReferenceRelationStorageRequest)) + } + return interceptor(ctx, in, info, handler) +} + // ReferenceRelationsService_ServiceDesc is the grpc.ServiceDesc for ReferenceRelationsService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -269,6 +303,10 @@ var ReferenceRelationsService_ServiceDesc = grpc.ServiceDesc{ MethodName: "SyncReferenceRelations", Handler: _ReferenceRelationsService_SyncReferenceRelations_Handler, }, + { + MethodName: "AlterReferenceRelationStorageAdvanced", + Handler: _ReferenceRelationsService_AlterReferenceRelationStorageAdvanced_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "protos/reference_relation.proto", diff --git a/protos/reference_relation.proto b/protos/reference_relation.proto index 96e0865ea..604dc05b2 100644 --- a/protos/reference_relation.proto +++ b/protos/reference_relation.proto @@ -51,4 +51,5 @@ service ReferenceRelationsService { rpc AlterReferenceRelationStorage(AlterReferenceRelationStorageRequest) returns (google.protobuf.Empty) {} rpc SyncReferenceRelations(SyncReferenceRelationsRequest) returns (google.protobuf.Empty) {} + rpc AlterReferenceRelationStorageAdvanced(AlterReferenceRelationStorageRequest) returns (google.protobuf.Empty) {} } diff --git a/qdb/mock/qdb.go b/qdb/mock/qdb.go index 6c51a01d2..3b655ac79 100644 --- a/qdb/mock/qdb.go +++ b/qdb/mock/qdb.go @@ -1410,21 +1410,6 @@ func (mr *MockQDBMockRecorder) NextRange(ctx, seqName, rangeSize any) *gomock.Ca return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NextRange", reflect.TypeOf((*MockQDB)(nil).NextRange), ctx, seqName, rangeSize) } -// NoWaitLockKeyRange mocks base method. -func (m *MockQDB) NoWaitLockKeyRange(ctx context.Context, id string) (*qdb.KeyRange, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NoWaitLockKeyRange", ctx, id) - ret0, _ := ret[0].(*qdb.KeyRange) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// NoWaitLockKeyRange indicates an expected call of NoWaitLockKeyRange. -func (mr *MockQDBMockRecorder) NoWaitLockKeyRange(ctx, id any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NoWaitLockKeyRange", reflect.TypeOf((*MockQDB)(nil).NoWaitLockKeyRange), ctx, id) -} - // RenameKeyRange mocks base method. func (m *MockQDB) RenameKeyRange(ctx context.Context, krId, ktIdNew string) error { m.ctrl.T.Helper() @@ -3016,21 +3001,6 @@ func (mr *MockXQDBMockRecorder) NextRange(ctx, seqName, rangeSize any) *gomock.C return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NextRange", reflect.TypeOf((*MockXQDB)(nil).NextRange), ctx, seqName, rangeSize) } -// NoWaitLockKeyRange mocks base method. -func (m *MockXQDB) NoWaitLockKeyRange(ctx context.Context, id string) (*qdb.KeyRange, error) { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "NoWaitLockKeyRange", ctx, id) - ret0, _ := ret[0].(*qdb.KeyRange) - ret1, _ := ret[1].(error) - return ret0, ret1 -} - -// NoWaitLockKeyRange indicates an expected call of NoWaitLockKeyRange. -func (mr *MockXQDBMockRecorder) NoWaitLockKeyRange(ctx, id any) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "NoWaitLockKeyRange", reflect.TypeOf((*MockXQDB)(nil).NoWaitLockKeyRange), ctx, id) -} - // OpenRouter mocks base method. func (m *MockXQDB) OpenRouter(ctx context.Context, rID string) error { m.ctrl.T.Helper() diff --git a/router/grpc/qrouter.go b/router/grpc/qrouter.go index b19b63238..ca884fd94 100644 --- a/router/grpc/qrouter.go +++ b/router/grpc/qrouter.go @@ -59,10 +59,17 @@ func (l *LocalQrouterServer) CreateReferenceRelations(ctx context.Context, reque // CreateReferenceRelations implements proto.ReferenceRelationsServiceServer. func (l *LocalQrouterServer) AlterReferenceRelationStorage(ctx context.Context, request *protos.AlterReferenceRelationStorageRequest) (*emptypb.Empty, error) { - if err := l.mgr.AlterReferenceRelationStorage(ctx, &rfqn.RelationFQN{ - RelationName: request.Relation.RelationName, - SchemaName: request.Relation.SchemaName, - }, request.ShardIds); err != nil { + if err := l.mgr.AlterReferenceRelationStorage(ctx, rfqn.RelationFQNFromProto(request.Relation), request.ShardIds); err != nil { + return nil, err + } + + return nil, nil +} + +// CreateReferenceRelations implements proto.ReferenceRelationsServiceServer. +func (l *LocalQrouterServer) AlterReferenceRelationStorageAdvanced(ctx context.Context, request *protos.AlterReferenceRelationStorageRequest) (*emptypb.Empty, error) { + + if err := l.mgr.AlterReferenceRelationStorage(ctx, rfqn.RelationFQNFromProto(request.Relation), request.ShardIds); err != nil { return nil, err } @@ -73,7 +80,7 @@ func (l *LocalQrouterServer) AlterReferenceRelationStorage(ctx context.Context, func (l *LocalQrouterServer) DropReferenceRelations(ctx context.Context, r *protos.DropReferenceRelationsRequest) (*emptypb.Empty, error) { for _, qualName := range r.GetRelations() { /* XXX: fix this to support schema */ - if err := l.mgr.DropReferenceRelation(ctx, &rfqn.RelationFQN{RelationName: qualName.RelationName, SchemaName: qualName.SchemaName}); err != nil { + if err := l.mgr.DropReferenceRelation(ctx, rfqn.RelationFQNFromProto(qualName)); err != nil { return nil, err } } diff --git a/test/feature/features/reference_relation.feature b/test/feature/features/reference_relation.feature index 267d99583..24bb7defc 100644 --- a/test/feature/features/reference_relation.feature +++ b/test/feature/features/reference_relation.feature @@ -304,7 +304,7 @@ Feature: Reference relation test When I run SQL on host "coordinator" """ - SYNC REFERENCE TABLE t ON sh3; + ALTER REFERENCE TABLE t STORAGE TO (sh1, sh2, sh3); """ Then command return code should be "0" @@ -404,3 +404,72 @@ Scenario: Ref relation sync fails when reference relations are locked in spqrgua """ reference relations already locked """ + +Scenario: Dropping shard from reference relation metadata works + When I run SQL on host "coordinator" + """ + CREATE REFERENCE TABLE t ON sh1, sh2; + """ + Then command return code should be "0" + + When I execute SQL on host "router" + """ + CREATE TABLE t(id int); + INSERT INTO t (id) VALUES(1); + """ + + When I run SQL on host "coordinator" + """ + ALTER REFERENCE TABLE t STORAGE TO (sh1); + """ + Then command return code should be "0" + + When I run SQL on host "coordinator" + """ + SHOW reference_relations; + """ + Then command return code should be "0" + And SQL result should match json + """ + [{ + "table_name": "t", + "schema_name": "public", + "schema_version": "1", + "shards": "[sh1]" + }] + """ + + When I execute SQL on host "router" + """ + INSERT INTO t (id) VALUES (2); + """ + Then command return code should be "0" + When I run SQL on host "shard1" + """ + SELECT * FROM t + """ + Then command return code should be "0" + And SQL result should match json_exactly + """ + [ + { + "id": 1 + }, + { + "id": 2 + } + ] + """ + When I run SQL on host "shard2" + """ + SELECT * FROM t + """ + Then command return code should be "0" + And SQL result should match json_exactly + """ + [ + { + "id": 1 + } + ] + """ \ No newline at end of file diff --git a/test/regress/schedule/router b/test/regress/schedule/router index 099d8a291..6ae6bad69 100644 --- a/test/regress/schedule/router +++ b/test/regress/schedule/router @@ -28,7 +28,7 @@ test: reference_table test: insert_processing test: sequence test: cte -test: cte_hashed.sql +test: cte_hashed test: ddl test: engine_v2 test: subplan diff --git a/test/regress/tests/console/expected/reference_table.out b/test/regress/tests/console/expected/reference_table.out index 8e72c473c..088ff8473 100644 --- a/test/regress/tests/console/expected/reference_table.out +++ b/test/regress/tests/console/expected/reference_table.out @@ -18,6 +18,8 @@ SYNC REFERENCE TABLES ON sh1; ERROR: SYNC REFERENCE TABLES/RELATIONS currently unsupported SYNC REFERENCE TABLE zz2 ON sh1; ERROR: request is unprocessable in router +ALTER REFERENCE TABLE zz2 STORAGE TO (sh1, sh3, sh4); +ERROR: request is unprocessable in router ALTER DISTRIBUTION 'REPLICATED' ALTER RELATION zz2 SCHEMA my_schema; alter relation ---------------------------------- @@ -27,6 +29,15 @@ ALTER DISTRIBUTION 'REPLICATED' ALTER RELATION zz2 SCHEMA my_schema; ALTER DISTRIBUTION 'REPLICATED' ALTER RELATION zz2 DISTRIBUTION KEY id; ERROR: setting distribution key is forbidden for reference relations +ALTER REFERENCE TABLE zz2 STORAGE TO (sh3); +ERROR: request is unprocessable in router +SHOW reference_relations; + table_name | schema_name | schema_version | shards | column_sequence_mapping +------------+-------------+----------------+-------------------+------------------------- + zz | public | 1 | [sh1 sh2 sh3 sh4] | map[] + zz2 | my_schema | 1 | [sh3 sh4] | map[] +(2 rows) + DROP REFERENCE RELATION zz2; relation_name --------------- diff --git a/test/regress/tests/console/expected/reference_table_1.out b/test/regress/tests/console/expected/reference_table_1.out index 27f74af0b..284fb4991 100644 --- a/test/regress/tests/console/expected/reference_table_1.out +++ b/test/regress/tests/console/expected/reference_table_1.out @@ -18,6 +18,8 @@ SYNC REFERENCE TABLES ON sh1; ERROR: SYNC REFERENCE TABLES/RELATIONS currently unsupported SYNC REFERENCE TABLE zz2 ON sh1; ERROR: can't lock relation "zz2": ERROR: relation "zz2" does not exist (SQLSTATE 42P01) +ALTER REFERENCE TABLE zz2 STORAGE TO (sh1, sh3, sh4); +ERROR: failed to alter reference relation storage: failed to sync relation on shard "sh1": can't lock relation "zz2": ERROR: relation "zz2" does not exist (SQLSTATE 42P01) ALTER DISTRIBUTION 'REPLICATED' ALTER RELATION zz2 SCHEMA my_schema; alter relation ---------------------------------- @@ -27,6 +29,19 @@ ALTER DISTRIBUTION 'REPLICATED' ALTER RELATION zz2 SCHEMA my_schema; ALTER DISTRIBUTION 'REPLICATED' ALTER RELATION zz2 DISTRIBUTION KEY id; ERROR: setting distribution key is forbidden for reference relations +ALTER REFERENCE TABLE zz2 STORAGE TO (sh3); + relation | shard +----------+------- + zz2 | sh3 +(1 row) + +SHOW reference_relations; + table_name | schema_name | schema_version | shards | column_sequence_mapping +------------+-------------+----------------+-------------------+------------------------- + zz | public | 1 | [sh1 sh2 sh3 sh4] | map[] + zz2 | my_schema | 1 | [sh3] | map[] +(2 rows) + DROP REFERENCE RELATION zz2; relation_name --------------- diff --git a/test/regress/tests/console/expected/reference_table_2.out b/test/regress/tests/console/expected/reference_table_2.out new file mode 100644 index 000000000..65cfc36bb --- /dev/null +++ b/test/regress/tests/console/expected/reference_table_2.out @@ -0,0 +1,111 @@ +CREATE REFERENCE TABLE zz; + create reference table +----------------------------- + table -> zz + shard id -> sh1,sh2,sh3,sh4 +(2 rows) + +CREATE REFERENCE TABLE zz2 ON sh3, sh4; + create reference table +------------------------ + table -> zz2 + shard id -> sh3,sh4 +(2 rows) + +CREATE REFERENCE RELATION zz2; +ERROR: reference relation zz2 already exists +SYNC REFERENCE TABLES ON sh1; +ERROR: SYNC REFERENCE TABLES/RELATIONS currently unsupported +SYNC REFERENCE TABLE zz2 ON sh1; +ERROR: request is unprocessable in router +ALTER REFERENCE TABLE zz2 STORAGE TO (sh1, sh3, sh4); + relation | shard +----------+------- + zz2 | sh1 + zz2 | sh3 + zz2 | sh4 +(3 rows) + +ALTER DISTRIBUTION 'REPLICATED' ALTER RELATION zz2 SCHEMA my_schema; + alter relation +---------------------------------- + distribution id -> REPLICATED + relation name -> my_schema.zz2 +(2 rows) + +ALTER DISTRIBUTION 'REPLICATED' ALTER RELATION zz2 DISTRIBUTION KEY id; +ERROR: setting distribution key is forbidden for reference relations +ALTER REFERENCE TABLE zz2 STORAGE TO (sh3); + relation | shard +----------+------- + zz2 | sh3 +(1 row) + +SHOW reference_relations; + table_name | schema_name | schema_version | shards | column_sequence_mapping +------------+-------------+----------------+-------------------+------------------------- + zz | public | 1 | [sh1 sh2 sh3 sh4] | map[] + zz2 | my_schema | 1 | [sh3 sh4] | map[] +(2 rows) + +DROP REFERENCE RELATION zz2; + relation_name +--------------- + zz2 +(1 row) + +--should fail +DROP REFERENCE RELATION zz2; +ERROR: reference relation "zz2" not found +CREATE REFERENCE RELATION r; + create reference table +----------------------------- + table -> r + shard id -> sh1,sh2,sh3,sh4 +(2 rows) + +DROP DISTRIBUTION 'REPLICATED' CASCADE; + distribution_id +----------------- + REPLICATED +(1 row) + +SHOW relations WHERE distribution_id = 'REPLICATED'; + relation_name | distribution_id | distribution_key | schema_name +---------------+-----------------+------------------+------------- +(0 rows) + +CREATE REFERENCE RELATION r; + create reference table +----------------------------- + table -> r + shard id -> sh1,sh2,sh3,sh4 +(2 rows) + +CREATE REFERENCE RELATION nsp1.rr; + create reference table +----------------------------- + table -> nsp1.rr + shard id -> sh1,sh2,sh3,sh4 +(2 rows) + +SHOW relations WHERE distribution_id = 'REPLICATED'; + relation_name | distribution_id | distribution_key | schema_name +---------------+-----------------+------------------+------------- + r | REPLICATED | | public + rr | REPLICATED | | nsp1 +(2 rows) + +SHOW reference_relations; + table_name | schema_name | schema_version | shards | column_sequence_mapping +------------+-------------+----------------+-------------------+------------------------- + r | public | 1 | [sh1 sh2 sh3 sh4] | map[] + rr | nsp1 | 1 | [sh1 sh2 sh3 sh4] | map[] +(2 rows) + +DROP DISTRIBUTION ALL CASCADE; + distribution_id +----------------- + REPLICATED +(1 row) + diff --git a/test/regress/tests/console/sql/reference_table.sql b/test/regress/tests/console/sql/reference_table.sql index e380db00b..859c68202 100644 --- a/test/regress/tests/console/sql/reference_table.sql +++ b/test/regress/tests/console/sql/reference_table.sql @@ -6,10 +6,14 @@ CREATE REFERENCE RELATION zz2; SYNC REFERENCE TABLES ON sh1; SYNC REFERENCE TABLE zz2 ON sh1; +ALTER REFERENCE TABLE zz2 STORAGE TO (sh1, sh3, sh4); ALTER DISTRIBUTION 'REPLICATED' ALTER RELATION zz2 SCHEMA my_schema; ALTER DISTRIBUTION 'REPLICATED' ALTER RELATION zz2 DISTRIBUTION KEY id; +ALTER REFERENCE TABLE zz2 STORAGE TO (sh3); +SHOW reference_relations; + DROP REFERENCE RELATION zz2; --should fail DROP REFERENCE RELATION zz2; diff --git a/yacc/console/ast.go b/yacc/console/ast.go index 248ee4ca2..5b1b0b7b5 100644 --- a/yacc/console/ast.go +++ b/yacc/console/ast.go @@ -217,6 +217,11 @@ type SyncReferenceTables struct { RelationSelector string } +type AlterReferenceTableStorage struct { + RelationSelector *rfqn.RelationFQN + Shards []string +} + // coordinator type RegisterRouter struct { @@ -449,6 +454,7 @@ func (*ShardDefinition) iStatement() {} func (*Kill) iStatement() {} func (*Invalidate) iStatement() {} func (*SyncReferenceTables) iStatement() {} +func (*AlterReferenceTableStorage) iStatement() {} func (*RegisterRouter) iStatement() {} func (*UnregisterRouter) iStatement() {} diff --git a/yacc/console/gram.go b/yacc/console/gram.go index ec4533ae5..bc3031395 100644 --- a/yacc/console/gram.go +++ b/yacc/console/gram.go @@ -73,8 +73,9 @@ type yySymType struct { redistribute *RedistributeKeyRange - invalidate *Invalidate - sync_reference_tables *SyncReferenceTables + invalidate *Invalidate + sync_reference_tables *SyncReferenceTables + alter_reference_table_storage *AlterReferenceTableStorage shutdown *Shutdown listen *Listen @@ -190,66 +191,67 @@ const INCREMENT = 57408 const SEQUENCE = 57409 const SCHEMA = 57410 const INDEX = 57411 -const SHARDS = 57412 -const ROUTERS = 57413 -const SHARD = 57414 -const HOST = 57415 -const RULE = 57416 -const COLUMNS = 57417 -const VERSION = 57418 -const HOSTS = 57419 -const SEQUENCES = 57420 -const IS_READ_ONLY = 57421 -const MOVE_STATS = 57422 -const BY = 57423 -const FROM = 57424 -const TO = 57425 -const WITH = 57426 -const UNITE = 57427 -const ALL = 57428 -const ADDRESS = 57429 -const FOR = 57430 -const CLIENT = 57431 -const BATCH = 57432 -const SIZE = 57433 -const NOWAIT = 57434 -const INVALIDATE = 57435 -const CACHE = 57436 -const SYNC = 57437 -const RETRY = 57438 -const DISTRIBUTED = 57439 -const IN = 57440 -const ON = 57441 -const DEFAULT = 57442 -const STALE = 57443 -const CLIENTS = 57444 -const IDENTITY = 57445 -const MURMUR = 57446 -const CITY = 57447 -const START = 57448 -const STOP = 57449 -const TRACE = 57450 -const MESSAGES = 57451 -const TASK = 57452 -const GROUP = 57453 -const SECONDS = 57454 -const WAIT = 57455 -const PANIC = 57456 -const VARCHAR = 57457 -const INTEGER = 57458 -const INT = 57459 -const TYPES = 57460 -const UUID = 57461 -const TYPE = 57462 -const CONTROL = 57463 -const POINT = 57464 -const OP = 57465 -const ASC = 57466 -const DESC = 57467 -const ORDER = 57468 -const OPERATOR = 57469 -const TSQOPENBR = 57470 -const TSQCLOSEBR = 57471 +const STORAGE = 57412 +const SHARDS = 57413 +const ROUTERS = 57414 +const SHARD = 57415 +const HOST = 57416 +const RULE = 57417 +const COLUMNS = 57418 +const VERSION = 57419 +const HOSTS = 57420 +const SEQUENCES = 57421 +const IS_READ_ONLY = 57422 +const MOVE_STATS = 57423 +const BY = 57424 +const FROM = 57425 +const TO = 57426 +const WITH = 57427 +const UNITE = 57428 +const ALL = 57429 +const ADDRESS = 57430 +const FOR = 57431 +const CLIENT = 57432 +const BATCH = 57433 +const SIZE = 57434 +const NOWAIT = 57435 +const INVALIDATE = 57436 +const CACHE = 57437 +const SYNC = 57438 +const RETRY = 57439 +const DISTRIBUTED = 57440 +const IN = 57441 +const ON = 57442 +const DEFAULT = 57443 +const STALE = 57444 +const CLIENTS = 57445 +const IDENTITY = 57446 +const MURMUR = 57447 +const CITY = 57448 +const START = 57449 +const STOP = 57450 +const TRACE = 57451 +const MESSAGES = 57452 +const TASK = 57453 +const GROUP = 57454 +const SECONDS = 57455 +const WAIT = 57456 +const PANIC = 57457 +const VARCHAR = 57458 +const INTEGER = 57459 +const INT = 57460 +const TYPES = 57461 +const UUID = 57462 +const TYPE = 57463 +const CONTROL = 57464 +const POINT = 57465 +const OP = 57466 +const ASC = 57467 +const DESC = 57468 +const ORDER = 57469 +const OPERATOR = 57470 +const TSQOPENBR = 57471 +const TSQCLOSEBR = 57472 var yyToknames = [...]string{ "$end", @@ -321,6 +323,7 @@ var yyToknames = [...]string{ "SEQUENCE", "SCHEMA", "INDEX", + "STORAGE", "SHARDS", "ROUTERS", "SHARD", @@ -389,307 +392,311 @@ const yyEofCode = 1 const yyErrCode = 2 const yyInitialStackSize = 16 -//line gram.y:1582 +//line gram.y:1597 //line yacctab:1 var yyExca = [...]int16{ -1, 1, 1, -1, -2, 0, - -1, 410, + -1, 416, 12, 0, 22, 0, 23, 0, - -2, 56, - -1, 411, + -2, 57, + -1, 417, 12, 0, 22, 0, 23, 0, - -2, 57, + -2, 58, } const yyPrivate = 57344 -const yyLast = 541 +const yyLast = 556 var yyAct = [...]int16{ - 351, 438, 405, 229, 353, 273, 190, 437, 349, 393, - 350, 302, 288, 287, 280, 286, 279, 272, 167, 225, - 365, 163, 175, 368, 367, 365, 358, 361, 360, 362, - 363, 364, 361, 360, 362, 363, 364, 217, 416, 367, - 365, 456, 457, 216, 368, 367, 365, 361, 360, 362, - 363, 364, 134, 361, 360, 362, 363, 364, 157, 156, - 161, 155, 271, 36, 35, 37, 361, 360, 362, 274, - 275, 276, 424, 277, 69, 178, 179, 152, 181, 327, - 328, 420, 301, 263, 235, 211, 39, 38, 44, 45, - 180, 173, 29, 28, 32, 33, 34, 40, 41, 81, - 182, 376, 50, 46, 51, 42, 80, 78, 210, 185, - 79, 184, 172, 233, 171, 67, 158, 430, 72, 209, - 74, 354, 355, 356, 270, 77, 86, 159, 150, 259, - 75, 366, 258, 377, 343, 92, 366, 230, 325, 149, - 291, 68, 43, 70, 198, 199, 153, 231, 178, 265, - 47, 366, 49, 48, 208, 316, 169, 366, 133, 170, - 158, 221, 158, 30, 31, 148, 256, 228, 76, 223, - 366, 159, 151, 159, 236, 239, 213, 234, 87, 417, - 418, 242, 197, 244, 245, 246, 247, 239, 232, 251, - 63, 425, 89, 64, 158, 252, 253, 254, 255, 88, - 240, 58, 241, 57, 243, 159, 388, 158, 158, 158, - 196, 195, 264, 59, 266, 354, 355, 356, 159, 159, - 159, 419, 158, 403, 90, 261, 278, 189, 194, 359, - 314, 329, 293, 159, 285, 320, 296, 224, 66, 395, - 136, 319, 297, 132, 238, 58, 183, 57, 379, 166, - 397, 135, 137, 344, 380, 138, 289, 59, 168, 295, - 262, 257, 292, 147, 323, 298, 324, 186, 174, 299, - 317, 164, 214, 215, 164, 160, 237, 318, 436, 321, - 165, 422, 322, 165, 348, 83, 401, 162, 335, 330, - 200, 177, 334, 347, 220, 336, 333, 294, 204, 205, - 222, 340, 289, 154, 73, 71, 391, 206, 207, 202, - 176, 346, 337, 373, 337, 144, 143, 369, 370, 371, - 378, 372, 402, 219, 56, 452, 381, 452, 55, 434, - 384, 374, 332, 386, 383, 338, 54, 460, 385, 82, - 84, 453, 431, 362, 331, 394, 139, 140, 141, 142, - 188, 146, 387, 312, 62, 389, 53, 396, 61, 390, - 406, 192, 398, 339, 268, 313, 60, 361, 360, 362, - 193, 304, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 423, 310, 311, 421, 136, 306, 305, 158, 426, - 282, 309, 267, 290, 249, 307, 135, 137, 191, 159, - 138, 281, 283, 439, 406, 284, 440, 427, 433, 432, - 192, 445, 226, 397, 341, 441, 428, 337, 332, 345, - 435, 442, 446, 227, 212, 65, 52, 1, 382, 394, - 447, 443, 439, 93, 326, 24, 97, 449, 448, 450, - 451, 23, 406, 375, 458, 454, 315, 20, 459, 19, - 18, 17, 16, 439, 461, 15, 13, 14, 8, 9, - 110, 111, 109, 300, 94, 455, 95, 103, 104, 105, - 107, 357, 269, 342, 117, 96, 118, 108, 116, 218, - 203, 128, 250, 112, 113, 115, 187, 260, 201, 98, - 99, 100, 114, 25, 22, 27, 119, 145, 127, 102, - 26, 101, 21, 400, 399, 352, 429, 392, 6, 5, - 4, 3, 7, 12, 106, 130, 91, 11, 120, 10, - 131, 85, 123, 122, 124, 2, 444, 404, 303, 129, - 308, 121, 248, 0, 0, 0, 0, 0, 0, 125, - 126, + 356, 445, 411, 232, 358, 277, 192, 444, 306, 399, + 354, 355, 291, 290, 292, 284, 276, 283, 169, 228, + 370, 177, 363, 165, 373, 372, 370, 366, 365, 367, + 368, 369, 220, 366, 365, 367, 368, 369, 158, 422, + 464, 465, 219, 157, 275, 431, 366, 365, 367, 332, + 333, 70, 135, 373, 372, 370, 426, 94, 305, 159, + 98, 163, 366, 365, 367, 368, 369, 278, 279, 280, + 267, 281, 238, 214, 182, 175, 180, 181, 381, 183, + 213, 187, 154, 186, 111, 112, 110, 174, 95, 236, + 96, 104, 105, 106, 108, 173, 68, 437, 118, 97, + 119, 109, 117, 184, 212, 129, 160, 113, 114, 116, + 359, 360, 361, 99, 100, 101, 115, 161, 274, 69, + 120, 71, 128, 152, 103, 263, 102, 262, 348, 330, + 295, 233, 371, 269, 151, 423, 424, 93, 371, 107, + 131, 234, 87, 121, 211, 200, 201, 124, 123, 125, + 180, 371, 155, 382, 130, 320, 122, 171, 226, 259, + 172, 150, 134, 224, 126, 127, 199, 371, 153, 231, + 432, 203, 394, 160, 383, 198, 239, 242, 425, 237, + 216, 160, 160, 245, 161, 247, 248, 249, 250, 242, + 235, 254, 161, 161, 88, 197, 282, 255, 256, 257, + 258, 243, 160, 244, 196, 246, 359, 360, 361, 90, + 372, 370, 409, 161, 364, 268, 89, 270, 366, 365, + 367, 368, 369, 260, 318, 82, 160, 160, 265, 289, + 191, 227, 81, 79, 334, 297, 80, 161, 161, 300, + 401, 91, 64, 325, 73, 65, 75, 160, 133, 324, + 59, 78, 58, 59, 385, 58, 301, 76, 161, 322, + 386, 403, 137, 60, 241, 240, 60, 302, 328, 185, + 329, 303, 321, 136, 138, 168, 349, 139, 166, 217, + 218, 323, 293, 326, 166, 202, 327, 167, 170, 299, + 266, 67, 335, 167, 261, 77, 296, 352, 147, 188, + 341, 176, 162, 345, 429, 353, 84, 74, 164, 179, + 443, 149, 407, 293, 340, 351, 223, 378, 374, 375, + 376, 339, 377, 371, 338, 384, 225, 298, 156, 397, + 178, 387, 342, 342, 441, 390, 379, 207, 208, 389, + 145, 144, 57, 391, 408, 222, 209, 210, 205, 72, + 400, 460, 56, 392, 343, 148, 460, 55, 393, 395, + 346, 438, 396, 469, 402, 412, 428, 367, 190, 404, + 461, 54, 467, 63, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 62, 83, 85, 337, 430, 61, 427, + 316, 140, 141, 142, 143, 433, 160, 194, 336, 366, + 365, 367, 317, 344, 193, 195, 272, 161, 308, 446, + 412, 434, 447, 271, 137, 440, 194, 439, 403, 314, + 315, 294, 453, 310, 309, 136, 138, 449, 313, 139, + 229, 350, 311, 454, 346, 448, 400, 455, 435, 446, + 451, 230, 450, 342, 457, 456, 458, 459, 286, 412, + 337, 466, 462, 37, 36, 38, 468, 252, 442, 285, + 287, 446, 470, 288, 215, 66, 53, 1, 388, 331, + 24, 23, 380, 319, 20, 19, 40, 39, 45, 46, + 18, 17, 30, 29, 33, 34, 35, 41, 42, 16, + 15, 13, 51, 47, 52, 43, 14, 8, 9, 304, + 463, 362, 273, 347, 221, 206, 253, 189, 264, 204, + 26, 25, 22, 28, 146, 27, 21, 406, 405, 357, + 436, 398, 6, 5, 4, 3, 7, 12, 92, 11, + 10, 132, 86, 44, 2, 452, 410, 307, 312, 251, + 0, 48, 0, 50, 49, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 31, 32, } var yyPact = [...]int16{ - 57, -1000, 338, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + 447, -1000, 353, -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, 185, 141, - 7, 33, 58, 225, 225, 122, 429, 154, 381, -1000, - 225, 225, 225, 225, 283, 282, 201, 71, 36, 254, - -60, -62, -1000, -1000, -1000, -1000, -1000, 384, 214, 203, - -1000, -1000, -1000, 220, 180, 195, -1000, 70, 5, 2, - -20, -1000, 207, 266, 205, 384, -21, 384, 220, 177, - 1, -1, -1000, 206, -1000, 326, -1000, -1000, -1000, -1000, - -1000, 429, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 190, + 193, -13, 10, 184, 246, 246, 138, 53, 158, 410, + -1000, 246, 246, 246, 246, 308, 307, 249, 66, 41, + 279, -79, -84, -1000, -1000, -1000, -1000, -1000, 392, 241, + 223, -1000, -1000, -1000, 230, 206, 225, -1000, 70, -15, + -24, -37, -1000, 240, 286, 222, 392, -38, 392, 230, + 200, -28, -30, -1000, 238, -1000, 344, -1000, -1000, -1000, + -1000, -1000, 53, -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, 394, -1000, -1000, -1000, -1000, -1000, -1000, 354, 146, - 128, 127, 98, 384, 204, -1000, 262, 384, -1000, 60, - -1000, 17, -2, -26, 217, -79, -85, 270, -1000, -1000, - 218, 85, 160, 408, -1000, -1000, 384, 49, 408, 4, - 345, -1000, -27, 190, 158, -1000, -1000, 266, -1000, 266, - 384, 266, 384, 384, 384, 384, 384, 385, 384, -1000, - -1000, -1000, -1000, -1000, 384, 384, 384, 384, 79, -1000, - -1000, -1000, 198, -1000, 32, 29, 195, 197, -1000, -1000, - -28, 384, 50, 384, -1000, -1000, 377, 349, 24, -56, - -46, 144, 386, 157, 381, 191, 379, -1000, 41, -1000, - 200, 384, 235, -1000, -1000, 156, -1000, -1000, -1000, -1000, - -1000, -1000, 266, -1000, -1000, -1000, 266, -1000, -29, 367, - 340, -1000, 149, -1000, 65, -1000, 381, 408, 169, 163, - 195, -1000, 408, 384, -1000, 384, 39, -34, -1000, -1000, - 159, -46, 319, -1000, 238, 234, 230, -1000, 386, 301, - -1000, -1000, -1000, -1000, 347, 381, 401, -1000, 35, 187, - 415, 408, 384, -1000, 224, 112, -1000, -1000, -1000, -1000, - -100, 148, 34, -1000, -1000, 367, 367, 367, -1000, 367, - -1000, -1000, 384, -1000, 386, -9, 42, -1000, -1000, 384, - -1000, -1000, 186, -1000, -1000, 384, -1000, 345, -1000, 384, - 405, -1000, -46, -1000, -1000, -1000, 299, 386, 123, -1000, - 401, 381, -1000, 236, 384, -1000, 164, -1000, 112, 237, - -1000, 228, -1000, 296, -1000, -1000, -1000, -1000, 142, 384, - 367, 367, 367, 367, 367, 367, 367, 367, 367, 322, - 322, 8, 13, -1000, 404, 129, -30, 345, -1000, 221, - 384, -1000, -1000, -40, -1000, -1000, 108, -1000, 384, -1000, - 401, 381, 403, -1000, 11, 318, 237, 112, 304, -1000, - -1000, 219, 384, 384, 402, -1000, -1000, 322, 322, -1000, - 47, 47, 348, 348, 8, 28, -1000, -1000, -1000, -1000, - 384, -1000, 112, -1000, -1000, 407, 49, 401, 384, -1000, - 345, 384, -1000, -1000, -1000, 18, -1000, 314, -1000, -46, - -83, 384, -1000, 400, 49, -1000, -1000, -1000, -1000, -1000, - 312, -1000, 384, -1000, -1000, -1000, -1000, -1000, -1000, -1000, - -1000, -1000, + -1000, -1000, 400, -1000, -1000, -1000, -1000, -1000, -1000, 389, + 121, 111, 91, 81, 392, 198, -1000, 230, 301, 392, + -1000, 49, -1000, 1, -31, -39, 224, -81, -91, 292, + -1000, -1000, 243, 73, 153, 426, -1000, -1000, 392, 42, + 426, -21, 381, -1000, -40, 178, 177, -1000, -1000, 286, + -1000, 286, 392, 286, 392, 392, 392, 392, 392, 448, + 392, -1000, -1000, -1000, -1000, -1000, 392, 392, 392, 392, + 71, -1000, -1000, 426, -1000, 231, -1000, 26, 24, 225, + 227, -1000, -1000, -42, 392, 33, 392, -1000, -1000, 398, + 391, 17, -75, -49, 113, 444, 151, 410, 217, 407, + -1000, 30, -1000, 234, 392, 265, -1000, -1000, 169, -1000, + -1000, -1000, -1000, -1000, -1000, 286, -1000, -1000, -1000, 286, + -1000, -54, 404, 377, -1000, 142, -1000, 64, -1000, 410, + 189, 426, 176, 170, 225, -1000, 426, 392, -1000, 392, + 29, -65, -1000, -1000, 161, -49, 373, -1000, 266, 263, + 256, -1000, 444, 320, -1000, -1000, -1000, -1000, 387, 410, + 421, -1000, 28, 210, 427, 426, 392, -1000, 245, 102, + -1000, -1000, -1000, -1000, -105, 132, 43, -1000, -1000, 404, + 404, 404, -1000, 404, -1000, -1000, 392, -1000, 444, -33, + 61, -1000, 90, -1000, 392, -1000, -1000, 192, -1000, -1000, + 392, -1000, 381, -1000, 392, 437, -1000, -49, -1000, -1000, + -1000, 319, 444, 88, -1000, 421, 410, -1000, 258, 392, + -1000, 164, -1000, 102, 248, -1000, 254, -1000, 318, -1000, + -1000, -1000, -1000, 130, 392, 404, 404, 404, 404, 404, + 404, 404, 404, 404, 346, 346, 8, 14, -1000, 430, + 85, -56, 381, 342, -1000, 244, 392, -1000, -1000, -68, + -1000, -1000, 86, -1000, 392, -1000, 421, 410, 425, -1000, + -10, 337, 248, 102, 309, -1000, -1000, 251, 392, 392, + 422, -1000, -1000, 346, 346, -1000, 27, 27, 380, 380, + 8, 199, -1000, -1000, -1000, -1000, 392, -1000, 410, 102, + -1000, -1000, 418, 42, 421, 392, -1000, 381, 392, -1000, + -1000, -1000, 6, -1000, 343, -1000, -49, -85, 392, -1000, + 347, 405, 42, -1000, -1000, -1000, -1000, -1000, 338, -1000, + 392, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, + -1000, } var yyPgo = [...]int16{ - 0, 532, 530, 11, 528, 14, 16, 2, 527, 13, - 0, 526, 6, 525, 305, 304, 521, 520, 519, 517, - 516, 135, 513, 512, 511, 510, 509, 508, 19, 336, - 328, 324, 8, 12, 507, 506, 3, 10, 505, 9, - 504, 503, 4, 502, 500, 497, 495, 494, 493, 488, - 487, 18, 486, 482, 480, 17, 479, 15, 473, 5, - 22, 472, 471, 465, 463, 459, 458, 457, 456, 455, - 452, 451, 450, 449, 447, 446, 443, 1, 7, 441, - 435, 434, 428, 427, 426, 21, 425, 424, 420, + 0, 539, 538, 8, 537, 15, 17, 2, 536, 12, + 0, 535, 6, 534, 349, 307, 532, 531, 530, 529, + 528, 137, 527, 526, 525, 524, 523, 522, 19, 357, + 352, 342, 10, 14, 521, 520, 3, 11, 519, 9, + 518, 517, 4, 516, 515, 514, 513, 512, 511, 510, + 509, 508, 18, 507, 506, 505, 16, 504, 13, 503, + 5, 21, 502, 501, 500, 499, 498, 497, 496, 491, + 490, 489, 481, 480, 475, 474, 473, 472, 1, 7, + 471, 470, 469, 468, 467, 466, 23, 465, 464, 458, } var yyR1 = [...]int8{ - 0, 83, 84, 84, 13, 13, 13, 13, 13, 13, + 0, 84, 85, 85, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 12, 9, 9, 9, 9, 10, 10, 11, 11, 28, - 28, 28, 7, 8, 8, 2, 2, 4, 4, 3, + 13, 12, 9, 9, 9, 9, 10, 10, 11, 11, + 28, 28, 28, 7, 8, 8, 2, 2, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 1, 1, 16, 16, 16, 16, 16, - 17, 17, 60, 60, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 23, 24, 24, 24, 26, 26, - 27, 43, 45, 45, 45, 45, 45, 32, 32, 77, - 78, 78, 38, 37, 37, 51, 51, 33, 33, 34, - 34, 39, 35, 35, 50, 50, 49, 54, 54, 86, - 86, 85, 85, 87, 87, 58, 58, 58, 25, 25, - 25, 25, 25, 36, 36, 36, 44, 63, 63, 63, - 62, 62, 64, 64, 53, 53, 52, 52, 18, 19, - 19, 20, 20, 21, 21, 21, 21, 21, 21, 21, + 3, 3, 3, 3, 1, 1, 16, 16, 16, 16, + 16, 17, 17, 61, 61, 23, 23, 23, 23, 23, + 23, 23, 23, 23, 23, 23, 24, 24, 24, 26, + 26, 27, 43, 45, 45, 45, 45, 45, 32, 32, + 78, 79, 79, 38, 37, 37, 52, 52, 33, 33, + 34, 34, 39, 35, 35, 51, 51, 50, 55, 55, + 87, 87, 86, 86, 88, 88, 59, 59, 59, 25, + 25, 25, 25, 25, 36, 36, 36, 44, 64, 64, + 64, 63, 63, 65, 65, 54, 54, 53, 53, 18, + 19, 19, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 21, 66, 29, 56, 56, 56, 55, 55, 59, 59, - 59, 59, 59, 59, 59, 61, 61, 42, 42, 42, - 88, 88, 41, 40, 40, 5, 5, 5, 5, 6, - 6, 30, 30, 31, 31, 57, 57, 65, 14, 15, - 69, 22, 22, 70, 76, 76, 71, 71, 71, 71, - 75, 75, 72, 68, 67, 47, 47, 47, 47, 48, - 48, 73, 74, 74, 79, 79, 80, 80, 80, 80, - 82, 82, 81, 81, 81, 46, 46, + 21, 21, 67, 29, 57, 57, 57, 56, 56, 60, + 60, 60, 60, 60, 60, 60, 62, 62, 42, 42, + 42, 89, 89, 41, 40, 40, 5, 5, 5, 5, + 6, 6, 30, 30, 31, 31, 58, 58, 66, 14, + 15, 70, 22, 22, 71, 77, 77, 72, 72, 72, + 72, 76, 76, 73, 69, 68, 47, 47, 47, 47, + 48, 48, 49, 74, 75, 75, 80, 80, 81, 81, + 81, 81, 83, 83, 82, 82, 82, 46, 46, } var yyR2 = [...]int8{ 0, 2, 0, 1, 0, 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, 2, 1, 1, 1, 1, 1, - 1, 3, 1, 3, 1, 1, 1, 1, 3, 1, - 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 2, 0, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 0, 2, 4, 3, 4, 4, 5, - 4, 4, 4, 5, 4, 2, 2, 2, 4, 4, - 3, 2, 2, 4, 2, 5, 4, 3, 1, 2, - 1, 3, 4, 2, 1, 6, 6, 3, 0, 3, - 1, 2, 2, 0, 1, 2, 2, 6, 5, 1, - 0, 1, 1, 1, 1, 2, 3, 0, 2, 2, - 2, 6, 10, 3, 2, 0, 4, 1, 1, 0, - 4, 0, 3, 0, 1, 3, 0, 3, 6, 1, - 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 1, 3, 1, 3, 1, 1, 1, 1, 3, + 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, + 3, 3, 3, 2, 0, 2, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 2, 4, 3, 4, 4, + 5, 4, 4, 4, 5, 4, 2, 2, 2, 4, + 4, 3, 2, 2, 4, 2, 5, 4, 3, 1, + 2, 1, 3, 4, 2, 1, 6, 6, 3, 0, + 3, 1, 2, 2, 0, 1, 2, 2, 6, 5, + 1, 0, 1, 1, 1, 1, 2, 3, 0, 2, + 2, 2, 6, 10, 3, 2, 0, 4, 1, 1, + 0, 4, 0, 3, 0, 1, 3, 0, 3, 6, + 1, 2, 1, 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, 1, 1, 1, - 1, 2, 4, 3, 3, 0, 3, 1, 1, 2, - 1, 1, 2, 2, 1, 3, 0, 1, 1, 1, - 1, 0, 3, 1, 0, 1, 1, 1, 2, 1, - 3, 9, 8, 5, 4, 1, 3, 2, 3, 2, - 6, 3, 3, 4, 3, 0, 6, 7, 7, 7, - 3, 0, 4, 2, 1, 2, 3, 2, 3, 5, - 6, 5, 3, 3, 5, 4, 5, 4, 5, 4, - 2, 0, 2, 1, 0, 5, 4, + 1, 1, 2, 4, 3, 3, 0, 3, 1, 1, + 2, 1, 1, 2, 2, 1, 3, 0, 1, 1, + 1, 1, 0, 3, 1, 0, 1, 1, 1, 2, + 1, 3, 9, 8, 5, 4, 1, 3, 2, 3, + 2, 6, 3, 3, 4, 3, 0, 6, 7, 7, + 7, 3, 0, 4, 2, 1, 2, 3, 2, 3, + 5, 6, 9, 5, 3, 3, 5, 4, 5, 4, + 5, 4, 2, 0, 2, 1, 0, 5, 4, } var yyChk = [...]int16{ - -1000, -83, -13, -24, -25, -26, -27, -23, -66, -65, - -18, -19, -22, -68, -67, -69, -70, -71, -72, -73, - -74, -43, -47, -79, -80, -48, -44, -46, 36, 35, - 106, 107, 37, 38, 39, 7, 6, 8, 30, 29, - 40, 41, 48, 85, 31, 32, 46, 93, 96, 95, - 45, 47, -84, 18, -29, -30, -31, 62, 60, 72, - -29, -30, -31, 49, 52, -86, 97, 108, 108, 41, - 110, -14, 60, -15, 62, 72, 110, 67, 49, 52, - 48, 41, -14, 60, -14, -16, 4, 56, 77, 70, - 102, -20, -21, 4, 35, 37, 46, 7, 60, 61, - 62, 72, 70, 38, 39, 40, 85, 41, 48, 33, - 31, 32, 54, 55, 63, 56, 49, 45, 47, 67, - 89, 102, 94, 93, 95, 110, 111, 69, 52, 100, - 86, -17, 89, 4, -9, 15, 4, 16, 19, -14, - -14, -14, -14, 33, 33, -45, -15, 62, 94, 68, - 57, 101, 41, 110, 49, 121, 121, -10, 4, 15, - 61, -10, 84, -85, 54, 63, 69, -51, 63, 86, - 89, 109, 110, 111, 61, -60, 44, 86, -10, -10, - 111, -10, -85, 69, 110, 110, 61, -52, 24, -21, - -12, 4, 16, 16, 82, 83, 83, 84, -10, -10, - 86, -49, 47, -54, 36, 37, 45, 46, 94, 102, - 110, 111, -87, -85, 55, 56, 122, 122, -56, 53, - 24, -10, 82, 84, 77, -28, 4, 15, -10, -36, - 88, 98, -28, 109, -12, 111, -10, 86, 86, -10, - -60, -60, -10, -60, -10, -10, -10, -10, -1, 9, - -53, -10, -10, -10, -10, -10, 87, 63, 100, 100, - -50, -51, 63, 111, -10, 99, -10, 15, 15, -61, - 100, 118, -55, -59, 115, 116, 117, 119, 82, -6, - -5, 15, 4, 16, 19, 77, -57, -9, -33, 65, - 14, 99, 62, -10, 62, 24, -10, 86, -60, -60, - -64, 111, -3, -4, 4, 20, 19, 28, -2, 24, - 15, 16, 13, 25, 81, -75, 90, -9, -28, 72, - 72, -51, -28, -10, -10, 99, -81, 113, 114, 72, - -55, 25, 13, 58, 58, 58, -6, 13, 34, 16, - -57, 13, -58, 99, 66, 4, -28, -10, 60, -32, - -37, -10, -38, -42, 103, 104, 105, -62, 126, 81, - 20, 19, 21, 22, 23, 12, 123, 11, 10, -3, - -3, -3, -3, -10, -6, -76, 110, 91, -10, 62, - 68, -10, -82, -12, -10, -59, 34, -5, 83, -9, - -57, 70, -34, -39, -10, 75, -32, 13, -33, -40, - -41, 58, 26, 81, -8, -7, -10, -3, -3, -3, - -3, -3, -3, -3, -3, -3, 25, 50, 51, 92, - 111, -12, 60, -10, 112, 83, -10, -57, 13, -35, - 106, 24, -33, -37, 25, -88, 59, -78, -77, -10, - -7, 13, -10, -32, -11, 4, 15, -36, -39, -12, - -78, -42, 13, 27, -59, -63, 124, 125, -7, -36, - 25, -77, + -1000, -84, -13, -24, -25, -26, -27, -23, -67, -66, + -18, -19, -22, -69, -68, -70, -71, -72, -73, -74, + -75, -43, -47, -80, -81, -48, -49, -44, -46, 36, + 35, 107, 108, 37, 38, 39, 7, 6, 8, 30, + 29, 40, 41, 48, 86, 31, 32, 46, 94, 97, + 96, 45, 47, -85, 18, -29, -30, -31, 62, 60, + 73, -29, -30, -31, 49, 52, -87, 98, 109, 109, + 41, 111, -14, 60, -15, 62, 73, 111, 67, 49, + 52, 48, 41, -14, 60, -14, -16, 4, 56, 78, + 71, 103, -20, -21, 4, 35, 37, 46, 7, 60, + 61, 62, 73, 71, 38, 39, 40, 86, 41, 48, + 33, 31, 32, 54, 55, 63, 56, 49, 45, 47, + 67, 90, 103, 95, 94, 96, 111, 112, 69, 52, + 101, 87, -17, 90, 4, -9, 15, 4, 16, 19, + -14, -14, -14, -14, 33, 33, -45, 49, -15, 62, + 95, 68, 57, 102, 41, 111, 49, 122, 122, -10, + 4, 15, 61, -10, 85, -86, 54, 63, 69, -52, + 63, 87, 90, 110, 111, 112, 61, -61, 44, 87, + -10, -10, 112, -10, -86, 69, 111, 111, 61, -53, + 24, -21, -12, 4, 16, 16, 83, 84, 84, 85, + -10, -10, 87, -86, -50, 47, -55, 36, 37, 45, + 46, 95, 103, 111, 112, -88, -86, 55, 56, 123, + 123, -57, 53, 24, -10, 83, 85, 78, -28, 4, + 15, -10, -36, 89, 99, -28, 110, -12, 112, -10, + 87, 87, -10, -61, -61, -10, -61, -10, -10, -10, + -10, -1, 9, -54, -10, -10, -10, -10, -10, 88, + -28, 63, 101, 101, -51, -52, 63, 112, -10, 100, + -10, 15, 15, -62, 101, 119, -56, -60, 116, 117, + 118, 120, 83, -6, -5, 15, 4, 16, 19, 78, + -58, -9, -33, 65, 14, 100, 62, -10, 62, 24, + -10, 87, -61, -61, -65, 112, -3, -4, 4, 20, + 19, 28, -2, 24, 15, 16, 13, 25, 82, -76, + 91, -9, 70, -28, 73, 73, -52, -28, -10, -10, + 100, -82, 114, 115, 73, -56, 25, 13, 58, 58, + 58, -6, 13, 34, 16, -58, 13, -59, 100, 66, + 4, -28, -10, 60, -32, -37, -10, -38, -42, 104, + 105, 106, -63, 127, 82, 20, 19, 21, 22, 23, + 12, 124, 11, 10, -3, -3, -3, -3, -10, -6, + -77, 111, 92, 84, -10, 62, 68, -10, -83, -12, + -10, -60, 34, -5, 84, -9, -58, 71, -34, -39, + -10, 76, -32, 13, -33, -40, -41, 58, 26, 82, + -8, -7, -10, -3, -3, -3, -3, -3, -3, -3, + -3, -3, 25, 50, 51, 93, 112, -12, 24, 60, + -10, 113, 84, -10, -58, 13, -35, 107, 24, -33, + -37, 25, -89, 59, -79, -78, -10, -7, 13, -10, + -58, -32, -11, 4, 15, -36, -39, -12, -79, -42, + 13, 27, -60, -64, 125, 126, -7, 25, -36, 25, + -78, } var yyDef = [...]int16{ 4, -2, 2, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 0, 120, - 0, 0, 0, 0, 0, 0, 149, 0, 0, 244, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 3, 85, 86, 87, 0, 0, 0, - 128, 129, 130, 0, 0, 0, 119, 0, 0, 0, - 0, 74, 0, 73, 0, 0, 0, 0, 0, 0, - 0, 0, 191, 0, 227, 146, 65, 66, 67, 68, - 69, 150, 151, 153, 154, 155, 156, 157, 158, 159, + 22, 23, 24, 25, 26, 27, 28, 29, 30, 0, + 121, 0, 0, 0, 0, 0, 0, 150, 0, 0, + 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 3, 86, 87, 88, 0, 0, + 0, 129, 130, 131, 0, 0, 0, 120, 0, 0, + 0, 0, 75, 0, 74, 0, 0, 0, 0, 0, + 0, 0, 0, 192, 0, 228, 147, 66, 67, 68, + 69, 70, 151, 152, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, - 190, 0, 70, 71, 243, 31, 32, 33, 0, 0, - 0, 0, 0, 0, 0, 91, 0, 0, 245, 0, - 247, 0, 0, 0, 0, 0, 0, 195, 35, 36, - 0, 0, 0, 0, 121, 122, 0, 135, 0, 0, - 0, 90, 0, 0, 0, 76, 72, 73, 229, 73, - 0, 73, 0, 0, 0, 0, 0, 63, 0, 152, - 231, 232, 30, 34, 0, 0, 0, 0, 0, 252, - 253, 92, 0, 94, 0, 0, 0, 0, 246, 248, - 0, 0, 0, 0, 123, 124, 0, 0, 206, 0, - 0, 0, 0, 0, 0, 108, 39, 40, 0, 136, - 0, 0, 0, 88, 89, 0, 257, 259, 75, 228, - 77, 78, 73, 80, 81, 82, 73, 84, 143, 0, - 0, 144, 0, 233, 241, 242, 0, 0, 0, 0, - 116, 114, 0, 0, 255, 0, 0, 264, 266, 192, - 0, 0, 0, 197, 198, 200, 201, 204, 0, 0, - 219, 215, 216, 217, 0, 0, 224, 225, 127, 0, - 0, 0, 0, 134, 0, 0, 256, 258, 79, 83, - 141, 0, 64, 49, 50, 0, 0, 0, 47, 0, - 45, 46, 0, 147, 0, 235, 0, 251, 93, 0, - 96, 115, 0, 254, 249, 0, 265, 261, 263, 0, - 193, 194, 0, 199, 202, 203, 0, 0, 0, 218, - 223, 0, 131, 0, 0, 41, 0, 133, 0, 108, - 98, 214, 104, 0, 207, 208, 209, 148, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 51, - 52, 62, 0, 145, 230, 236, 0, 0, 95, 0, - 0, 250, 262, 0, 205, 196, 0, 220, 0, 226, - 125, 0, 107, 110, 113, 0, 108, 0, 0, 103, - 213, 211, 0, 0, 142, 44, 42, 53, 54, 55, - -2, -2, 58, 59, 60, 61, 48, 237, 238, 239, - 0, 240, 0, 118, 260, 0, 135, 126, 0, 111, - 0, 0, 105, 97, 106, 0, 210, 0, 100, 0, - 139, 0, 234, 117, 135, 37, 38, 222, 109, 112, - 0, 212, 0, 102, 99, 140, 137, 138, 43, 221, - 132, 101, + 190, 191, 0, 71, 72, 244, 32, 33, 34, 0, + 0, 0, 0, 0, 0, 0, 92, 0, 0, 0, + 246, 0, 248, 0, 0, 0, 0, 0, 0, 196, + 36, 37, 0, 0, 0, 0, 122, 123, 0, 136, + 0, 0, 0, 91, 0, 0, 0, 77, 73, 74, + 230, 74, 0, 74, 0, 0, 0, 0, 0, 64, + 0, 153, 232, 233, 31, 35, 0, 0, 0, 0, + 0, 254, 255, 0, 93, 0, 95, 0, 0, 0, + 0, 247, 249, 0, 0, 0, 0, 124, 125, 0, + 0, 207, 0, 0, 0, 0, 0, 0, 109, 40, + 41, 0, 137, 0, 0, 0, 89, 90, 0, 259, + 261, 76, 229, 78, 79, 74, 81, 82, 83, 74, + 85, 144, 0, 0, 145, 0, 234, 242, 243, 0, + 0, 0, 0, 0, 117, 115, 0, 0, 257, 0, + 0, 266, 268, 193, 0, 0, 0, 198, 199, 201, + 202, 205, 0, 0, 220, 216, 217, 218, 0, 0, + 225, 226, 128, 0, 0, 0, 0, 135, 0, 0, + 258, 260, 80, 84, 142, 0, 65, 50, 51, 0, + 0, 0, 48, 0, 46, 47, 0, 148, 0, 236, + 0, 253, 0, 94, 0, 97, 116, 0, 256, 250, + 0, 267, 263, 265, 0, 194, 195, 0, 200, 203, + 204, 0, 0, 0, 219, 224, 0, 132, 0, 0, + 42, 0, 134, 0, 109, 99, 215, 105, 0, 208, + 209, 210, 149, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 52, 53, 63, 0, 146, 231, + 237, 0, 0, 0, 96, 0, 0, 251, 264, 0, + 206, 197, 0, 221, 0, 227, 126, 0, 108, 111, + 114, 0, 109, 0, 0, 104, 214, 212, 0, 0, + 143, 45, 43, 54, 55, 56, -2, -2, 59, 60, + 61, 62, 49, 238, 239, 240, 0, 241, 0, 0, + 119, 262, 0, 136, 127, 0, 112, 0, 0, 106, + 98, 107, 0, 211, 0, 101, 0, 140, 0, 235, + 0, 118, 136, 38, 39, 223, 110, 113, 0, 213, + 0, 103, 100, 141, 138, 139, 44, 252, 222, 133, + 102, } var yyTok1 = [...]int8{ @@ -709,7 +716,7 @@ var yyTok2 = [...]uint8{ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 123, 124, 125, 126, 127, 128, 129, + 122, 123, 124, 125, 126, 127, 128, 129, 130, } var yyTok3 = [...]int8{ @@ -1055,191 +1062,197 @@ yydefault: case 2: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:323 +//line gram.y:325 { } case 3: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:324 +//line gram.y:326 { } case 4: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:328 +//line gram.y:330 { yyVAL.statement = nil } case 5: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:333 +//line gram.y:335 { setParseTree(yylex, yyDollar[1].create) } case 6: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:337 +//line gram.y:339 { setParseTree(yylex, yyDollar[1].create) } case 7: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:341 +//line gram.y:343 { setParseTree(yylex, yyDollar[1].trace) } case 8: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:345 +//line gram.y:347 { setParseTree(yylex, yyDollar[1].stoptrace) } case 9: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:349 +//line gram.y:351 { setParseTree(yylex, yyDollar[1].drop) } case 10: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:353 +//line gram.y:355 { setParseTree(yylex, yyDollar[1].lock) } case 11: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:357 +//line gram.y:359 { setParseTree(yylex, yyDollar[1].unlock) } case 12: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:361 +//line gram.y:363 { setParseTree(yylex, yyDollar[1].show) } case 13: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:365 +//line gram.y:367 { setParseTree(yylex, yyDollar[1].help) } case 14: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:369 +//line gram.y:371 { setParseTree(yylex, yyDollar[1].kill) } case 15: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:373 +//line gram.y:375 { setParseTree(yylex, yyDollar[1].listen) } case 16: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:377 +//line gram.y:379 { setParseTree(yylex, yyDollar[1].shutdown) } case 17: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:381 +//line gram.y:383 { setParseTree(yylex, yyDollar[1].split) } case 18: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:385 +//line gram.y:387 { setParseTree(yylex, yyDollar[1].move) } case 19: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:389 +//line gram.y:391 { setParseTree(yylex, yyDollar[1].redistribute) } case 20: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:393 +//line gram.y:395 { setParseTree(yylex, yyDollar[1].unite) } case 21: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:397 +//line gram.y:399 { setParseTree(yylex, yyDollar[1].register_router) } case 22: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:401 +//line gram.y:403 { setParseTree(yylex, yyDollar[1].unregister_router) } case 23: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:405 +//line gram.y:407 { setParseTree(yylex, yyDollar[1].alter) } case 24: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:409 +//line gram.y:411 { setParseTree(yylex, yyDollar[1].invalidate) } case 25: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:413 +//line gram.y:415 { setParseTree(yylex, yyDollar[1].retryMoveTaskGroup) } case 26: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:417 +//line gram.y:419 { setParseTree(yylex, yyDollar[1].stopMoveTaskGroup) } case 27: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:421 +//line gram.y:423 { setParseTree(yylex, yyDollar[1].sync_reference_tables) } case 28: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:425 +//line gram.y:427 { - setParseTree(yylex, yyDollar[1].alter) + setParseTree(yylex, yyDollar[1].alter_reference_table_storage) } case 29: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:428 +//line gram.y:431 { - setParseTree(yylex, yyDollar[1].icp) + setParseTree(yylex, yyDollar[1].alter) } case 30: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:433 +//line gram.y:434 { - yyVAL.uinteger = uint(yyDollar[1].uinteger) + setParseTree(yylex, yyDollar[1].icp) } case 31: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:438 +//line gram.y:439 { - yyVAL.str = string(yyDollar[1].str) + yyVAL.uinteger = uint(yyDollar[1].uinteger) } case 32: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:442 +//line gram.y:444 { yyVAL.str = string(yyDollar[1].str) } case 33: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:444 +//line gram.y:448 + { + yyVAL.str = string(yyDollar[1].str) + } + case 34: + yyDollar = yyS[yypt-1 : yypt+1] +//line gram.y:450 { if yyDollar[1].uinteger > uint(math.MaxInt64) { yylex.Error(SIGNED_INT_RANGE_ERROR) @@ -1250,9 +1263,9 @@ yydefault: yyVAL.str = string(buf) } } - case 34: + case 35: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:453 +//line gram.y:459 { if yyDollar[2].uinteger > uint(-math.MinInt64) { yylex.Error(SIGNED_INT_RANGE_ERROR) @@ -1263,15 +1276,9 @@ yydefault: yyVAL.str = string(buf) } } - case 35: - yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:465 - { - yyVAL.str = string(yyDollar[1].str) - } case 36: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:468 +//line gram.y:471 { yyVAL.str = string(yyDollar[1].str) } @@ -1283,7 +1290,7 @@ yydefault: } case 38: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:477 +//line gram.y:480 { yyVAL.str = string(yyDollar[1].str) } @@ -1291,79 +1298,85 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] //line gram.y:483 { - yyVAL.qname = &rfqn.RelationFQN{RelationName: yyDollar[1].str} + yyVAL.str = string(yyDollar[1].str) } case 40: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:487 +//line gram.y:489 { yyVAL.qname = &rfqn.RelationFQN{RelationName: yyDollar[1].str} } case 41: + yyDollar = yyS[yypt-1 : yypt+1] +//line gram.y:493 + { + yyVAL.qname = &rfqn.RelationFQN{RelationName: yyDollar[1].str} + } + case 42: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:491 +//line gram.y:497 { yyVAL.qname = &rfqn.RelationFQN{RelationName: yyDollar[3].str, SchemaName: yyDollar[1].str} } - case 42: + case 43: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:496 +//line gram.y:502 { yyVAL.colref = &lyx.ColumnRef{ ColName: yyDollar[1].str, } } - case 43: + case 44: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:504 +//line gram.y:510 { yyVAL.colreflist = append(yyDollar[1].colreflist, yyDollar[3].colref) } - case 44: + case 45: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:506 +//line gram.y:512 { yyVAL.colreflist = []*lyx.ColumnRef{ yyDollar[1].colref, } } - case 45: + case 46: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:517 +//line gram.y:523 { yyVAL.expr = &lyx.AExprSConst{ Value: yyDollar[1].str, } } - case 46: + case 47: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:522 +//line gram.y:528 { yyVAL.expr = &lyx.AExprSConst{ Value: fmt.Sprintf("%+v", yyDollar[1].uinteger), } } - case 47: + case 48: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:538 +//line gram.y:544 { yyVAL.expr = yyDollar[1].expr } - case 48: + case 49: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:539 +//line gram.y:545 { yyVAL.expr = yyDollar[2].expr } - case 49: + case 50: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:544 +//line gram.y:550 { yyVAL.expr = yyDollar[1].expr } - case 50: + case 51: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:546 +//line gram.y:552 { /* column ref */ yyVAL.expr = &lyx.ColumnRef{ @@ -1371,31 +1384,21 @@ yydefault: ColName: yyDollar[1].str, } } - case 51: - yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:565 - { - yyVAL.expr = yyDollar[2].expr - } case 52: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:567 +//line gram.y:571 { yyVAL.expr = yyDollar[2].expr } case 53: - yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:569 + yyDollar = yyS[yypt-2 : yypt+1] +//line gram.y:573 { - yyVAL.expr = &lyx.AExprOp{ - Left: yyDollar[1].expr, - Right: yyDollar[3].expr, - Op: yyDollar[2].str, - } + yyVAL.expr = yyDollar[2].expr } case 54: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:577 +//line gram.y:575 { yyVAL.expr = &lyx.AExprOp{ Left: yyDollar[1].expr, @@ -1405,7 +1408,7 @@ yydefault: } case 55: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:585 +//line gram.y:583 { yyVAL.expr = &lyx.AExprOp{ Left: yyDollar[1].expr, @@ -1415,7 +1418,7 @@ yydefault: } case 56: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:594 +//line gram.y:591 { yyVAL.expr = &lyx.AExprOp{ Left: yyDollar[1].expr, @@ -1425,7 +1428,7 @@ yydefault: } case 57: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:602 +//line gram.y:600 { yyVAL.expr = &lyx.AExprOp{ Left: yyDollar[1].expr, @@ -1435,7 +1438,7 @@ yydefault: } case 58: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:610 +//line gram.y:608 { yyVAL.expr = &lyx.AExprOp{ Left: yyDollar[1].expr, @@ -1445,7 +1448,7 @@ yydefault: } case 59: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:626 +//line gram.y:616 { yyVAL.expr = &lyx.AExprOp{ Left: yyDollar[1].expr, @@ -1455,7 +1458,7 @@ yydefault: } case 60: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:635 +//line gram.y:632 { yyVAL.expr = &lyx.AExprOp{ Left: yyDollar[1].expr, @@ -1465,7 +1468,7 @@ yydefault: } case 61: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:643 +//line gram.y:641 { yyVAL.expr = &lyx.AExprOp{ Left: yyDollar[1].expr, @@ -1474,26 +1477,36 @@ yydefault: } } case 62: + yyDollar = yyS[yypt-3 : yypt+1] +//line gram.y:649 + { + yyVAL.expr = &lyx.AExprOp{ + Left: yyDollar[1].expr, + Right: yyDollar[3].expr, + Op: yyDollar[2].str, + } + } + case 63: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:651 +//line gram.y:657 { yyVAL.expr = &lyx.AExprNot{Arg: yyDollar[2].expr} } - case 63: + case 64: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:658 +//line gram.y:664 { yyVAL.where = &lyx.AExprEmpty{} } - case 64: + case 65: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:662 +//line gram.y:668 { yyVAL.where = yyDollar[2].expr } - case 65: + case 66: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:669 +//line gram.y:675 { switch v := strings.ToLower(string(yyDollar[1].str)); v { case DatabasesStr, RoutersStr, PoolsStr, @@ -1511,27 +1524,21 @@ yydefault: yyVAL.str = UnsupportedStr } } - case 66: - yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:685 - { - yyVAL.str = yyDollar[1].str - } case 67: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:687 +//line gram.y:691 { yyVAL.str = yyDollar[1].str } case 68: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:689 +//line gram.y:693 { yyVAL.str = yyDollar[1].str } case 69: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:691 +//line gram.y:695 { yyVAL.str = yyDollar[1].str } @@ -1539,11 +1546,17 @@ yydefault: yyDollar = yyS[yypt-1 : yypt+1] //line gram.y:697 { - yyVAL.str = string(yyDollar[1].str) + yyVAL.str = yyDollar[1].str } case 71: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:701 +//line gram.y:703 + { + yyVAL.str = string(yyDollar[1].str) + } + case 72: + yyDollar = yyS[yypt-1 : yypt+1] +//line gram.y:707 { switch v := string(yyDollar[1].str); v { case BackendStr: @@ -1552,63 +1565,63 @@ yydefault: yyVAL.str = UnsupportedStr } } - case 72: + case 73: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:711 +//line gram.y:717 { yyVAL.bool = true } - case 73: + case 74: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:711 +//line gram.y:717 { yyVAL.bool = false } - case 74: + case 75: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:715 +//line gram.y:721 { yyVAL.drop = &Drop{Element: yyDollar[2].key_range_selector} } - case 75: + case 76: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:719 +//line gram.y:725 { yyVAL.drop = &Drop{Element: &KeyRangeSelector{KeyRangeID: `*`}} } - case 76: + case 77: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:723 +//line gram.y:729 { yyVAL.drop = &Drop{Element: yyDollar[2].distribution_selector, CascadeDelete: yyDollar[3].bool} } - case 77: + case 78: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:727 +//line gram.y:733 { yyVAL.drop = &Drop{Element: &DistributionSelector{ID: `*`}, CascadeDelete: yyDollar[4].bool} } - case 78: + case 79: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:731 +//line gram.y:737 { yyVAL.drop = &Drop{Element: &ShardSelector{ID: yyDollar[3].str}, CascadeDelete: yyDollar[4].bool} } - case 79: + case 80: yyDollar = yyS[yypt-5 : yypt+1] -//line gram.y:735 +//line gram.y:741 { yyVAL.drop = &Drop{Element: &TaskGroupSelector{ID: yyDollar[4].str}, CascadeDelete: yyDollar[5].bool} } - case 80: + case 81: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:739 +//line gram.y:745 { yyVAL.drop = &Drop{Element: &SequenceSelector{Name: yyDollar[3].str}, CascadeDelete: yyDollar[4].bool} } - case 81: + case 82: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:743 +//line gram.y:749 { yyVAL.drop = &Drop{ Element: &ReferenceRelationSelector{ @@ -1616,9 +1629,9 @@ yydefault: }, } } - case 82: + case 83: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:751 +//line gram.y:757 { yyVAL.drop = &Drop{ Element: &UniqueIndexSelector{ @@ -1626,9 +1639,9 @@ yydefault: }, } } - case 83: + case 84: yyDollar = yyS[yypt-5 : yypt+1] -//line gram.y:759 +//line gram.y:765 { yyVAL.drop = &Drop{ Element: &RedistributeTaskSelector{ @@ -1637,9 +1650,9 @@ yydefault: CascadeDelete: yyDollar[5].bool, } } - case 84: + case 85: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:768 +//line gram.y:774 { yyVAL.drop = &Drop{ Element: &MoveTaskSelector{ @@ -1647,53 +1660,53 @@ yydefault: }, } } - case 85: + case 86: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:779 +//line gram.y:785 { yyVAL.create = &Create{Element: yyDollar[2].ds} } - case 86: + case 87: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:784 +//line gram.y:790 { yyVAL.create = &Create{Element: yyDollar[2].kr} } - case 87: + case 88: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:788 +//line gram.y:794 { yyVAL.create = &Create{Element: yyDollar[2].shard} } - case 88: + case 89: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:794 +//line gram.y:800 { yyVAL.trace = &TraceStmt{All: true} } - case 89: + case 90: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:797 +//line gram.y:803 { yyVAL.trace = &TraceStmt{ Client: yyDollar[4].uinteger, } } - case 90: + case 91: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:805 +//line gram.y:811 { yyVAL.stoptrace = &StopTraceStmt{} } - case 91: + case 92: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:811 +//line gram.y:817 { yyVAL.alter = &Alter{Element: yyDollar[2].alter_distribution} } - case 92: + case 93: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:817 +//line gram.y:823 { yyVAL.alter_distribution = &AlterDistribution{ Distribution: yyDollar[1].distribution_selector, @@ -1702,9 +1715,9 @@ yydefault: }, } } - case 93: + case 94: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:826 +//line gram.y:832 { yyVAL.alter_distribution = &AlterDistribution{ Distribution: yyDollar[1].distribution_selector, @@ -1713,18 +1726,18 @@ yydefault: }, } } - case 94: + case 95: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:835 +//line gram.y:841 { yyVAL.alter_distribution = &AlterDistribution{ Distribution: yyDollar[1].distribution_selector, Element: yyDollar[2].alter_relation, } } - case 95: + case 96: yyDollar = yyS[yypt-5 : yypt+1] -//line gram.y:842 +//line gram.y:848 { yyVAL.alter_distribution = &AlterDistribution{ Distribution: yyDollar[1].distribution_selector, @@ -1733,77 +1746,77 @@ yydefault: }, } } - case 96: + case 97: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:851 +//line gram.y:857 { yyVAL.alter_distribution = &AlterDistribution{ Distribution: yyDollar[1].distribution_selector, Element: &DropDefaultShard{}, } } - case 97: + case 98: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:861 +//line gram.y:867 { yyVAL.dEntrieslist = append(yyDollar[1].dEntrieslist, yyDollar[3].distrKeyEntry) } - case 98: + case 99: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:863 +//line gram.y:869 { yyVAL.dEntrieslist = []DistributionKeyEntry{ yyDollar[1].distrKeyEntry, } } - case 99: + case 100: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:870 +//line gram.y:876 { yyVAL.typedColRef = TypedColRef{ Column: yyDollar[1].str, Type: yyDollar[2].str, } } - case 100: + case 101: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:879 +//line gram.y:885 { yyVAL.routingExpr = []TypedColRef{yyDollar[1].typedColRef} } - case 101: + case 102: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:881 +//line gram.y:887 { yyVAL.routingExpr = append(yyDollar[1].routingExpr, yyDollar[3].typedColRef) } - case 102: + case 103: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:886 +//line gram.y:892 { yyVAL.distrKeyEntry = DistributionKeyEntry{ HashFunction: yyDollar[1].str, Expr: yyDollar[3].routingExpr, } } - case 103: + case 104: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:895 +//line gram.y:901 { yyVAL.distrKeyEntry = DistributionKeyEntry{ Column: yyDollar[1].str, HashFunction: yyDollar[2].str, } } - case 104: + case 105: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:900 +//line gram.y:906 { yyVAL.distrKeyEntry = yyDollar[1].distrKeyEntry } - case 105: + case 106: yyDollar = yyS[yypt-6 : yypt+1] -//line gram.y:906 +//line gram.y:912 { yyVAL.distributed_relation = &DistributedRelation{ Relation: yyDollar[2].qname, @@ -1811,9 +1824,9 @@ yydefault: AutoIncrementEntries: yyDollar[6].aiEntrieslist, } } - case 106: + case 107: yyDollar = yyS[yypt-6 : yypt+1] -//line gram.y:914 +//line gram.y:920 { yyVAL.distributed_relation = &DistributedRelation{ Relation: yyDollar[2].qname, @@ -1821,74 +1834,74 @@ yydefault: AutoIncrementEntries: yyDollar[5].aiEntrieslist, } } - case 107: + case 108: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:923 +//line gram.y:929 { yyVAL.aiEntrieslist = yyDollar[3].aiEntrieslist } - case 108: + case 109: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:925 +//line gram.y:931 { yyVAL.aiEntrieslist = nil } - case 109: + case 110: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:931 +//line gram.y:937 { yyVAL.aiEntrieslist = append(yyDollar[1].aiEntrieslist, yyDollar[3].aiEntry) } - case 110: + case 111: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:933 +//line gram.y:939 { yyVAL.aiEntrieslist = []*AutoIncrementEntry{ yyDollar[1].aiEntry, } } - case 111: + case 112: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:941 +//line gram.y:947 { yyVAL.aiEntry = &AutoIncrementEntry{ Column: yyDollar[1].str, Start: uint64(yyDollar[2].uinteger), } } - case 112: + case 113: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:950 +//line gram.y:956 { yyVAL.uinteger = yyDollar[2].uinteger } - case 113: + case 114: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:952 +//line gram.y:958 { yyVAL.uinteger = 0 } - case 114: + case 115: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:958 +//line gram.y:964 { yyVAL.relations = []*DistributedRelation{yyDollar[1].distributed_relation} } - case 115: + case 116: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:960 +//line gram.y:966 { yyVAL.relations = append(yyDollar[1].relations, yyDollar[2].distributed_relation) } - case 116: + case 117: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:965 +//line gram.y:971 { yyVAL.relations = yyDollar[2].relations } - case 117: + case 118: yyDollar = yyS[yypt-6 : yypt+1] -//line gram.y:970 +//line gram.y:976 { yyVAL.alter_relation = &AlterRelationV2{ RelationName: yyDollar[3].qname, @@ -1897,9 +1910,9 @@ yydefault: }, } } - case 118: + case 119: yyDollar = yyS[yypt-5 : yypt+1] -//line gram.y:978 +//line gram.y:984 { yyVAL.alter_relation = &AlterRelationV2{ RelationName: yyDollar[3].qname, @@ -1908,69 +1921,69 @@ yydefault: }, } } - case 120: - yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:988 - { - } case 121: - yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:991 + yyDollar = yyS[yypt-0 : yypt+1] +//line gram.y:994 { } case 122: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:991 +//line gram.y:997 { } case 123: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:994 +//line gram.y:997 { } case 124: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:994 +//line gram.y:1000 { } case 125: + yyDollar = yyS[yypt-1 : yypt+1] +//line gram.y:1000 + { + } + case 126: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:998 +//line gram.y:1004 { yyVAL.strlist = yyDollar[2].strlist } - case 126: + case 127: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:999 +//line gram.y:1005 { yyVAL.strlist = yyDollar[3].strlist } - case 127: + case 128: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:999 +//line gram.y:1005 { } - case 128: + case 129: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1003 +//line gram.y:1009 { yyVAL.create = &Create{Element: yyDollar[2].ds} } - case 129: + case 130: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1008 +//line gram.y:1014 { yyVAL.create = &Create{Element: yyDollar[2].kr} } - case 130: + case 131: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1013 +//line gram.y:1019 { yyVAL.create = &Create{Element: yyDollar[2].shard} } - case 131: + case 132: yyDollar = yyS[yypt-6 : yypt+1] -//line gram.y:1018 +//line gram.y:1024 { yyVAL.create = &Create{ Element: &ReferenceRelationDefinition{ @@ -1980,9 +1993,9 @@ yydefault: }, } } - case 132: + case 133: yyDollar = yyS[yypt-10 : yypt+1] -//line gram.y:1029 +//line gram.y:1035 { yyVAL.create = &Create{ Element: &UniqueIndexDefinition{ @@ -1992,27 +2005,27 @@ yydefault: }, } } - case 133: + case 134: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1040 +//line gram.y:1046 { yyVAL.distribution_selector = &DistributionSelector{ID: yyDollar[3].str} } - case 134: + case 135: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1043 +//line gram.y:1049 { yyVAL.distribution_selector = &DistributionSelector{ID: yyDollar[2].str} } - case 135: + case 136: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:1045 +//line gram.y:1051 { yyVAL.distribution_selector = &DistributionSelector{ID: "default"} } - case 136: + case 137: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:1051 +//line gram.y:1057 { yyVAL.alter = &Alter{ Element: &AlterDistribution{ @@ -2023,342 +2036,342 @@ yydefault: }, } } - case 137: + case 138: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1063 +//line gram.y:1069 { yyVAL.opt_asc_desc = lyx.SORTBY_ASC } - case 138: + case 139: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1064 +//line gram.y:1070 { yyVAL.opt_asc_desc = lyx.SORTBY_DESC } - case 139: + case 140: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:1065 +//line gram.y:1071 { yyVAL.opt_asc_desc = lyx.SORTBY_DEFAULT } - case 140: + case 141: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:1069 +//line gram.y:1075 { yyVAL.order_clause = &lyx.SortBy{ Node: yyDollar[3].colref, SortbyDir: yyDollar[4].opt_asc_desc, } } - case 141: + case 142: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:1075 +//line gram.y:1081 { yyVAL.order_clause = nil } - case 142: + case 143: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1080 +//line gram.y:1086 { yyVAL.group_clause = GroupBy{Col: yyDollar[3].colreflist} } - case 143: + case 144: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:1083 +//line gram.y:1089 { yyVAL.group_clause = GroupByClauseEmpty{} } - case 144: + case 145: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1087 +//line gram.y:1093 { yyVAL.strlist = []string{yyDollar[1].str} } - case 145: + case 146: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1087 +//line gram.y:1093 { yyVAL.strlist = append(yyDollar[1].strlist, yyDollar[3].str) } - case 146: + case 147: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:1090 +//line gram.y:1096 { yyVAL.strlist = nil } - case 147: + case 148: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1091 +//line gram.y:1097 { yyVAL.strlist = yyDollar[2].strlist } - case 148: + case 149: yyDollar = yyS[yypt-6 : yypt+1] -//line gram.y:1095 +//line gram.y:1101 { yyVAL.show = &Show{Cmd: yyDollar[2].str, Columns: yyDollar[3].strlist, Where: yyDollar[4].where, GroupBy: yyDollar[5].group_clause, Order: yyDollar[6].order_clause} } - case 149: + case 150: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1101 +//line gram.y:1107 { yyVAL.help = &Help{CommandName: ""} } - case 150: + case 151: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1105 +//line gram.y:1111 { yyVAL.help = &Help{CommandName: yyDollar[2].str} } - case 151: + case 152: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1113 +//line gram.y:1119 { yyVAL.str = yyDollar[1].str } - case 152: + case 153: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1117 +//line gram.y:1123 { yyVAL.str = yyDollar[1].str + " " + yyDollar[2].str } - case 153: + case 154: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1123 +//line gram.y:1129 { yyVAL.str = yyDollar[1].str } - case 154: + case 155: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1124 +//line gram.y:1130 { yyVAL.str = "CREATE" } - case 155: + case 156: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1125 +//line gram.y:1131 { yyVAL.str = "DROP" } - case 156: + case 157: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1126 +//line gram.y:1132 { yyVAL.str = "ALTER" } - case 157: + case 158: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1127 +//line gram.y:1133 { yyVAL.str = "SHOW" } - case 158: + case 159: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1128 +//line gram.y:1134 { yyVAL.str = "KEY" } - case 159: + case 160: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1129 +//line gram.y:1135 { yyVAL.str = "RANGE" } - case 160: + case 161: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1130 +//line gram.y:1136 { yyVAL.str = "DISTRIBUTION" } - case 161: + case 162: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1131 +//line gram.y:1137 { yyVAL.str = "SHARD" } - case 162: + case 163: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1132 +//line gram.y:1138 { yyVAL.str = "SHARDS" } - case 163: + case 164: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1133 +//line gram.y:1139 { yyVAL.str = "LOCK" } - case 164: + case 165: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1134 +//line gram.y:1140 { yyVAL.str = "UNLOCK" } - case 165: + case 166: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1135 +//line gram.y:1141 { yyVAL.str = "SPLIT" } - case 166: + case 167: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1136 +//line gram.y:1142 { yyVAL.str = "UNITE" } - case 167: + case 168: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1137 +//line gram.y:1143 { yyVAL.str = "MOVE" } - case 168: + case 169: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1138 +//line gram.y:1144 { yyVAL.str = "REDISTRIBUTE" } - case 169: + case 170: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1139 +//line gram.y:1145 { yyVAL.str = "ROUTER" } - case 170: + case 171: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1140 +//line gram.y:1146 { yyVAL.str = "REGISTER" } - case 171: + case 172: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1141 +//line gram.y:1147 { yyVAL.str = "UNREGISTER" } - case 172: + case 173: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1142 +//line gram.y:1148 { yyVAL.str = "TABLE" } - case 173: + case 174: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1143 +//line gram.y:1149 { yyVAL.str = "TABLES" } - case 174: + case 175: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1144 +//line gram.y:1150 { yyVAL.str = "RELATION" } - case 175: + case 176: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1145 +//line gram.y:1151 { yyVAL.str = "RELATIONS" } - case 176: + case 177: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1146 +//line gram.y:1152 { yyVAL.str = "REFERENCE" } - case 177: + case 178: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1147 +//line gram.y:1153 { yyVAL.str = "ATTACH" } - case 178: + case 179: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1148 +//line gram.y:1154 { yyVAL.str = "DETACH" } - case 179: + case 180: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1149 +//line gram.y:1155 { yyVAL.str = "SEQUENCE" } - case 180: + case 181: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1150 +//line gram.y:1156 { yyVAL.str = "CLIENT" } - case 181: + case 182: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1151 +//line gram.y:1157 { yyVAL.str = "CLIENTS" } - case 182: + case 183: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1152 +//line gram.y:1158 { yyVAL.str = "CACHE" } - case 183: + case 184: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1153 +//line gram.y:1159 { yyVAL.str = "INVALIDATE" } - case 184: + case 185: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1154 +//line gram.y:1160 { yyVAL.str = "SYNC" } - case 185: + case 186: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1155 +//line gram.y:1161 { yyVAL.str = "TASK" } - case 186: + case 187: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1156 +//line gram.y:1162 { yyVAL.str = "GROUP" } - case 187: + case 188: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1157 +//line gram.y:1163 { yyVAL.str = "INDEX" } - case 188: + case 189: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1158 +//line gram.y:1164 { yyVAL.str = "UNIQUE" } - case 189: + case 190: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1159 +//line gram.y:1165 { yyVAL.str = "DEFAULT" } - case 190: + case 191: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1160 +//line gram.y:1166 { yyVAL.str = "ALL" } - case 191: + case 192: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1164 +//line gram.y:1170 { yyVAL.lock = &Lock{KeyRangeID: yyDollar[2].key_range_selector.KeyRangeID} } - case 192: + case 193: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:1172 +//line gram.y:1178 { yyVAL.ds = &DistributionDefinition{ ID: yyDollar[2].str, @@ -2366,155 +2379,155 @@ yydefault: DefaultShard: yyDollar[4].str, } } - case 193: + case 194: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1181 +//line gram.y:1187 { yyVAL.strlist = yyDollar[3].strlist } - case 194: + case 195: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1183 +//line gram.y:1189 { /* modern variant */ yyVAL.strlist = yyDollar[2].strlist } - case 195: + case 196: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:1186 +//line gram.y:1192 { /* empty column types should be prohibited */ yyVAL.strlist = nil } - case 196: + case 197: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1192 +//line gram.y:1198 { yyVAL.strlist = append(yyDollar[1].strlist, yyDollar[3].str) } - case 197: + case 198: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1194 +//line gram.y:1200 { yyVAL.strlist = []string{ yyDollar[1].str, } } - case 198: + case 199: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1201 +//line gram.y:1207 { yyVAL.str = qdb.ColumnTypeVarchar } - case 199: + case 200: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1203 +//line gram.y:1209 { yyVAL.str = qdb.ColumnTypeVarcharHashed } - case 200: + case 201: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1205 +//line gram.y:1211 { yyVAL.str = qdb.ColumnTypeInteger } - case 201: + case 202: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1207 +//line gram.y:1213 { yyVAL.str = qdb.ColumnTypeInteger } - case 202: + case 203: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1209 +//line gram.y:1215 { yyVAL.str = qdb.ColumnTypeUinteger } - case 203: + case 204: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1211 +//line gram.y:1217 { yyVAL.str = qdb.ColumnTypeUinteger } - case 204: + case 205: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1213 +//line gram.y:1219 { yyVAL.str = qdb.ColumnTypeUUID } - case 205: + case 206: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1218 +//line gram.y:1224 { yyVAL.str = yyDollar[3].str } - case 206: + case 207: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:1220 +//line gram.y:1226 { yyVAL.str = "" } - case 207: + case 208: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1225 +//line gram.y:1231 { yyVAL.str = "identity" } - case 208: + case 209: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1227 +//line gram.y:1233 { yyVAL.str = "murmur" } - case 209: + case 210: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1229 +//line gram.y:1235 { yyVAL.str = "city" } - case 210: + case 211: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1234 +//line gram.y:1240 { } - case 211: + case 212: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:1234 +//line gram.y:1240 { } - case 212: + case 213: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1238 +//line gram.y:1244 { yyVAL.str = yyDollar[3].str } - case 213: + case 214: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1243 +//line gram.y:1249 { yyVAL.str = yyDollar[1].str } - case 214: + case 215: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:1245 +//line gram.y:1251 { yyVAL.str = "" } - case 215: + case 216: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1251 +//line gram.y:1257 { yyVAL.bytes = []byte(yyDollar[1].str) } - case 216: + case 217: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1255 +//line gram.y:1261 { yyVAL.bytes = []byte(yyDollar[1].str) } - case 217: + case 218: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1257 +//line gram.y:1263 { if yyDollar[1].uinteger > uint(math.MaxInt64) { yylex.Error(SIGNED_INT_RANGE_ERROR) @@ -2525,9 +2538,9 @@ yydefault: yyVAL.bytes = buf } } - case 218: + case 219: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1266 +//line gram.y:1272 { if yyDollar[2].uinteger > uint(-math.MinInt64) { yylex.Error(SIGNED_INT_RANGE_ERROR) @@ -2538,9 +2551,9 @@ yydefault: yyVAL.bytes = buf } } - case 219: + case 220: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1278 +//line gram.y:1284 { yyVAL.krbound = &KeyRangeBound{ Pivots: [][]byte{ @@ -2548,17 +2561,17 @@ yydefault: }, } } - case 220: + case 221: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1285 +//line gram.y:1291 { yyVAL.krbound = &KeyRangeBound{ Pivots: append(yyDollar[1].krbound.Pivots, yyDollar[3].bytes), } } - case 221: + case 222: yyDollar = yyS[yypt-9 : yypt+1] -//line gram.y:1294 +//line gram.y:1300 { yyVAL.kr = &KeyRangeDefinition{ KeyRangeID: yyDollar[3].str, @@ -2567,9 +2580,9 @@ yydefault: Distribution: yyDollar[9].distribution_selector, } } - case 222: + case 223: yyDollar = yyS[yypt-8 : yypt+1] -//line gram.y:1303 +//line gram.y:1309 { str, err := randomHex(6) if err != nil { @@ -2582,15 +2595,15 @@ yydefault: KeyRangeID: "kr" + str, } } - case 223: + case 224: yyDollar = yyS[yypt-5 : yypt+1] -//line gram.y:1318 +//line gram.y:1324 { yyVAL.shard = &ShardDefinition{Id: yyDollar[2].str, Hosts: yyDollar[5].strlist} } - case 224: + case 225: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:1323 +//line gram.y:1329 { str, err := randomHex(6) if err != nil { @@ -2598,78 +2611,78 @@ yydefault: } yyVAL.shard = &ShardDefinition{Id: "shard" + str, Hosts: yyDollar[4].strlist} } - case 225: + case 226: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1333 +//line gram.y:1339 { yyVAL.strlist = []string{yyDollar[1].str} } - case 226: + case 227: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1338 +//line gram.y:1344 { yyVAL.strlist = append(yyDollar[1].strlist, yyDollar[3].str) } - case 227: + case 228: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1344 +//line gram.y:1350 { yyVAL.unlock = &Unlock{KeyRangeID: yyDollar[2].key_range_selector.KeyRangeID} } - case 228: + case 229: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1350 +//line gram.y:1356 { yyVAL.key_range_selector = &KeyRangeSelector{KeyRangeID: yyDollar[3].str} } - case 229: + case 230: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1356 +//line gram.y:1362 { yyVAL.distribution_selector = &DistributionSelector{ID: yyDollar[2].str} } - case 230: + case 231: yyDollar = yyS[yypt-6 : yypt+1] -//line gram.y:1362 +//line gram.y:1368 { yyVAL.split = &SplitKeyRange{KeyRangeID: yyDollar[2].key_range_selector.KeyRangeID, KeyRangeFromID: yyDollar[4].str, Border: yyDollar[6].krbound} } - case 231: + case 232: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1368 +//line gram.y:1374 { yyVAL.kill = &Kill{Cmd: yyDollar[2].str, Target: yyDollar[3].uinteger} } - case 232: + case 233: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1371 +//line gram.y:1377 { n, err := strconv.ParseUint(yyDollar[3].str, 10, 64) if err == nil { yyVAL.kill = &Kill{Cmd: yyDollar[2].str, Target: uint(n)} } } - case 233: + case 234: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:1381 +//line gram.y:1387 { yyVAL.move = &MoveKeyRange{KeyRangeID: yyDollar[2].key_range_selector.KeyRangeID, DestShardID: yyDollar[4].str} } - case 234: + case 235: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1386 +//line gram.y:1392 { yyVAL.str = yyDollar[3].str } - case 235: + case 236: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:1386 +//line gram.y:1392 { yyVAL.str = "" } - case 236: + case 237: yyDollar = yyS[yypt-6 : yypt+1] -//line gram.y:1391 +//line gram.y:1397 { yyVAL.redistribute = &RedistributeKeyRange{ KeyRangeID: yyDollar[2].key_range_selector.KeyRangeID, @@ -2680,9 +2693,9 @@ yydefault: Apply: true, } } - case 237: + case 238: yyDollar = yyS[yypt-7 : yypt+1] -//line gram.y:1400 +//line gram.y:1406 { yyVAL.redistribute = &RedistributeKeyRange{ KeyRangeID: yyDollar[2].key_range_selector.KeyRangeID, @@ -2692,9 +2705,9 @@ yydefault: Check: true, } } - case 238: + case 239: yyDollar = yyS[yypt-7 : yypt+1] -//line gram.y:1408 +//line gram.y:1414 { yyVAL.redistribute = &RedistributeKeyRange{ KeyRangeID: yyDollar[2].key_range_selector.KeyRangeID, @@ -2705,9 +2718,9 @@ yydefault: Apply: true, } } - case 239: + case 240: yyDollar = yyS[yypt-7 : yypt+1] -//line gram.y:1417 +//line gram.y:1423 { yyVAL.redistribute = &RedistributeKeyRange{ KeyRangeID: yyDollar[2].key_range_selector.KeyRangeID, @@ -2718,180 +2731,189 @@ yydefault: NoWait: true, } } - case 240: + case 241: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1428 +//line gram.y:1434 { yyVAL.integer = int(yyDollar[3].uinteger) } - case 241: + case 242: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:1429 +//line gram.y:1435 { yyVAL.integer = -1 } - case 242: + case 243: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:1433 +//line gram.y:1439 { yyVAL.unite = &UniteKeyRange{KeyRangeIDL: yyDollar[2].key_range_selector.KeyRangeID, KeyRangeIDR: yyDollar[4].str} } - case 243: + case 244: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1439 +//line gram.y:1445 { yyVAL.listen = &Listen{addr: yyDollar[2].str} } - case 244: + case 245: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1445 +//line gram.y:1451 { yyVAL.shutdown = &Shutdown{} } - case 245: + case 246: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1451 +//line gram.y:1457 { yyVAL.invalidate = &Invalidate{ Target: SchemaCacheInvalidateTarget, } } - case 246: + case 247: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1456 +//line gram.y:1462 { yyVAL.invalidate = &Invalidate{ Target: SchemaCacheInvalidateTarget, } } - case 247: + case 248: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1461 +//line gram.y:1467 { yyVAL.invalidate = &Invalidate{ Target: BackendConnectionsInvalidateTarget, } } - case 248: + case 249: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1466 +//line gram.y:1472 { yyVAL.invalidate = &Invalidate{ Target: StaleClientsInvalidateTarget, } } - case 249: + case 250: yyDollar = yyS[yypt-5 : yypt+1] -//line gram.y:1474 +//line gram.y:1480 { yyVAL.sync_reference_tables = &SyncReferenceTables{ ShardID: yyDollar[5].str, RelationSelector: "*", } } - case 250: + case 251: yyDollar = yyS[yypt-6 : yypt+1] -//line gram.y:1480 +//line gram.y:1486 { yyVAL.sync_reference_tables = &SyncReferenceTables{ ShardID: yyDollar[6].str, RelationSelector: yyDollar[4].str, } } - case 251: + case 252: + yyDollar = yyS[yypt-9 : yypt+1] +//line gram.y:1495 + { + yyVAL.alter_reference_table_storage = &AlterReferenceTableStorage{ + RelationSelector: yyDollar[4].qname, + Shards: yyDollar[8].strlist, + } + } + case 253: yyDollar = yyS[yypt-5 : yypt+1] -//line gram.y:1491 +//line gram.y:1506 { yyVAL.register_router = &RegisterRouter{ID: yyDollar[3].str, Addr: yyDollar[5].str} } - case 252: + case 254: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1497 +//line gram.y:1512 { yyVAL.unregister_router = &UnregisterRouter{ID: yyDollar[3].str} } - case 253: + case 255: yyDollar = yyS[yypt-3 : yypt+1] -//line gram.y:1502 +//line gram.y:1517 { yyVAL.unregister_router = &UnregisterRouter{ID: `*`} } - case 254: + case 256: yyDollar = yyS[yypt-5 : yypt+1] -//line gram.y:1510 +//line gram.y:1525 { yyVAL.retryMoveTaskGroup = &RetryMoveTaskGroup{ID: yyDollar[5].str} } - case 255: + case 257: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:1515 +//line gram.y:1530 { yyVAL.retryMoveTaskGroup = &RetryMoveTaskGroup{ID: yyDollar[4].str} } - case 256: + case 258: yyDollar = yyS[yypt-5 : yypt+1] -//line gram.y:1522 +//line gram.y:1537 { yyVAL.stopMoveTaskGroup = &StopMoveTaskGroup{ID: yyDollar[5].str} } - case 257: + case 259: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:1527 +//line gram.y:1542 { yyVAL.stopMoveTaskGroup = &StopMoveTaskGroup{ID: yyDollar[4].str} } - case 258: + case 260: yyDollar = yyS[yypt-5 : yypt+1] -//line gram.y:1532 +//line gram.y:1547 { yyVAL.stopMoveTaskGroup = &StopMoveTaskGroup{ID: "*"} } - case 259: + case 261: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:1537 +//line gram.y:1552 { yyVAL.stopMoveTaskGroup = &StopMoveTaskGroup{ID: "*"} } - case 260: + case 262: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1545 +//line gram.y:1560 { yyVAL.duration = time.Duration(time.Duration(yyDollar[1].uinteger) * time.Second) } - case 261: + case 263: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:1547 +//line gram.y:1562 { yyVAL.duration = time.Duration(1 * time.Minute) } - case 262: + case 264: yyDollar = yyS[yypt-2 : yypt+1] -//line gram.y:1552 +//line gram.y:1567 { yyVAL.icpAction = &ICPointAction{ Act: "sleep", Timeout: yyDollar[2].duration, } } - case 263: + case 265: yyDollar = yyS[yypt-1 : yypt+1] -//line gram.y:1557 +//line gram.y:1572 { yyVAL.icpAction = &ICPointAction{ Act: "panic", } } - case 264: + case 266: yyDollar = yyS[yypt-0 : yypt+1] -//line gram.y:1561 +//line gram.y:1576 { yyVAL.icpAction = &ICPointAction{ Act: "panic", } } - case 265: + case 267: yyDollar = yyS[yypt-5 : yypt+1] -//line gram.y:1568 +//line gram.y:1583 { yyVAL.icp = &InstanceControlPoint{ Name: string(yyDollar[4].str), @@ -2899,9 +2921,9 @@ yydefault: A: yyDollar[5].icpAction, } } - case 266: + case 268: yyDollar = yyS[yypt-4 : yypt+1] -//line gram.y:1575 +//line gram.y:1590 { yyVAL.icp = &InstanceControlPoint{ Name: string(yyDollar[4].str), diff --git a/yacc/console/gram.y b/yacc/console/gram.y index a9b1ccd2f..51d3f4219 100644 --- a/yacc/console/gram.y +++ b/yacc/console/gram.y @@ -72,6 +72,7 @@ func randomHex(n int) (string, error) { invalidate *Invalidate sync_reference_tables *SyncReferenceTables + alter_reference_table_storage *AlterReferenceTableStorage shutdown *Shutdown listen *Listen @@ -187,7 +188,7 @@ func randomHex(n int) (string, error) { %token SHUTDOWN LISTEN REGISTER UNREGISTER ROUTER ROUTE %token CREATE ADD DROP LOCK UNLOCK SPLIT MOVE COMPOSE SET CASCADE ATTACH ALTER DETACH REDISTRIBUTE REFERENCE CHECK APPLY UNIQUE -%token COLUMN TABLE TABLES RELATIONS BACKENDS HASH FUNCTION KEY RANGE DISTRIBUTION RELATION REPLICATED AUTO INCREMENT SEQUENCE SCHEMA INDEX +%token COLUMN TABLE TABLES RELATIONS BACKENDS HASH FUNCTION KEY RANGE DISTRIBUTION RELATION REPLICATED AUTO INCREMENT SEQUENCE SCHEMA INDEX STORAGE %token SHARDS ROUTERS SHARD HOST RULE COLUMNS VERSION HOSTS SEQUENCES IS_READ_ONLY MOVE_STATS %token BY FROM TO WITH UNITE ALL ADDRESS FOR %token CLIENT @@ -258,6 +259,7 @@ func randomHex(n int) (string, error) { %type invalidate_stmt %type sync_reference_tables_stmt +%type alter_reference_table_storage_stmt %type relation_attach_stmt %type distributed_relation_list_def @@ -421,6 +423,10 @@ command: { setParseTree(yylex, $1) } + | alter_reference_table_storage_stmt + { + setParseTree(yylex, $1) + } | create_distributed_relation_stmt { setParseTree(yylex, $1) @@ -1484,6 +1490,15 @@ sync_reference_tables_stmt: } } +alter_reference_table_storage_stmt: + ALTER REFERENCE table_or_relation qualified_name STORAGE TO TOPENBR any_id_list TCLOSEBR + { + $$ = &AlterReferenceTableStorage { + RelationSelector: $4, + Shards: $8, + } + } + // coordinator register_router_stmt: diff --git a/yacc/console/reserved_keyword.go b/yacc/console/reserved_keyword.go index e33c58766..b9a67cece 100644 --- a/yacc/console/reserved_keyword.go +++ b/yacc/console/reserved_keyword.go @@ -99,4 +99,5 @@ var reservedWords = map[string]int{ "index": INDEX, "nowait": NOWAIT, "help": HELP, + "storage": STORAGE, }