From c0b21f113893e338dc8abbb35ee09496f71feaa3 Mon Sep 17 00:00:00 2001 From: David Taylor Date: Fri, 6 Apr 2018 15:41:33 +0000 Subject: [PATCH] backupccl: support restoring views with into_db The `RESTORE ... into_db = 'foo'` option allows overriding the destination database for all restored tables, views and sequences. Previously this option could not be used when restoring views, as the view query string could contain references to tables qualified with their original database name(s), and we did not support rewriting that query to reflect the overridden destination for those tables. This change adds that rewriting (except for tables/sequences named in strings, see #24556). Since a destination override is applied to all tables being restored, and since restoring a view requires restoring all tables it references, any table referenced by the view query -- regardless of its prior qualification -- can be re-qualified with the override DB. Release note (enterprise change): support restoring views when using the 'into_db' option. --- pkg/ccl/backupccl/backup_test.go | 28 +++- pkg/ccl/backupccl/restore.go | 60 ++++++-- pkg/sql/jobs/jobs.pb.go | 238 ++++++++++++++++++------------- pkg/sql/jobs/jobs.proto | 1 + 4 files changed, 218 insertions(+), 109 deletions(-) diff --git a/pkg/ccl/backupccl/backup_test.go b/pkg/ccl/backupccl/backup_test.go index e08ab195af4e..2d3fc766f308 100644 --- a/pkg/ccl/backupccl/backup_test.go +++ b/pkg/ccl/backupccl/backup_test.go @@ -1192,7 +1192,7 @@ func TestBackupRestoreCrossTableReferences(t *testing.T) { )`) // and a few views for good measure. - origDB.Exec(t, `CREATE VIEW store.early_customers AS SELECT id from store.customers WHERE id < 5`) + origDB.Exec(t, `CREATE VIEW store.early_customers AS SELECT id, email from store.customers WHERE id < 5`) origDB.Exec(t, `CREATE VIEW storestats.ordercounts AS SELECT c.id, c.email, COUNT(o.id) FROM store.customers AS c @@ -1401,6 +1401,13 @@ func TestBackupRestoreCrossTableReferences(t *testing.T) { tc := testcluster.StartTestCluster(t, singleNode, base.TestClusterArgs{ServerArgs: args}) defer tc.Stopper().Stop(context.TODO()) db := sqlutils.MakeSQLRunner(tc.Conns[0]) + + if _, err := db.DB.Exec( + `RESTORE DATABASE storestats FROM $1`, localFoo, + ); !testutils.IsError(err, `cannot restore "ordercounts" without restoring referenced table`) { + t.Fatal(err) + } + db.Exec(t, createStore) db.Exec(t, createStoreStats) @@ -1434,6 +1441,25 @@ func TestBackupRestoreCrossTableReferences(t *testing.T) { } db.CheckQueryResults(t, `SELECT * FROM storestats.ordercounts ORDER BY id`, origOrderCounts) + + db.Exec(t, `CREATE DATABASE otherstore`) + db.Exec(t, `RESTORE store.* FROM $1 WITH into_db = 'otherstore'`, localFoo) + // we want to observe just the view-related errors, not fk errors below. + db.Exec(t, `ALTER TABLE otherstore.orders DROP CONSTRAINT fk_customerid_ref_customers`) + db.Exec(t, `DROP TABLE otherstore.receipts`) + + if _, err := db.DB.Exec(`DROP TABLE otherstore.customers`); !testutils.IsError(err, + `cannot drop relation "customers" because view "early_customers" depends on it`, + ) { + t.Fatal(err) + } + if _, err := db.DB.Exec(`ALTER TABLE otherstore.customers DROP COLUMN email`); !testutils.IsError( + err, `cannot drop column "email" because view "early_customers" depends on it`) { + t.Fatal(err) + } + db.Exec(t, `DROP DATABASE store CASCADE`) + db.CheckQueryResults(t, `SELECT * FROM otherstore.early_customers ORDER BY id`, origEarlyCustomers) + }) } diff --git a/pkg/ccl/backupccl/restore.go b/pkg/ccl/backupccl/restore.go index 82f2074d70c9..7f94967dda24 100644 --- a/pkg/ccl/backupccl/restore.go +++ b/pkg/ccl/backupccl/restore.go @@ -29,6 +29,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/settings/cluster" "github.com/cockroachdb/cockroach/pkg/sql" "github.com/cockroachdb/cockroach/pkg/sql/jobs" + "github.com/cockroachdb/cockroach/pkg/sql/parser" "github.com/cockroachdb/cockroach/pkg/sql/privilege" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sem/types" @@ -152,6 +153,34 @@ func selectTargets( return matched.descs, matched.requestedDBs, nil } +// rewriteViewQueryDBNames rewrites the passed table's ViewQuery replacing all +// non-empty db qualifiers with `newDB`. +// +// TODO: this AST traversal misses tables named in strings (#24556). +func rewriteViewQueryDBNames(table *sqlbase.TableDescriptor, newDB string) error { + stmt, err := parser.ParseOne(table.ViewQuery) + if err != nil { + return errors.Wrapf(err, "failed to parse underlying query from view %q", table.Name) + } + // Re-format to change all DB names to `newDB`. + f := tree.NewFmtCtxWithBuf(tree.FmtParsable) + f.WithReformatTableNames( + func(ctx *tree.FmtCtx, t *tree.NormalizableTableName) { + tn, err := t.Normalize() + if err != nil { + return + } + // empty catalog e.g. ``"".information_schema.tables` should stay empty. + if tn.CatalogName != "" { + tn.CatalogName = tree.Name(newDB) + } + ctx.FormatNode(tn) + }) + f.FormatNode(stmt) + table.ViewQuery = f.CloseAndGetString() + return nil +} + // allocateTableRewrites determines the new ID and parentID (a "TableRewrite") // for each table in sqlDescs and returns a mapping from old ID to said // TableRewrite. It first validates that the provided sqlDescs can be restored @@ -165,7 +194,7 @@ func allocateTableRewrites( opts map[string]string, ) (tableRewriteMap, error) { tableRewrites := make(tableRewriteMap) - _, renaming := opts[restoreOptIntoDB] + overrideDB, renaming := opts[restoreOptIntoDB] restoreDBNames := make(map[string]*sqlbase.DatabaseDescriptor, len(restoreDBs)) for _, db := range restoreDBs { @@ -193,10 +222,6 @@ func allocateTableRewrites( // options. // Check that foreign key targets exist. for _, table := range tablesByID { - if renaming && table.IsView() { - return nil, errors.Errorf("cannot restore view when using %q option", restoreOptIntoDB) - } - if err := table.ForeachNonDropIndex(func(index *sqlbase.IndexDescriptor) error { if index.ForeignKey.IsSet() { to := index.ForeignKey.Table @@ -247,8 +272,8 @@ func allocateTableRewrites( for _, table := range tablesByID { var targetDB string - if override, ok := opts[restoreOptIntoDB]; ok { - targetDB = override + if renaming { + targetDB = overrideDB } else { database, ok := databasesByID[table.ParentID] if !ok { @@ -366,12 +391,24 @@ func CheckTableExists( // rewriteTableDescs mutates tables to match the ID and privilege specified in // tableRewrites, as well as adjusting cross-table references to use the new // IDs. -func rewriteTableDescs(tables []*sqlbase.TableDescriptor, tableRewrites tableRewriteMap) error { +func rewriteTableDescs( + tables []*sqlbase.TableDescriptor, tableRewrites tableRewriteMap, overrideDB string, +) error { for _, table := range tables { tableRewrite, ok := tableRewrites[table.ID] if !ok { return errors.Errorf("missing table rewrite for table %d", table.ID) } + if table.IsView() && overrideDB != "" { + // restore checks that all dependencies are also being restored, but if + // the restore is overriding the destination database, qualifiers in the + // view query string may be wrong. Since the destination override is + // applied to everything being restored, anything the view query + // references will be in the override DB post-restore, so all database + // qualifiers in the view query should be replaced with overrideDB. + rewriteViewQueryDBNames(table, overrideDB) + } + table.ID = tableRewrite.TableID table.ParentID = tableRewrite.ParentID @@ -914,6 +951,7 @@ func restore( endTime hlc.Timestamp, sqlDescs []sqlbase.Descriptor, tableRewrites tableRewriteMap, + overrideDB string, job *jobs.Job, resultsCh chan<- tree.Datums, ) (roachpb.BulkOpSummary, []*sqlbase.DatabaseDescriptor, []*sqlbase.TableDescriptor, error) { @@ -954,7 +992,7 @@ func restore( // Assign new IDs and privileges to the tables, and update all references to // use the new IDs. - if err := rewriteTableDescs(tables, tableRewrites); err != nil { + if err := rewriteTableDescs(tables, tableRewrites, overrideDB); err != nil { return mu.res, nil, nil, err } @@ -1273,7 +1311,7 @@ func doRestorePlan( tables = append(tables, tableDesc) } } - if err := rewriteTableDescs(tables, tableRewrites); err != nil { + if err := rewriteTableDescs(tables, tableRewrites, opts[restoreOptIntoDB]); err != nil { return err } @@ -1291,6 +1329,7 @@ func doRestorePlan( TableRewrites: tableRewrites, URIs: from, TableDescs: tables, + OverrideDB: opts[restoreOptIntoDB], }, }) if err != nil { @@ -1344,6 +1383,7 @@ func (r *restoreResumer) Resume( details.EndTime, sqlDescs, details.TableRewrites, + details.OverrideDB, job, resultsCh, ) diff --git a/pkg/sql/jobs/jobs.pb.go b/pkg/sql/jobs/jobs.pb.go index bdcfdb6de0f7..e2582b631f3d 100644 --- a/pkg/sql/jobs/jobs.pb.go +++ b/pkg/sql/jobs/jobs.pb.go @@ -106,6 +106,7 @@ type RestoreDetails struct { TableRewrites map[github_com_cockroachdb_cockroach_pkg_sql_sqlbase.ID]*RestoreDetails_TableRewrite `protobuf:"bytes,2,rep,name=table_rewrites,json=tableRewrites,castkey=github.com/cockroachdb/cockroach/pkg/sql/sqlbase.ID" json:"table_rewrites,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value"` URIs []string `protobuf:"bytes,3,rep,name=uris" json:"uris,omitempty"` TableDescs []*cockroach_sql_sqlbase1.TableDescriptor `protobuf:"bytes,5,rep,name=table_descs,json=tableDescs" json:"table_descs,omitempty"` + OverrideDB string `protobuf:"bytes,6,opt,name=override_db,json=overrideDb,proto3" json:"override_db,omitempty"` } func (m *RestoreDetails) Reset() { *m = RestoreDetails{} } @@ -642,6 +643,12 @@ func (m *RestoreDetails) MarshalTo(dAtA []byte) (int, error) { i += n } } + if len(m.OverrideDB) > 0 { + dAtA[i] = 0x32 + i++ + i = encodeVarintJobs(dAtA, i, uint64(len(m.OverrideDB))) + i += copy(dAtA[i:], m.OverrideDB) + } return i, nil } @@ -1218,6 +1225,10 @@ func (m *RestoreDetails) Size() (n int) { n += 1 + l + sovJobs(uint64(l)) } } + l = len(m.OverrideDB) + if l > 0 { + n += 1 + l + sovJobs(uint64(l)) + } return n } @@ -1987,6 +1998,35 @@ func (m *RestoreDetails) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field OverrideDB", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowJobs + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthJobs + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.OverrideDB = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipJobs(dAtA[iNdEx:]) @@ -3673,102 +3713,104 @@ var ( func init() { proto.RegisterFile("sql/jobs/jobs.proto", fileDescriptorJobs) } var fileDescriptorJobs = []byte{ - // 1549 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcd, 0x8f, 0x1b, 0x49, - 0x15, 0x77, 0xfb, 0xdb, 0xcf, 0x1f, 0xe3, 0x54, 0x02, 0xdb, 0x6b, 0x05, 0xbb, 0x31, 0xbb, 0x1b, - 0x8b, 0x0f, 0x5b, 0xca, 0x0a, 0x16, 0x05, 0x69, 0xc5, 0x78, 0xc6, 0xc9, 0x18, 0x76, 0x92, 0x51, - 0x79, 0x06, 0xa4, 0x95, 0x50, 0x53, 0xee, 0x2e, 0x8f, 0x1b, 0xb7, 0xbb, 0x3b, 0x55, 0xe5, 0x0c, - 0xd9, 0x0b, 0x02, 0x71, 0x40, 0xc3, 0x85, 0x0b, 0xc7, 0x91, 0x90, 0xe0, 0xb0, 0x07, 0xfe, 0x02, - 0xfe, 0x82, 0xdc, 0xe0, 0x08, 0x42, 0x32, 0x60, 0x2e, 0xfc, 0x0d, 0x9c, 0x50, 0x55, 0x75, 0xfb, - 0x63, 0x33, 0x11, 0x99, 0x48, 0x7b, 0xb1, 0xaa, 0x7e, 0xef, 0xa3, 0xeb, 0xbd, 0x7a, 0xef, 0xf7, - 0xca, 0x70, 0x9b, 0x3f, 0xf5, 0x7b, 0x3f, 0x09, 0xc7, 0x5c, 0xfd, 0x74, 0x23, 0x16, 0x8a, 0x10, - 0x21, 0x27, 0x74, 0x66, 0x2c, 0x24, 0xce, 0xb4, 0xcb, 0x9f, 0xfa, 0x5d, 0x29, 0x69, 0xdc, 0x39, - 0x0f, 0xcf, 0x43, 0x25, 0xee, 0xc9, 0x95, 0xd6, 0x6c, 0xdc, 0x52, 0x5a, 0xd1, 0xb8, 0xe7, 0xf0, - 0x67, 0x31, 0x84, 0x12, 0xc8, 0x25, 0x82, 0xc4, 0xd8, 0x5d, 0xf9, 0x15, 0xfe, 0xd4, 0x1f, 0x13, - 0x4e, 0x7b, 0x5c, 0xb0, 0x85, 0x23, 0x16, 0x8c, 0xba, 0xb1, 0xd4, 0x5c, 0x08, 0xcf, 0xef, 0x4d, - 0x7d, 0xa7, 0x27, 0xbc, 0x39, 0xe5, 0x82, 0xcc, 0x23, 0x2d, 0x69, 0xff, 0x0c, 0x72, 0x1f, 0x51, - 0xc2, 0x29, 0xfa, 0x18, 0x0a, 0x41, 0xe8, 0x52, 0xdb, 0x73, 0x4d, 0xc3, 0x32, 0x3a, 0xd5, 0xfe, - 0xfe, 0x6a, 0xd9, 0xca, 0x3f, 0x0e, 0x5d, 0x3a, 0x3c, 0xfc, 0xef, 0xb2, 0xf5, 0xfe, 0xb9, 0x27, - 0xa6, 0x8b, 0x71, 0xd7, 0x09, 0xe7, 0xbd, 0xf5, 0xd9, 0xdd, 0xf1, 0x66, 0xdd, 0x8b, 0x66, 0xe7, - 0xbd, 0xf8, 0x60, 0x5d, 0x6d, 0x86, 0xf3, 0xd2, 0xe3, 0xd0, 0x45, 0x77, 0x20, 0x47, 0xa3, 0xd0, - 0x99, 0x9a, 0x69, 0xcb, 0xe8, 0x64, 0xb0, 0xde, 0x3c, 0xc8, 0xfe, 0xe7, 0x77, 0x2d, 0xa3, 0xfd, - 0x77, 0x03, 0xaa, 0x7d, 0xe2, 0xcc, 0x16, 0xd1, 0x21, 0x15, 0xc4, 0xf3, 0x39, 0xea, 0x03, 0x70, - 0x41, 0x98, 0xb0, 0xe5, 0x59, 0xd5, 0x61, 0xca, 0xf7, 0xbf, 0xd4, 0xdd, 0x24, 0x4c, 0xc6, 0xd2, - 0x9d, 0xfa, 0x4e, 0xf7, 0x34, 0x89, 0xa5, 0x9f, 0x7d, 0xb1, 0x6c, 0xa5, 0x70, 0x49, 0x99, 0x49, - 0x14, 0x7d, 0x08, 0x45, 0x1a, 0xb8, 0xda, 0x43, 0xfa, 0xf5, 0x3d, 0x14, 0x68, 0xe0, 0x2a, 0xfb, - 0xb7, 0x21, 0xb3, 0x60, 0x9e, 0x99, 0xb1, 0x8c, 0x4e, 0xa9, 0x5f, 0x58, 0x2d, 0x5b, 0x99, 0x33, - 0x3c, 0xc4, 0x12, 0x43, 0x5f, 0x83, 0x5b, 0x63, 0x75, 0x5e, 0xdb, 0xa5, 0xdc, 0x61, 0x5e, 0x24, - 0x42, 0x66, 0x66, 0x2d, 0xa3, 0x53, 0xc1, 0xf5, 0x71, 0x1c, 0x48, 0x82, 0xb7, 0xff, 0x94, 0x83, - 0x1a, 0xa6, 0x5c, 0x84, 0x8c, 0x26, 0xe1, 0xbd, 0x03, 0x35, 0x3f, 0xbc, 0xb0, 0x2f, 0x88, 0xa0, - 0xcc, 0x9e, 0x13, 0x36, 0x53, 0x21, 0x56, 0x70, 0xc5, 0x0f, 0x2f, 0x7e, 0x28, 0xc1, 0x63, 0xc2, - 0x66, 0xe8, 0xb7, 0x06, 0xd4, 0x04, 0x19, 0xfb, 0xd4, 0x66, 0xf4, 0x82, 0x79, 0x82, 0x72, 0x33, - 0x6d, 0x65, 0x3a, 0xe5, 0xfb, 0xdf, 0xec, 0xbe, 0x5c, 0x3a, 0xdd, 0xdd, 0x4f, 0x74, 0x4f, 0xa5, - 0x21, 0x8e, 0xed, 0x06, 0x81, 0x60, 0xcf, 0xfb, 0x1f, 0xfc, 0xe2, 0x1f, 0xaf, 0x79, 0x87, 0x5b, - 0x85, 0xd4, 0x1d, 0x1e, 0xe2, 0xaa, 0xd8, 0x76, 0x86, 0xee, 0x42, 0x76, 0xc1, 0x3c, 0x6e, 0x66, - 0xac, 0x4c, 0xa7, 0xd4, 0x2f, 0xae, 0x96, 0xad, 0xec, 0x19, 0x1e, 0x72, 0xac, 0xd0, 0x9d, 0xb4, - 0x67, 0xdf, 0x20, 0xed, 0x8f, 0xa0, 0xac, 0x83, 0x96, 0xa9, 0xe5, 0x66, 0x4e, 0x45, 0xfc, 0xde, - 0x67, 0x22, 0x4e, 0x0e, 0xa7, 0xa2, 0xdc, 0xe4, 0x1a, 0x83, 0x48, 0x00, 0xde, 0xf8, 0xb3, 0x01, - 0x95, 0xed, 0x2c, 0xa0, 0x1f, 0x41, 0x51, 0x7b, 0x5e, 0xd7, 0x77, 0x7f, 0xb5, 0x6c, 0x15, 0x94, - 0xce, 0x0d, 0x0a, 0xfc, 0x33, 0xc9, 0x29, 0x28, 0x9f, 0x43, 0x17, 0xfd, 0x18, 0x4a, 0x11, 0x61, - 0x34, 0x10, 0xd2, 0x7f, 0x5a, 0xf9, 0x3f, 0x58, 0x2d, 0x5b, 0xc5, 0x13, 0x05, 0xbe, 0xf9, 0x07, - 0x8a, 0xda, 0xeb, 0xd0, 0x6d, 0x3c, 0x05, 0xf4, 0xf2, 0xb5, 0xa2, 0x3a, 0x64, 0x66, 0xf4, 0xb9, - 0x8e, 0x08, 0xcb, 0x25, 0x1a, 0x40, 0xee, 0x19, 0xf1, 0x17, 0x49, 0xd9, 0xf7, 0x6e, 0x58, 0x2e, - 0x58, 0x5b, 0x3f, 0x48, 0x7f, 0xdb, 0x68, 0xff, 0x3c, 0x0f, 0xd5, 0xe1, 0x3c, 0x0a, 0x99, 0x48, - 0x6a, 0x77, 0x00, 0x79, 0x15, 0x31, 0x37, 0x0d, 0x75, 0x35, 0xf7, 0xae, 0xf3, 0xbe, 0x63, 0xa2, - 0x9d, 0xc7, 0xf7, 0x1c, 0x1b, 0x37, 0x3e, 0xcd, 0x41, 0x4e, 0xe1, 0xe8, 0x01, 0x64, 0xe5, 0x55, - 0xc7, 0x5d, 0xfe, 0xba, 0x37, 0xad, 0x6c, 0xd6, 0xa5, 0x98, 0xbe, 0xb6, 0x14, 0x3f, 0x80, 0x42, - 0x18, 0x09, 0x2f, 0x0c, 0xb8, 0xea, 0xe2, 0xdd, 0x4a, 0x4c, 0x78, 0xea, 0x60, 0xf4, 0x83, 0x27, - 0x5a, 0x09, 0x27, 0xda, 0xa8, 0x05, 0xe5, 0xb8, 0xbf, 0x23, 0x22, 0xa6, 0xaa, 0x8c, 0x4b, 0x18, - 0x34, 0x74, 0x42, 0xc4, 0x54, 0x12, 0x00, 0x27, 0xf3, 0xc8, 0xf7, 0x82, 0x73, 0x3b, 0x62, 0xe1, - 0x39, 0xa3, 0x5c, 0x97, 0x6a, 0x1a, 0xd7, 0x13, 0xc1, 0x49, 0x8c, 0xa3, 0xaf, 0x40, 0x95, 0x51, - 0xe2, 0x6e, 0x14, 0xf3, 0x4a, 0xb1, 0x22, 0xc1, 0xb5, 0xd2, 0xbb, 0x50, 0x53, 0xc9, 0xdf, 0x68, - 0x15, 0x94, 0x56, 0x55, 0xa1, 0x6b, 0xb5, 0x9d, 0x22, 0x2b, 0x7e, 0x0e, 0x45, 0x26, 0x89, 0xda, - 0x09, 0xe7, 0x73, 0x62, 0x96, 0x2c, 0xa3, 0x93, 0xc3, 0x7a, 0x83, 0x4c, 0x28, 0xc8, 0x05, 0x0d, - 0x84, 0x09, 0x0a, 0x4f, 0xb6, 0xe8, 0x21, 0xe4, 0x83, 0x85, 0xef, 0x7b, 0x13, 0xb3, 0xac, 0x72, - 0xdc, 0x7d, 0xcd, 0x7a, 0xe8, 0x3e, 0x56, 0x56, 0x38, 0xb6, 0x46, 0xef, 0x41, 0x91, 0x73, 0x61, - 0x73, 0xef, 0x13, 0x6a, 0x56, 0xe4, 0x8c, 0xe8, 0x97, 0x65, 0x77, 0x8e, 0x46, 0xa7, 0x23, 0xef, - 0x13, 0x8a, 0x0b, 0x9c, 0x0b, 0xb9, 0x40, 0x0d, 0x28, 0x5e, 0x10, 0xdf, 0x57, 0xfc, 0x52, 0x55, - 0xb3, 0x64, 0xbd, 0x97, 0xa7, 0x54, 0xd9, 0xa7, 0xdc, 0xdc, 0xb3, 0x32, 0x9d, 0x0a, 0x4e, 0xb6, - 0x08, 0x41, 0x96, 0xcf, 0xbc, 0xc8, 0xac, 0xab, 0x2e, 0x51, 0xeb, 0x86, 0x05, 0x79, 0x7d, 0x06, - 0xf4, 0xc5, 0x75, 0x0c, 0x86, 0xba, 0xea, 0x78, 0xf7, 0xbd, 0x6c, 0xb1, 0x56, 0xdf, 0x6b, 0x63, - 0xc5, 0xdf, 0x8b, 0x39, 0x1d, 0x45, 0x24, 0xf8, 0xc8, 0xe3, 0x02, 0x7d, 0x17, 0x2a, 0x4c, 0x21, - 0x36, 0x8f, 0x48, 0x90, 0x74, 0xc2, 0x5b, 0xd7, 0x54, 0x97, 0x34, 0x89, 0x2b, 0xbf, 0xcc, 0xd6, - 0x4e, 0x78, 0xfb, 0x8f, 0x06, 0xdc, 0x1e, 0x39, 0x53, 0x3a, 0x27, 0x07, 0x53, 0x12, 0x9c, 0xaf, - 0x27, 0xc3, 0x3e, 0x80, 0xaa, 0x15, 0xc2, 0xed, 0x70, 0x72, 0x93, 0xc1, 0x57, 0x94, 0x66, 0xfb, - 0xfc, 0xc9, 0x04, 0x61, 0xa8, 0x6f, 0x1d, 0xce, 0xf6, 0x3d, 0x2e, 0xe2, 0xb9, 0xd1, 0x7e, 0x05, - 0x11, 0x6c, 0x85, 0x16, 0x7b, 0xab, 0xb1, 0x1d, 0xb4, 0xfd, 0xeb, 0x34, 0xdc, 0xd2, 0x07, 0x9d, - 0x50, 0xea, 0x6e, 0x0e, 0x5b, 0x9a, 0x7a, 0xe7, 0x53, 0x35, 0xc6, 0x6e, 0x34, 0xa4, 0xd7, 0x56, - 0xe8, 0x78, 0x97, 0xed, 0xd3, 0x37, 0x61, 0xfb, 0xd8, 0xdb, 0x16, 0xe7, 0xa3, 0xaf, 0x03, 0x9a, - 0x91, 0xc9, 0x8c, 0xd8, 0x22, 0x8c, 0x3c, 0xc7, 0x8e, 0x18, 0x9d, 0x78, 0x3f, 0xd5, 0x23, 0x1c, - 0xd7, 0x95, 0xe4, 0x54, 0x0a, 0x4e, 0x14, 0x8e, 0xbe, 0x05, 0x6f, 0x69, 0xed, 0x71, 0x18, 0x0a, - 0x2e, 0x18, 0x89, 0x6c, 0x4e, 0xd9, 0x33, 0xca, 0x78, 0xdc, 0xf2, 0x5f, 0x50, 0xe2, 0x7e, 0x22, - 0x1d, 0x69, 0x61, 0xfb, 0x97, 0x79, 0x28, 0x9c, 0x90, 0xe7, 0x7e, 0x48, 0x5c, 0x64, 0x41, 0x39, - 0x79, 0x03, 0x78, 0x61, 0x10, 0xd7, 0xcf, 0x36, 0x24, 0x0b, 0x76, 0xc1, 0x29, 0x0b, 0x48, 0xfc, - 0x0e, 0x29, 0xe1, 0xf5, 0x5e, 0x76, 0xbd, 0x7a, 0xb0, 0x50, 0xd7, 0x9e, 0x7b, 0x0e, 0x0b, 0x35, - 0x51, 0x65, 0x70, 0x35, 0x46, 0x8f, 0x15, 0x88, 0xee, 0xc1, 0xde, 0xc4, 0x0b, 0x3c, 0x3e, 0xdd, - 0xe8, 0x65, 0x95, 0x5e, 0x2d, 0x81, 0x37, 0x8a, 0xf3, 0xd0, 0xf5, 0x26, 0xde, 0x46, 0x31, 0xa7, - 0x15, 0x13, 0x38, 0x56, 0x0c, 0xa1, 0xb6, 0x79, 0xba, 0xd8, 0x9e, 0xab, 0x49, 0xa9, 0xda, 0x3f, - 0x5a, 0x2d, 0x5b, 0xd5, 0x4d, 0x8a, 0x87, 0x87, 0xfc, 0x4d, 0x19, 0xa5, 0xba, 0xf1, 0x3f, 0x74, - 0x39, 0xfa, 0x06, 0xa0, 0x09, 0x23, 0x8e, 0xcc, 0x88, 0xed, 0x84, 0xb2, 0x29, 0x05, 0x75, 0xcd, - 0x82, 0x65, 0x74, 0xd2, 0xf8, 0x56, 0x22, 0x39, 0x48, 0x04, 0xea, 0xb9, 0xc8, 0x58, 0xc8, 0x14, - 0xc7, 0x95, 0xb0, 0xde, 0xa0, 0x1e, 0xe4, 0x7c, 0xf9, 0x52, 0x55, 0xdc, 0x54, 0xbe, 0xff, 0xf6, - 0x75, 0xf5, 0xac, 0x9e, 0xb2, 0x58, 0xeb, 0xa1, 0xef, 0x40, 0x5e, 0xb3, 0xb6, 0x62, 0xad, 0xf2, - 0xfd, 0x2f, 0x5f, 0x67, 0xb1, 0xf3, 0xf4, 0x3c, 0x4a, 0xe1, 0xd8, 0x04, 0x7d, 0x08, 0x05, 0xa6, - 0xa7, 0x64, 0x4c, 0x6d, 0xed, 0xff, 0x3f, 0x48, 0x8f, 0x52, 0x38, 0x31, 0x42, 0xc7, 0x50, 0xe1, - 0x5b, 0x2d, 0xae, 0x58, 0xed, 0x15, 0xf3, 0xf2, 0x1a, 0x2a, 0x38, 0x4a, 0xe1, 0x1d, 0x73, 0x19, - 0x8b, 0xa7, 0x68, 0x54, 0xd1, 0xde, 0x2b, 0x62, 0xd9, 0x21, 0x5a, 0x19, 0x8b, 0x36, 0x41, 0x8f, - 0x00, 0x9c, 0x75, 0xff, 0x9a, 0x35, 0xe5, 0xe0, 0xdd, 0xeb, 0x1c, 0xbc, 0xd4, 0xe5, 0x47, 0x29, - 0xbc, 0x65, 0xda, 0x2f, 0x41, 0xc1, 0xd5, 0x82, 0xaf, 0xfe, 0xcd, 0x80, 0xec, 0xe9, 0xf3, 0x88, - 0xa2, 0x77, 0xa0, 0x7c, 0xf6, 0x78, 0x74, 0x32, 0x38, 0x18, 0x3e, 0x1c, 0x0e, 0x0e, 0xeb, 0xa9, - 0xc6, 0xed, 0xcb, 0x2b, 0x6b, 0x4f, 0x8a, 0xce, 0x02, 0x1e, 0x51, 0x47, 0x15, 0x1e, 0x6a, 0x40, - 0xbe, 0xbf, 0x7f, 0xf0, 0xfd, 0xb3, 0x93, 0xba, 0xd1, 0xa8, 0x5d, 0x5e, 0x59, 0x20, 0x15, 0x74, - 0xee, 0xd1, 0x5d, 0x28, 0xe0, 0xc1, 0xe8, 0xf4, 0x09, 0x1e, 0xd4, 0xd3, 0x8d, 0xbd, 0xcb, 0x2b, - 0xab, 0x2c, 0x85, 0x71, 0x6a, 0xd1, 0x3d, 0xa8, 0x8e, 0x0e, 0x8e, 0x06, 0xc7, 0xfb, 0xf6, 0xc1, - 0xd1, 0xfe, 0xe3, 0x47, 0x83, 0x7a, 0xa6, 0x71, 0xe7, 0xf2, 0xca, 0xaa, 0x4b, 0x9d, 0xed, 0xcc, - 0xc9, 0x4f, 0x0c, 0x8f, 0x4f, 0x9e, 0xe0, 0xd3, 0x7a, 0x76, 0xf3, 0x09, 0x9d, 0x12, 0xd4, 0x06, - 0xd0, 0xd6, 0x0f, 0x07, 0x83, 0xc3, 0x7a, 0xae, 0x81, 0x2e, 0xaf, 0xac, 0x9a, 0x94, 0x6f, 0x22, - 0x6e, 0x14, 0x7f, 0xf5, 0xfb, 0x66, 0xea, 0xd3, 0x3f, 0x34, 0x53, 0xfd, 0xe6, 0x8b, 0x7f, 0x35, - 0x53, 0x2f, 0x56, 0x4d, 0xe3, 0x2f, 0xab, 0xa6, 0xf1, 0xd7, 0x55, 0xd3, 0xf8, 0xe7, 0xaa, 0x69, - 0xfc, 0xe6, 0xdf, 0xcd, 0xd4, 0xc7, 0x59, 0x99, 0xa6, 0x71, 0x5e, 0xfd, 0x75, 0x7a, 0xff, 0x7f, - 0x01, 0x00, 0x00, 0xff, 0xff, 0xfa, 0xd5, 0x0d, 0x5f, 0xda, 0x0d, 0x00, 0x00, + // 1575 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x57, 0xcd, 0x6f, 0x23, 0x49, + 0x15, 0x77, 0xfb, 0xdb, 0xcf, 0x1f, 0xf1, 0xd4, 0x0c, 0x6c, 0xaf, 0x35, 0xd8, 0xc6, 0xec, 0xee, + 0x58, 0x7c, 0xd8, 0xd2, 0xac, 0x60, 0xd1, 0x20, 0xad, 0x88, 0x13, 0xcf, 0xc4, 0xb0, 0x99, 0x44, + 0xe5, 0x04, 0xa4, 0x95, 0x50, 0x53, 0xee, 0x2e, 0xdb, 0x8d, 0xdb, 0xdd, 0x3d, 0x55, 0xe5, 0x09, + 0xb3, 0x17, 0x04, 0xe2, 0x80, 0xc2, 0x85, 0x0b, 0xc7, 0x48, 0x48, 0x70, 0xd8, 0x03, 0x7f, 0xc8, + 0xdc, 0xe0, 0x08, 0x42, 0x32, 0x60, 0x2e, 0x48, 0xfc, 0x07, 0x9c, 0x50, 0x55, 0x75, 0xfb, 0x63, + 0x27, 0x23, 0x92, 0x91, 0xf6, 0x12, 0x55, 0xfd, 0xde, 0x47, 0xbf, 0xf7, 0xfc, 0x7b, 0xef, 0x55, + 0xe0, 0x2e, 0x7f, 0xe6, 0x75, 0x7f, 0x12, 0x8c, 0xb8, 0xfa, 0xd3, 0x09, 0x59, 0x20, 0x02, 0x84, + 0xec, 0xc0, 0x9e, 0xb1, 0x80, 0xd8, 0xd3, 0x0e, 0x7f, 0xe6, 0x75, 0xa4, 0xa4, 0x76, 0x6f, 0x12, + 0x4c, 0x02, 0x25, 0xee, 0xca, 0x93, 0xd6, 0xac, 0xdd, 0x51, 0x5a, 0xe1, 0xa8, 0x6b, 0xf3, 0xe7, + 0x11, 0x84, 0x62, 0xc8, 0x21, 0x82, 0x44, 0xd8, 0x7d, 0xf9, 0x15, 0xfe, 0xcc, 0x1b, 0x11, 0x4e, + 0xbb, 0x5c, 0xb0, 0x85, 0x2d, 0x16, 0x8c, 0x3a, 0x91, 0xd4, 0x5c, 0x08, 0xd7, 0xeb, 0x4e, 0x3d, + 0xbb, 0x2b, 0xdc, 0x39, 0xe5, 0x82, 0xcc, 0x43, 0x2d, 0x69, 0xfd, 0x0c, 0x32, 0x1f, 0x51, 0xc2, + 0x29, 0xfa, 0x18, 0x72, 0x7e, 0xe0, 0x50, 0xcb, 0x75, 0x4c, 0xa3, 0x69, 0xb4, 0xcb, 0xbd, 0xfd, + 0xd5, 0xb2, 0x91, 0x7d, 0x1a, 0x38, 0x74, 0x70, 0xf8, 0xdf, 0x65, 0xe3, 0xfd, 0x89, 0x2b, 0xa6, + 0x8b, 0x51, 0xc7, 0x0e, 0xe6, 0xdd, 0x75, 0xec, 0xce, 0x68, 0x73, 0xee, 0x86, 0xb3, 0x49, 0x37, + 0x0a, 0xac, 0xa3, 0xcd, 0x70, 0x56, 0x7a, 0x1c, 0x38, 0xe8, 0x1e, 0x64, 0x68, 0x18, 0xd8, 0x53, + 0x33, 0xd9, 0x34, 0xda, 0x29, 0xac, 0x2f, 0x8f, 0xd2, 0xff, 0xfe, 0x5d, 0xc3, 0x68, 0xfd, 0xcd, + 0x80, 0x72, 0x8f, 0xd8, 0xb3, 0x45, 0x78, 0x48, 0x05, 0x71, 0x3d, 0x8e, 0x7a, 0x00, 0x5c, 0x10, + 0x26, 0x2c, 0x19, 0xab, 0x0a, 0xa6, 0xf8, 0xf0, 0x4b, 0x9d, 0x4d, 0xc1, 0x64, 0x2e, 0x9d, 0xa9, + 0x67, 0x77, 0xce, 0xe2, 0x5c, 0x7a, 0xe9, 0x97, 0xcb, 0x46, 0x02, 0x17, 0x94, 0x99, 0x44, 0xd1, + 0x87, 0x90, 0xa7, 0xbe, 0xa3, 0x3d, 0x24, 0x6f, 0xee, 0x21, 0x47, 0x7d, 0x47, 0xd9, 0xbf, 0x0d, + 0xa9, 0x05, 0x73, 0xcd, 0x54, 0xd3, 0x68, 0x17, 0x7a, 0xb9, 0xd5, 0xb2, 0x91, 0x3a, 0xc7, 0x03, + 0x2c, 0x31, 0xf4, 0x35, 0xb8, 0x33, 0x52, 0xf1, 0x5a, 0x0e, 0xe5, 0x36, 0x73, 0x43, 0x11, 0x30, + 0x33, 0xdd, 0x34, 0xda, 0x25, 0x5c, 0x1d, 0x45, 0x89, 0xc4, 0x78, 0xeb, 0x3f, 0x19, 0xa8, 0x60, + 0xca, 0x45, 0xc0, 0x68, 0x9c, 0xde, 0x3b, 0x50, 0xf1, 0x82, 0x0b, 0xeb, 0x82, 0x08, 0xca, 0xac, + 0x39, 0x61, 0x33, 0x95, 0x62, 0x09, 0x97, 0xbc, 0xe0, 0xe2, 0x87, 0x12, 0x3c, 0x26, 0x6c, 0x86, + 0x7e, 0x6b, 0x40, 0x45, 0x90, 0x91, 0x47, 0x2d, 0x46, 0x2f, 0x98, 0x2b, 0x28, 0x37, 0x93, 0xcd, + 0x54, 0xbb, 0xf8, 0xf0, 0x9b, 0x9d, 0x57, 0xa9, 0xd3, 0xd9, 0xfd, 0x44, 0xe7, 0x4c, 0x1a, 0xe2, + 0xc8, 0xae, 0xef, 0x0b, 0xf6, 0xa2, 0xf7, 0xc1, 0x2f, 0xfe, 0x7e, 0xc3, 0xdf, 0x70, 0x8b, 0x48, + 0x9d, 0xc1, 0x21, 0x2e, 0x8b, 0x6d, 0x67, 0xe8, 0x3e, 0xa4, 0x17, 0xcc, 0xe5, 0x66, 0xaa, 0x99, + 0x6a, 0x17, 0x7a, 0xf9, 0xd5, 0xb2, 0x91, 0x3e, 0xc7, 0x03, 0x8e, 0x15, 0xba, 0x53, 0xf6, 0xf4, + 0x1b, 0x94, 0xfd, 0x09, 0x14, 0x75, 0xd2, 0xb2, 0xb4, 0xdc, 0xcc, 0xa8, 0x8c, 0xdf, 0xfb, 0x4c, + 0xc6, 0x71, 0x70, 0x2a, 0xcb, 0x4d, 0xad, 0x31, 0x88, 0x18, 0xe0, 0xa8, 0x0b, 0xc5, 0xe0, 0x39, + 0x65, 0xcc, 0x75, 0xa8, 0xe5, 0x8c, 0xcc, 0xac, 0xfa, 0x1d, 0x2b, 0xab, 0x65, 0x03, 0x4e, 0x22, + 0xf8, 0xb0, 0x87, 0x21, 0x56, 0x39, 0x1c, 0xd5, 0xfe, 0x64, 0x40, 0x69, 0xbb, 0x6c, 0xe8, 0x47, + 0x90, 0xd7, 0xa1, 0xac, 0x1b, 0xa2, 0xb7, 0x5a, 0x36, 0x72, 0x4a, 0xe7, 0x16, 0x1d, 0xf1, 0x99, + 0x6a, 0xe6, 0x94, 0xcf, 0x81, 0x83, 0x7e, 0x0c, 0x85, 0x90, 0x30, 0xea, 0x0b, 0xe9, 0x3f, 0xa9, + 0xfc, 0x1f, 0xac, 0x96, 0x8d, 0xfc, 0xa9, 0x02, 0xdf, 0xfc, 0x03, 0x79, 0xed, 0x75, 0xe0, 0xd4, + 0x9e, 0x01, 0x7a, 0x95, 0x07, 0xa8, 0x0a, 0xa9, 0x19, 0x7d, 0xa1, 0x33, 0xc2, 0xf2, 0x88, 0xfa, + 0x90, 0x79, 0x4e, 0xbc, 0x45, 0xdc, 0x27, 0xdd, 0x5b, 0xf2, 0x0b, 0x6b, 0xeb, 0x47, 0xc9, 0x6f, + 0x1b, 0xad, 0x9f, 0x67, 0xa1, 0x3c, 0x98, 0x87, 0x01, 0x13, 0x31, 0xd9, 0xfb, 0x90, 0x55, 0x19, + 0x73, 0xd3, 0x50, 0xbf, 0xe5, 0x83, 0xeb, 0xbc, 0xef, 0x98, 0x68, 0xe7, 0x11, 0x31, 0x22, 0xe3, + 0xda, 0xa7, 0x19, 0xc8, 0x28, 0x1c, 0x3d, 0x82, 0xb4, 0xe4, 0x46, 0x34, 0x16, 0x6e, 0x4a, 0x0d, + 0x65, 0xb3, 0xe6, 0x6e, 0xf2, 0x5a, 0xee, 0x7e, 0x00, 0xb9, 0x20, 0x14, 0x6e, 0xe0, 0x73, 0xd5, + 0xf6, 0xbb, 0xd4, 0x8d, 0x07, 0xdb, 0xc1, 0xf0, 0x07, 0x27, 0x5a, 0x09, 0xc7, 0xda, 0xa8, 0x01, + 0xc5, 0x68, 0x20, 0x84, 0x44, 0x4c, 0x15, 0xef, 0x0b, 0x18, 0x34, 0x74, 0x4a, 0xc4, 0x54, 0x4e, + 0x0c, 0x4e, 0xe6, 0xa1, 0xe7, 0xfa, 0x13, 0x2b, 0x64, 0xc1, 0x84, 0x51, 0xae, 0xb9, 0x9d, 0xc4, + 0xd5, 0x58, 0x70, 0x1a, 0xe1, 0xe8, 0x2b, 0x50, 0x66, 0x94, 0x38, 0x1b, 0xc5, 0xac, 0x52, 0x2c, + 0x49, 0x70, 0xad, 0xf4, 0x2e, 0x54, 0x54, 0xf1, 0x37, 0x5a, 0x39, 0xa5, 0x55, 0x56, 0xe8, 0x5a, + 0x6d, 0x87, 0x64, 0xf9, 0xcf, 0x81, 0x64, 0x72, 0xb2, 0xdb, 0xc1, 0x7c, 0x4e, 0xcc, 0x42, 0xd3, + 0x68, 0x67, 0xb0, 0xbe, 0x20, 0x13, 0x72, 0xf2, 0x40, 0x7d, 0x61, 0x82, 0xc2, 0xe3, 0x2b, 0x7a, + 0x0c, 0x59, 0x7f, 0xe1, 0x79, 0xee, 0xd8, 0x2c, 0xaa, 0x1a, 0x77, 0x6e, 0xc8, 0x87, 0xce, 0x53, + 0x65, 0x85, 0x23, 0x6b, 0xf4, 0x1e, 0xe4, 0x39, 0x17, 0x16, 0x77, 0x3f, 0xa1, 0x66, 0x49, 0x2e, + 0x95, 0x5e, 0x51, 0x76, 0xe7, 0x70, 0x78, 0x36, 0x74, 0x3f, 0xa1, 0x38, 0xc7, 0xb9, 0x90, 0x07, + 0x54, 0x83, 0xfc, 0x05, 0xf1, 0x3c, 0x35, 0x90, 0xca, 0x6a, 0xf9, 0xac, 0xef, 0x32, 0x4a, 0x55, + 0x7d, 0xca, 0xcd, 0xbd, 0x66, 0xaa, 0x5d, 0xc2, 0xf1, 0x15, 0x21, 0x48, 0xf3, 0x99, 0x1b, 0x9a, + 0x55, 0xd5, 0x25, 0xea, 0x5c, 0x6b, 0x42, 0x56, 0xc7, 0x80, 0xbe, 0xb8, 0xce, 0xc1, 0x50, 0x3f, + 0x75, 0x74, 0xfb, 0x5e, 0x3a, 0x5f, 0xa9, 0xee, 0xb5, 0xb0, 0x1a, 0xf8, 0x8b, 0x39, 0x1d, 0x86, + 0xc4, 0xff, 0xc8, 0xe5, 0x02, 0x7d, 0x17, 0x4a, 0x4c, 0x21, 0x16, 0x0f, 0x89, 0x1f, 0x77, 0xc2, + 0x5b, 0xd7, 0xb0, 0x4b, 0x9a, 0x44, 0xcc, 0x2f, 0xb2, 0xb5, 0x13, 0xde, 0xfa, 0xa3, 0x01, 0x77, + 0x87, 0xf6, 0x94, 0xce, 0xc9, 0xc1, 0x94, 0xf8, 0x93, 0xf5, 0x2a, 0xd9, 0x07, 0x50, 0x5c, 0x21, + 0xdc, 0x0a, 0xc6, 0xb7, 0xd9, 0x94, 0x79, 0x69, 0xb6, 0xcf, 0x4f, 0xc6, 0x08, 0x43, 0x75, 0x2b, + 0x38, 0xcb, 0x73, 0xb9, 0x88, 0x16, 0x4d, 0xeb, 0x35, 0x83, 0x60, 0x2b, 0xb5, 0xc8, 0x5b, 0x85, + 0xed, 0xa0, 0xad, 0x5f, 0x27, 0xe1, 0x8e, 0x0e, 0x74, 0x4c, 0xa9, 0xb3, 0x09, 0xb6, 0x30, 0x75, + 0x27, 0x53, 0xb5, 0xf7, 0x6e, 0xb5, 0xd5, 0xd7, 0x56, 0xe8, 0x78, 0x77, 0x3d, 0x24, 0x6f, 0xb3, + 0x1e, 0x22, 0x6f, 0xdb, 0x4b, 0xe2, 0xeb, 0x80, 0x66, 0x64, 0x3c, 0x23, 0x96, 0x08, 0x42, 0xd7, + 0xb6, 0x42, 0x46, 0xc7, 0xee, 0x4f, 0xf5, 0xce, 0xc7, 0x55, 0x25, 0x39, 0x93, 0x82, 0x53, 0x85, + 0xa3, 0x6f, 0xc1, 0x5b, 0x5a, 0x7b, 0x14, 0x04, 0x82, 0x0b, 0x46, 0x42, 0x8b, 0x53, 0xf6, 0x9c, + 0x32, 0x1e, 0xb5, 0xfc, 0x17, 0x94, 0xb8, 0x17, 0x4b, 0x87, 0x5a, 0xd8, 0xfa, 0x65, 0x16, 0x72, + 0xa7, 0xe4, 0x85, 0x17, 0x10, 0x07, 0x35, 0xa1, 0x18, 0x3f, 0x1a, 0xdc, 0xc0, 0x8f, 0xf8, 0xb3, + 0x0d, 0x49, 0xc2, 0x2e, 0x38, 0x65, 0x3e, 0x89, 0x1e, 0x2e, 0x05, 0xbc, 0xbe, 0xcb, 0xae, 0x57, + 0x2f, 0x1c, 0xea, 0x58, 0x73, 0xd7, 0x66, 0x81, 0x1e, 0x54, 0x29, 0x5c, 0x8e, 0xd0, 0x63, 0x05, + 0xa2, 0x07, 0xb0, 0x37, 0x76, 0x7d, 0x97, 0x4f, 0x37, 0x7a, 0x69, 0xa5, 0x57, 0x89, 0xe1, 0x8d, + 0xe2, 0x3c, 0x70, 0xdc, 0xb1, 0xbb, 0x51, 0xcc, 0x68, 0xc5, 0x18, 0x8e, 0x14, 0x03, 0xa8, 0x6c, + 0xde, 0x3a, 0x96, 0xeb, 0xe8, 0xa1, 0x54, 0xee, 0x1d, 0xad, 0x96, 0x8d, 0xf2, 0xa6, 0xc4, 0x83, + 0x43, 0xfe, 0xa6, 0x13, 0xa5, 0xbc, 0xf1, 0x3f, 0x70, 0x38, 0xfa, 0x06, 0xa0, 0x31, 0x23, 0xb6, + 0xac, 0x88, 0x65, 0x07, 0xb2, 0x29, 0x05, 0x75, 0xcc, 0x5c, 0xd3, 0x68, 0x27, 0xf1, 0x9d, 0x58, + 0x72, 0x10, 0x0b, 0xd4, 0xfb, 0x92, 0xb1, 0x80, 0xa9, 0x19, 0x57, 0xc0, 0xfa, 0x82, 0xba, 0x90, + 0xf1, 0xe4, 0xd3, 0x56, 0xcd, 0xa6, 0xe2, 0xc3, 0xb7, 0xaf, 0xe3, 0xb3, 0x7a, 0xfb, 0x62, 0xad, + 0x87, 0xbe, 0x03, 0x59, 0x3d, 0xb5, 0xd5, 0xd4, 0x2a, 0x3e, 0xfc, 0xf2, 0x75, 0x16, 0x3b, 0x6f, + 0xd5, 0xa3, 0x04, 0x8e, 0x4c, 0xd0, 0x87, 0x90, 0x63, 0x7a, 0x4b, 0x46, 0xa3, 0xad, 0xf5, 0xff, + 0x17, 0xe9, 0x51, 0x02, 0xc7, 0x46, 0xe8, 0x18, 0x4a, 0x7c, 0xab, 0xc5, 0xd5, 0x54, 0x7b, 0xcd, + 0xbe, 0xbc, 0x66, 0x14, 0x1c, 0x25, 0xf0, 0x8e, 0xb9, 0xcc, 0xc5, 0x55, 0x63, 0x54, 0x8d, 0xbd, + 0xd7, 0xe4, 0xb2, 0x33, 0x68, 0x65, 0x2e, 0xda, 0x04, 0x3d, 0x01, 0xb0, 0xd7, 0xfd, 0x6b, 0x56, + 0x94, 0x83, 0x77, 0xaf, 0x73, 0xf0, 0x4a, 0x97, 0x1f, 0x25, 0xf0, 0x96, 0x69, 0xaf, 0x00, 0x39, + 0x47, 0x0b, 0xbe, 0xfa, 0x57, 0x03, 0xd2, 0x67, 0x2f, 0x42, 0x8a, 0xde, 0x81, 0xe2, 0xf9, 0xd3, + 0xe1, 0x69, 0xff, 0x60, 0xf0, 0x78, 0xd0, 0x3f, 0xac, 0x26, 0x6a, 0x77, 0x2f, 0xaf, 0x9a, 0x7b, + 0x52, 0x74, 0xee, 0xf3, 0x90, 0xda, 0x8a, 0x78, 0xa8, 0x06, 0xd9, 0xde, 0xfe, 0xc1, 0xf7, 0xcf, + 0x4f, 0xab, 0x46, 0xad, 0x72, 0x79, 0xd5, 0x04, 0xa9, 0xa0, 0x6b, 0x8f, 0xee, 0x43, 0x0e, 0xf7, + 0x87, 0x67, 0x27, 0xb8, 0x5f, 0x4d, 0xd6, 0xf6, 0x2e, 0xaf, 0x9a, 0x45, 0x29, 0x8c, 0x4a, 0x8b, + 0x1e, 0x40, 0x79, 0x78, 0x70, 0xd4, 0x3f, 0xde, 0xb7, 0x0e, 0x8e, 0xf6, 0x9f, 0x3e, 0xe9, 0x57, + 0x53, 0xb5, 0x7b, 0x97, 0x57, 0xcd, 0xaa, 0xd4, 0xd9, 0xae, 0x9c, 0xfc, 0xc4, 0xe0, 0xf8, 0xf4, + 0x04, 0x9f, 0x55, 0xd3, 0x9b, 0x4f, 0xe8, 0x92, 0xa0, 0x16, 0x80, 0xb6, 0x7e, 0xdc, 0xef, 0x1f, + 0x56, 0x33, 0x35, 0x74, 0x79, 0xd5, 0xac, 0x48, 0xf9, 0x26, 0xe3, 0x5a, 0xfe, 0x57, 0xbf, 0xaf, + 0x27, 0x3e, 0xfd, 0x43, 0x3d, 0xd1, 0xab, 0xbf, 0xfc, 0x67, 0x3d, 0xf1, 0x72, 0x55, 0x37, 0xfe, + 0xbc, 0xaa, 0x1b, 0x7f, 0x59, 0xd5, 0x8d, 0x7f, 0xac, 0xea, 0xc6, 0x6f, 0xfe, 0x55, 0x4f, 0x7c, + 0x9c, 0x96, 0x65, 0x1a, 0x65, 0xd5, 0xff, 0x5a, 0xef, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xd4, + 0x5e, 0x3c, 0x05, 0x0b, 0x0e, 0x00, 0x00, } diff --git a/pkg/sql/jobs/jobs.proto b/pkg/sql/jobs/jobs.proto index 68eff13718dd..5c5d56458a2c 100644 --- a/pkg/sql/jobs/jobs.proto +++ b/pkg/sql/jobs/jobs.proto @@ -59,6 +59,7 @@ message RestoreDetails { ]; repeated string uris = 3 [(gogoproto.customname) = "URIs"]; repeated sqlbase.TableDescriptor table_descs = 5; + string override_db = 6 [(gogoproto.customname) = "OverrideDB"]; } message ImportDetails {