From 176291386d9f814e40e4420c847b02f2a19472e8 Mon Sep 17 00:00:00 2001 From: Erik Trinh Date: Wed, 31 Oct 2018 17:30:28 -0400 Subject: [PATCH] sql: run check constraint mutations and validation by schema changer This change moves check constraint adds and drops through the schema changer when the transaction commits, moving the constraint through the same intermediate states as when index/columns are added or dropped. The only small differences are: - Constraint adds can start in write-only and immediately start being enforced if all used columns are in write-only or public. - Constraint drops can move immediately from public to absent if they have not yet been validated. Therefore, the check constraint is no longer immediately public when it is added, but allows data validation of the constraint to be performed when the constraint is added (and is now the default behaviour). Constraints can now also be added on columns in the process of being added. This change also ensures that there are no data anomalies in either versions of the schema when dropping a validated check constraint, as previously the transition moved the constraint from public -> absent. Writes on the new version were not being checked even though nodes on an older version expect all rows to conform to the constraint. Fixes #33593. See also #33550. Release note (sql change): Check constraint adds by default will validate table data with the added constraint asynchronously after the transaction commits. --- pkg/sql/alter_table.go | 53 +- pkg/sql/backfill.go | 78 ++- pkg/sql/backfill/backfill.go | 143 +++- pkg/sql/check.go | 2 +- pkg/sql/create_table.go | 12 +- pkg/sql/distsql_plan_backfill.go | 2 + pkg/sql/distsqlpb/processors.pb.go | 618 +++++++++--------- pkg/sql/distsqlpb/processors.proto | 1 + pkg/sql/distsqlrun/checkbackfiller.go | 97 +++ pkg/sql/distsqlrun/processors.go | 2 + .../logictest/testdata/logic_test/alter_table | 23 +- .../testdata/logic_test/schema_change_in_txn | 41 ++ pkg/sql/schema_changer.go | 64 +- pkg/sql/schema_changer_test.go | 59 +- pkg/sql/sqlbase/check.go | 69 +- pkg/sql/sqlbase/computed_exprs.go | 3 +- pkg/sql/sqlbase/structured.go | 106 ++- pkg/sql/sqlbase/structured.pb.go | 611 +++++++++-------- pkg/sql/sqlbase/structured.proto | 4 +- pkg/sql/sqlbase/table.go | 4 +- 20 files changed, 1333 insertions(+), 659 deletions(-) create mode 100644 pkg/sql/distsqlrun/checkbackfiller.go diff --git a/pkg/sql/alter_table.go b/pkg/sql/alter_table.go index a65e831e6e24..385c71433f8c 100644 --- a/pkg/sql/alter_table.go +++ b/pkg/sql/alter_table.go @@ -15,7 +15,6 @@ package sql import ( - "bytes" "context" gojson "encoding/json" "fmt" @@ -180,6 +179,11 @@ func (n *alterTableNode) startExec(params runParams) error { for k := range info { inuseNames[k] = struct{}{} } + for _, m := range n.tableDesc.Mutations { + if ck := m.GetCheck(); ck != nil { + inuseNames[ck.Name] = struct{}{} + } + } switch d := t.ConstraintDef.(type) { case *tree.UniqueConstraintTableDef: if d.PrimaryKey { @@ -213,14 +217,17 @@ func (n *alterTableNode) startExec(params runParams) error { } case *tree.CheckConstraintTableDef: + // A previous command could have added a column which the new constraint uses, + // allocate IDs now. + if err != n.tableDesc.AllocateIDs() { + return err + } ck, err := MakeCheckConstraint(params.ctx, n.tableDesc, d, inuseNames, ¶ms.p.semaCtx, params.EvalContext(), n.n.Table) if err != nil { return err } - ck.Validity = sqlbase.ConstraintValidity_Unvalidated - n.tableDesc.Checks = append(n.tableDesc.Checks, ck) - descriptorChanged = true + n.tableDesc.AddCheckMutation(*ck, sqlbase.DescriptorMutation_ADD) case *tree.ForeignKeyConstraintTableDef: for _, colName := range d.FromCols { @@ -404,6 +411,8 @@ func (n *alterTableNode) startExec(params runParams) error { return err } else if !used { validChecks = append(validChecks, check) + } else { + n.tableDesc.MaybeAddCheckDropMutation(*check) } } @@ -419,6 +428,17 @@ func (n *alterTableNode) startExec(params runParams) error { return err } + // Check that no dependent check constraints are queued to be added. + for _, m := range n.tableDesc.Mutations { + if ck := m.GetCheck(); ck != nil && m.Direction == sqlbase.DescriptorMutation_ADD { + if used, err := ck.UsesColumn(n.tableDesc.TableDesc(), col.ID); err != nil { + return err + } else if used { + return fmt.Errorf("referencing constraint %q in the middle of being added, try again later", ck.Name) + } + } + } + found := false for i := range n.tableDesc.Columns { if n.tableDesc.Columns[i].ID == col.ID { @@ -451,13 +471,19 @@ func (n *alterTableNode) startExec(params runParams) error { case sqlbase.ConstraintTypeUnique: return fmt.Errorf("UNIQUE constraint depends on index %q, use DROP INDEX with CASCADE if you really want to drop it", t.Constraint) case sqlbase.ConstraintTypeCheck: - for i := range n.tableDesc.Checks { - if n.tableDesc.Checks[i].Name == name { + found := false + for i, ck := range n.tableDesc.Checks { + if ck.Name == name { + n.tableDesc.MaybeAddCheckDropMutation(*ck) n.tableDesc.Checks = append(n.tableDesc.Checks[:i], n.tableDesc.Checks[i+1:]...) descriptorChanged = true + found = true break } } + if !found { + return fmt.Errorf("constraint %q in the middle of being added, try again later", t.Constraint) + } case sqlbase.ConstraintTypeFK: idx, err := n.tableDesc.FindIndexByID(details.Index.ID) if err != nil { @@ -496,7 +522,7 @@ func (n *alterTableNode) startExec(params runParams) error { } } if !found { - panic("constraint returned by GetConstraintInfo not found") + return fmt.Errorf("constraint %q in the middle of being added, try again later", t.Constraint) } ck := n.tableDesc.Checks[idx] if err := params.p.validateCheckExpr( @@ -772,19 +798,6 @@ func applyColumnMutation( return nil } -func labeledRowValues(cols []sqlbase.ColumnDescriptor, values tree.Datums) string { - var s bytes.Buffer - for i := range cols { - if i != 0 { - s.WriteString(`, `) - } - s.WriteString(cols[i].Name) - s.WriteString(`=`) - s.WriteString(values[i].String()) - } - return s.String() -} - // injectTableStats implements the INJECT STATISTICS command, which deletes any // existing statistics on the table and replaces them with the statistics in the // given json object (in the same format as the result of SHOW STATISTICS USING diff --git a/pkg/sql/backfill.go b/pkg/sql/backfill.go index 20b8d7132a05..c57ebe6bb8fd 100644 --- a/pkg/sql/backfill.go +++ b/pkg/sql/backfill.go @@ -41,9 +41,15 @@ const ( // processed per chunk during column truncate or backfill. columnTruncateAndBackfillChunkSize = 200 + // checkConstraintBackfillChunkSize is the maximum number of rows + // processed per chunk during check constraint validation. This value + // is larger than the other chunk constants because the operation involves + // only running a scan and does not write. + checkConstraintBackfillChunkSize = 1600 + // indexTruncateChunkSize is the maximum number of index entries truncated - // per chunk during an index truncation. This value is larger than the - // other chunk constants because the operation involves only running a + // per chunk during an index truncation. This value is larger than other + // chunk constants because the operation involves only running a // DeleteRange(). indexTruncateChunkSize = 600 @@ -132,6 +138,7 @@ func (sc *SchemaChanger) runBackfill( tableDesc.Name, tableDesc.Version, sc.mutationID) needColumnBackfill := false + needCheckValidation := false for _, m := range tableDesc.Mutations { if m.MutationID != sc.mutationID { break @@ -139,6 +146,10 @@ func (sc *SchemaChanger) runBackfill( switch m.Direction { case sqlbase.DescriptorMutation_ADD: switch t := m.Descriptor_.(type) { + case *sqlbase.DescriptorMutation_Check: + if t.Check.Validity == sqlbase.ConstraintValidity_Validating { + needCheckValidation = true + } case *sqlbase.DescriptorMutation_Column: if sqlbase.ColumnNeedsBackfill(m.GetColumn()) { needColumnBackfill = true @@ -151,6 +162,8 @@ func (sc *SchemaChanger) runBackfill( case sqlbase.DescriptorMutation_DROP: switch t := m.Descriptor_.(type) { + case *sqlbase.DescriptorMutation_Check: + // Nothing to do. case *sqlbase.DescriptorMutation_Column: needColumnBackfill = true case *sqlbase.DescriptorMutation_Index: @@ -186,6 +199,13 @@ func (sc *SchemaChanger) runBackfill( } } + // Validate checks. + if needCheckValidation { + if err := sc.validateChecks(ctx, evalCtx, lease, version); err != nil { + return err + } + } + return nil } @@ -202,6 +222,18 @@ func (sc *SchemaChanger) getTableVersion( return tableDesc, nil } +func (sc *SchemaChanger) validateChecks( + ctx context.Context, + evalCtx *extendedEvalContext, + lease *sqlbase.TableDescriptor_SchemaChangeLease, + version sqlbase.DescriptorVersion, +) error { + return sc.distBackfill( + ctx, evalCtx, + lease, version, checkConstraintBackfill, checkConstraintBackfillChunkSize, + backfill.CheckMutationFilter) +} + func (sc *SchemaChanger) truncateIndexes( ctx context.Context, lease *sqlbase.TableDescriptor_SchemaChangeLease, @@ -286,6 +318,7 @@ const ( _ backfillType = iota columnBackfill indexBackfill + checkConstraintBackfill ) // getJobIDForMutationWithDescriptor returns a job id associated with a mutation given @@ -517,9 +550,9 @@ func runSchemaChangesInTxn( return nil } - // Only needed because columnBackfillInTxn() backfills - // all column mutations. - doneColumnBackfill := false + // Only needed because columnBackfillInTxn() and checkValidateInTxn() + // backfills are applied to all related mutations. + doneColumnBackfill, doneCheckValidation := false, false for _, m := range tableDesc.Mutations { immutDesc := sqlbase.NewImmutableTableDescriptor(*tableDesc.TableDesc()) switch m.Direction { @@ -539,6 +572,15 @@ func runSchemaChangesInTxn( return err } + case *sqlbase.DescriptorMutation_Check: + if doneCheckValidation || m.GetCheck().Validity != sqlbase.ConstraintValidity_Validating { + break + } + if err := checkValidateInTxn(ctx, txn, evalCtx, immutDesc, traceKV); err != nil { + return err + } + doneCheckValidation = true + default: return errors.Errorf("unsupported mutation: %+v", m) } @@ -560,6 +602,9 @@ func runSchemaChangesInTxn( return err } + case *sqlbase.DescriptorMutation_Check: + // No-op. + default: return errors.Errorf("unsupported mutation: %+v", m) } @@ -574,6 +619,29 @@ func runSchemaChangesInTxn( return nil } +func checkValidateInTxn( + ctx context.Context, + txn *client.Txn, + evalCtx *tree.EvalContext, + tableDesc *sqlbase.ImmutableTableDescriptor, + traceKV bool, +) error { + var backfiller backfill.CheckBackfiller + if err := backfiller.Init(evalCtx, tableDesc); err != nil { + return err + } + + sp := tableDesc.PrimaryIndexSpan() + for sp.Key != nil { + var err error + sp.Key, err = backfiller.RunCheckBackfillChunk(ctx, txn, tableDesc, sp, checkConstraintBackfillChunkSize, traceKV) + if err != nil { + return err + } + } + return nil +} + // columnBackfillInTxn backfills columns for all mutation columns in // the mutation list. func columnBackfillInTxn( diff --git a/pkg/sql/backfill/backfill.go b/pkg/sql/backfill/backfill.go index 9cf80a4a56e1..e22d4a450dc7 100644 --- a/pkg/sql/backfill/backfill.go +++ b/pkg/sql/backfill/backfill.go @@ -34,6 +34,14 @@ import ( // MutationFilter is the type of a simple predicate on a mutation. type MutationFilter func(sqlbase.DescriptorMutation) bool +// CheckMutationFilter is a filter that allows mutations that add +// check constraints. +func CheckMutationFilter(m sqlbase.DescriptorMutation) bool { + return m.GetCheck() != nil && + m.Direction == sqlbase.DescriptorMutation_ADD && + m.GetCheck().Validity == sqlbase.ConstraintValidity_Validating +} + // ColumnMutationFilter is a filter that allows mutations that add or drop // columns. func ColumnMutationFilter(m sqlbase.DescriptorMutation) bool { @@ -52,6 +60,139 @@ type backfiller struct { alloc sqlbase.DatumAlloc } +// CheckBackfiller is capable of backfilling all the added checks. +type CheckBackfiller struct { + backfiller + + addedExprs []tree.TypedExpr + added []sqlbase.TableDescriptor_CheckConstraint + // colIdxMap maps ColumnIDs to indices into desc.Columns and desc.Mutations. + colIdxMap map[sqlbase.ColumnID]int + cols []sqlbase.ColumnDescriptor + + evalCtx *tree.EvalContext +} + +// Init initializes a CheckBackfiller. +func (cb *CheckBackfiller) Init( + evalCtx *tree.EvalContext, desc *sqlbase.ImmutableTableDescriptor, +) error { + cb.evalCtx = evalCtx + numCols := len(desc.Columns) + cb.cols = desc.Columns + if len(desc.Mutations) > 0 { + cb.cols = make([]sqlbase.ColumnDescriptor, 0, numCols+len(desc.Mutations)) + cb.cols = append(cb.cols, desc.Columns...) + for _, m := range desc.Mutations { + if column := m.GetColumn(); column != nil && + m.Direction == sqlbase.DescriptorMutation_ADD && + m.State == sqlbase.DescriptorMutation_DELETE_AND_WRITE_ONLY { + cb.cols = append(cb.cols, *column) + } + } + } + + mutationID := desc.Mutations[0].MutationID + for _, m := range desc.Mutations { + if m.MutationID != mutationID { + break + } + if CheckMutationFilter(m) { + ck := m.GetCheck() + cb.added = append(cb.added, *ck) + } + } + + var txCtx transform.ExprTransformContext + var err error + cb.addedExprs, err = sqlbase.MakeCheckExprs( + cb.added, + tree.NewUnqualifiedTableName(tree.Name(desc.Name)), + cb.cols, + &txCtx, + cb.evalCtx, + ) + if err != nil { + return err + } + + cb.colIdxMap = make(map[sqlbase.ColumnID]int, len(cb.cols)) + for i, c := range cb.cols { + cb.colIdxMap[c.ID] = i + } + + // Get all values for displaying the whole row that fails any check. + var valNeededForCol util.FastIntSet + valNeededForCol.AddRange(0, len(cb.cols)-1) + + tableArgs := row.FetcherTableArgs{ + Desc: desc, + Index: &desc.PrimaryIndex, + ColIdxMap: cb.colIdxMap, + Cols: cb.cols, + ValNeededForCol: valNeededForCol, + } + return cb.fetcher.Init( + false /* reverse */, false /* returnRangeInfo */, false /* isCheck */, &cb.alloc, tableArgs, + ) +} + +// RunCheckBackfillChunk runs an check validation over a chunk of the table +// by traversing the span sp provided. The validation is run for the added +// checks. +func (cb *CheckBackfiller) RunCheckBackfillChunk( + ctx context.Context, + txn *client.Txn, + tableDesc *sqlbase.ImmutableTableDescriptor, + sp roachpb.Span, + chunkSize int64, + traceKV bool, +) (roachpb.Key, error) { + // Get the next set of rows. + // + // Running the scan and applying the changes in many transactions + // is fine because the schema change is in the correct state to + // handle intermediate OLTP commands which delete and add values + // during the scan. Index entries in the new index are being + // populated and deleted by the OLTP commands but not otherwise + // read or used + if err := cb.fetcher.StartScan( + ctx, txn, []roachpb.Span{sp}, true /* limitBatches */, chunkSize, traceKV, + ); err != nil { + log.Errorf(ctx, "scan error: %s", err) + return roachpb.Key{}, err + } + + iv := &sqlbase.RowIndexedVarContainer{ + Cols: cb.cols, + Mapping: cb.colIdxMap, + } + cb.evalCtx.IVarContainer = iv + for i := int64(0); i < chunkSize; i++ { + datums, _, _, err := cb.fetcher.NextRowDecoded(ctx) + if err != nil { + return roachpb.Key{}, err + } + if datums == nil { + break + } + iv.CurSourceRow = datums + + for j, e := range cb.addedExprs { + val, err := e.Eval(cb.evalCtx) + if err != nil { + return roachpb.Key{}, sqlbase.NewInvalidSchemaDefinitionError(err) + } + // Expression already type checked. + if val == tree.DBoolFalse { + return roachpb.Key{}, errors.Errorf("validation of CHECK %q failed on row: %s", + cb.added[j].Expr, sqlbase.LabeledRowValues(cb.cols, datums)) + } + } + } + return cb.fetcher.Key(), nil +} + // ColumnBackfiller is capable of running a column backfill for all // updateCols. type ColumnBackfiller struct { @@ -418,7 +559,7 @@ func (ib *IndexBackfiller) BuildIndexEntriesChunk( } // RunIndexBackfillChunk runs an index backfill over a chunk of the table -// by tracversing the span sp provided. The backfill is run for the added +// by traversing the span sp provided. The backfill is run for the added // indexes. func (ib *IndexBackfiller) RunIndexBackfillChunk( ctx context.Context, diff --git a/pkg/sql/check.go b/pkg/sql/check.go index e47a273f537c..1cb0f45e909f 100644 --- a/pkg/sql/check.go +++ b/pkg/sql/check.go @@ -69,7 +69,7 @@ func (p *planner) validateCheckExpr( } if next { return errors.Errorf("validation of CHECK %q failed on row: %s", - expr.String(), labeledRowValues(tableDesc.Columns, rows.Values())) + expr.String(), sqlbase.LabeledRowValues(tableDesc.Columns, rows.Values())) } return nil } diff --git a/pkg/sql/create_table.go b/pkg/sql/create_table.go index 111d719cf3c1..f8560c311d3a 100644 --- a/pkg/sql/create_table.go +++ b/pkg/sql/create_table.go @@ -1203,7 +1203,8 @@ func MakeTableDesc( if err != nil { return desc, err } - desc.Checks = append(desc.Checks, ck) + ck.Validity = sqlbase.ConstraintValidity_Validated + desc.AddCheck(*ck) case *tree.ForeignKeyConstraintTableDef: if err := ResolveFK(ctx, txn, fkResolver, &desc, d, affected, NewTable); err != nil { @@ -1486,11 +1487,12 @@ func replaceVars( return nil, true, expr } - col, err := desc.FindActiveColumnByName(string(c.ColumnName)) - if err != nil { + col, dropped, err := desc.FindColumnByName(c.ColumnName) + if err != nil || dropped { return fmt.Errorf("column %q not found for constraint %q", c.ColumnName, expr.String()), false, nil } + colIDs[col.ID] = struct{}{} // Convert to a dummy node of the correct type. return nil, false, &dummyColumnItem{typ: col.Type.ToDatumType(), name: c.ColumnName} @@ -1499,6 +1501,7 @@ func replaceVars( } // MakeCheckConstraint makes a descriptor representation of a check from a def. +// It returns true if all referenced columns are public or in DELETE_AND_WRITE_ONLY. func MakeCheckConstraint( ctx context.Context, desc *sqlbase.MutableTableDescriptor, @@ -1536,7 +1539,7 @@ func MakeCheckConstraint( sort.Sort(sqlbase.ColumnIDs(colIDs)) sourceInfo := sqlbase.NewSourceInfoForSingleTable( - tableName, sqlbase.ResultColumnsFromColDescs(desc.Columns), + tableName, sqlbase.ResultColumnsFromColDescs(desc.AllNonDropColumns()), ) sources := sqlbase.MultiSourceInfo{sourceInfo} @@ -1549,5 +1552,6 @@ func MakeCheckConstraint( Expr: tree.Serialize(expr), Name: name, ColumnIDs: colIDs, + Validity: sqlbase.ConstraintValidity_Validating, }, nil } diff --git a/pkg/sql/distsql_plan_backfill.go b/pkg/sql/distsql_plan_backfill.go index 2e0fd4979b7d..2e4f40af6259 100644 --- a/pkg/sql/distsql_plan_backfill.go +++ b/pkg/sql/distsql_plan_backfill.go @@ -45,6 +45,8 @@ func initBackfillerSpec( ret.Type = distsqlpb.BackfillerSpec_Index case columnBackfill: ret.Type = distsqlpb.BackfillerSpec_Column + case checkConstraintBackfill: + ret.Type = distsqlpb.BackfillerSpec_Check default: return distsqlpb.BackfillerSpec{}, errors.Errorf("bad backfill type %d", backfillType) } diff --git a/pkg/sql/distsqlpb/processors.pb.go b/pkg/sql/distsqlpb/processors.pb.go index 88e2c96a208c..ff67d68a7bfa 100644 --- a/pkg/sql/distsqlpb/processors.pb.go +++ b/pkg/sql/distsqlpb/processors.pb.go @@ -67,7 +67,7 @@ func (x *ScanVisibility) UnmarshalJSON(data []byte) error { return nil } func (ScanVisibility) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{0} + return fileDescriptor_processors_601c194419973a68, []int{0} } type SketchType int32 @@ -102,7 +102,7 @@ func (x *SketchType) UnmarshalJSON(data []byte) error { return nil } func (SketchType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{1} + return fileDescriptor_processors_601c194419973a68, []int{1} } // These mirror the aggregate functions supported by sql/parser. See @@ -198,7 +198,7 @@ func (x *AggregatorSpec_Func) UnmarshalJSON(data []byte) error { return nil } func (AggregatorSpec_Func) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{17, 0} + return fileDescriptor_processors_601c194419973a68, []int{17, 0} } type AggregatorSpec_Type int32 @@ -244,7 +244,7 @@ func (x *AggregatorSpec_Type) UnmarshalJSON(data []byte) error { return nil } func (AggregatorSpec_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{17, 1} + return fileDescriptor_processors_601c194419973a68, []int{17, 1} } type BackfillerSpec_Type int32 @@ -253,17 +253,20 @@ const ( BackfillerSpec_Invalid BackfillerSpec_Type = 0 BackfillerSpec_Column BackfillerSpec_Type = 1 BackfillerSpec_Index BackfillerSpec_Type = 2 + BackfillerSpec_Check BackfillerSpec_Type = 3 ) var BackfillerSpec_Type_name = map[int32]string{ 0: "Invalid", 1: "Column", 2: "Index", + 3: "Check", } var BackfillerSpec_Type_value = map[string]int32{ "Invalid": 0, "Column": 1, "Index": 2, + "Check": 3, } func (x BackfillerSpec_Type) Enum() *BackfillerSpec_Type { @@ -283,7 +286,7 @@ func (x *BackfillerSpec_Type) UnmarshalJSON(data []byte) error { return nil } func (BackfillerSpec_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{18, 0} + return fileDescriptor_processors_601c194419973a68, []int{18, 0} } type WindowerSpec_WindowFunc int32 @@ -347,7 +350,7 @@ func (x *WindowerSpec_WindowFunc) UnmarshalJSON(data []byte) error { return nil } func (WindowerSpec_WindowFunc) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{29, 0} + return fileDescriptor_processors_601c194419973a68, []int{29, 0} } // Mode indicates which mode of framing is used. @@ -391,7 +394,7 @@ func (x *WindowerSpec_Frame_Mode) UnmarshalJSON(data []byte) error { return nil } func (WindowerSpec_Frame_Mode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{29, 1, 0} + return fileDescriptor_processors_601c194419973a68, []int{29, 1, 0} } // BoundType indicates which type of boundary is used. @@ -438,7 +441,7 @@ func (x *WindowerSpec_Frame_BoundType) UnmarshalJSON(data []byte) error { return nil } func (WindowerSpec_Frame_BoundType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{29, 1, 1} + return fileDescriptor_processors_601c194419973a68, []int{29, 1, 1} } // Each processor has the following components: @@ -487,7 +490,7 @@ func (m *ProcessorSpec) Reset() { *m = ProcessorSpec{} } func (m *ProcessorSpec) String() string { return proto.CompactTextString(m) } func (*ProcessorSpec) ProtoMessage() {} func (*ProcessorSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{0} + return fileDescriptor_processors_601c194419973a68, []int{0} } func (m *ProcessorSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -548,7 +551,7 @@ func (m *PostProcessSpec) Reset() { *m = PostProcessSpec{} } func (m *PostProcessSpec) String() string { return proto.CompactTextString(m) } func (*PostProcessSpec) ProtoMessage() {} func (*PostProcessSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{1} + return fileDescriptor_processors_601c194419973a68, []int{1} } func (m *PostProcessSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -606,7 +609,7 @@ func (m *ProcessorCoreUnion) Reset() { *m = ProcessorCoreUnion{} } func (m *ProcessorCoreUnion) String() string { return proto.CompactTextString(m) } func (*ProcessorCoreUnion) ProtoMessage() {} func (*ProcessorCoreUnion) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{2} + return fileDescriptor_processors_601c194419973a68, []int{2} } func (m *ProcessorCoreUnion) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -643,7 +646,7 @@ func (m *NoopCoreSpec) Reset() { *m = NoopCoreSpec{} } func (m *NoopCoreSpec) String() string { return proto.CompactTextString(m) } func (*NoopCoreSpec) ProtoMessage() {} func (*NoopCoreSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{3} + return fileDescriptor_processors_601c194419973a68, []int{3} } func (m *NoopCoreSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -678,7 +681,7 @@ func (m *MetadataTestSenderSpec) Reset() { *m = MetadataTestSenderSpec{} func (m *MetadataTestSenderSpec) String() string { return proto.CompactTextString(m) } func (*MetadataTestSenderSpec) ProtoMessage() {} func (*MetadataTestSenderSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{4} + return fileDescriptor_processors_601c194419973a68, []int{4} } func (m *MetadataTestSenderSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -713,7 +716,7 @@ func (m *MetadataTestReceiverSpec) Reset() { *m = MetadataTestReceiverSp func (m *MetadataTestReceiverSpec) String() string { return proto.CompactTextString(m) } func (*MetadataTestReceiverSpec) ProtoMessage() {} func (*MetadataTestReceiverSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{5} + return fileDescriptor_processors_601c194419973a68, []int{5} } func (m *MetadataTestReceiverSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -757,7 +760,7 @@ func (m *ValuesCoreSpec) Reset() { *m = ValuesCoreSpec{} } func (m *ValuesCoreSpec) String() string { return proto.CompactTextString(m) } func (*ValuesCoreSpec) ProtoMessage() {} func (*ValuesCoreSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{6} + return fileDescriptor_processors_601c194419973a68, []int{6} } func (m *ValuesCoreSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -795,7 +798,7 @@ func (m *TableReaderSpan) Reset() { *m = TableReaderSpan{} } func (m *TableReaderSpan) String() string { return proto.CompactTextString(m) } func (*TableReaderSpan) ProtoMessage() {} func (*TableReaderSpan) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{7} + return fileDescriptor_processors_601c194419973a68, []int{7} } func (m *TableReaderSpan) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -865,7 +868,7 @@ func (m *TableReaderSpec) Reset() { *m = TableReaderSpec{} } func (m *TableReaderSpec) String() string { return proto.CompactTextString(m) } func (*TableReaderSpec) ProtoMessage() {} func (*TableReaderSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{8} + return fileDescriptor_processors_601c194419973a68, []int{8} } func (m *TableReaderSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -951,7 +954,7 @@ func (m *JoinReaderSpec) Reset() { *m = JoinReaderSpec{} } func (m *JoinReaderSpec) String() string { return proto.CompactTextString(m) } func (*JoinReaderSpec) ProtoMessage() {} func (*JoinReaderSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{9} + return fileDescriptor_processors_601c194419973a68, []int{9} } func (m *JoinReaderSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -997,7 +1000,7 @@ func (m *SorterSpec) Reset() { *m = SorterSpec{} } func (m *SorterSpec) String() string { return proto.CompactTextString(m) } func (*SorterSpec) ProtoMessage() {} func (*SorterSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{10} + return fileDescriptor_processors_601c194419973a68, []int{10} } func (m *SorterSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1043,7 +1046,7 @@ func (m *DistinctSpec) Reset() { *m = DistinctSpec{} } func (m *DistinctSpec) String() string { return proto.CompactTextString(m) } func (*DistinctSpec) ProtoMessage() {} func (*DistinctSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{11} + return fileDescriptor_processors_601c194419973a68, []int{11} } func (m *DistinctSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1101,7 +1104,7 @@ func (m *ZigzagJoinerSpec) Reset() { *m = ZigzagJoinerSpec{} } func (m *ZigzagJoinerSpec) String() string { return proto.CompactTextString(m) } func (*ZigzagJoinerSpec) ProtoMessage() {} func (*ZigzagJoinerSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{12} + return fileDescriptor_processors_601c194419973a68, []int{12} } func (m *ZigzagJoinerSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1145,7 +1148,7 @@ func (m *LocalPlanNodeSpec) Reset() { *m = LocalPlanNodeSpec{} } func (m *LocalPlanNodeSpec) String() string { return proto.CompactTextString(m) } func (*LocalPlanNodeSpec) ProtoMessage() {} func (*LocalPlanNodeSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{13} + return fileDescriptor_processors_601c194419973a68, []int{13} } func (m *LocalPlanNodeSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1180,7 +1183,7 @@ func (m *Columns) Reset() { *m = Columns{} } func (m *Columns) String() string { return proto.CompactTextString(m) } func (*Columns) ProtoMessage() {} func (*Columns) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{14} + return fileDescriptor_processors_601c194419973a68, []int{14} } func (m *Columns) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1250,7 +1253,7 @@ func (m *MergeJoinerSpec) Reset() { *m = MergeJoinerSpec{} } func (m *MergeJoinerSpec) String() string { return proto.CompactTextString(m) } func (*MergeJoinerSpec) ProtoMessage() {} func (*MergeJoinerSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{15} + return fileDescriptor_processors_601c194419973a68, []int{15} } func (m *MergeJoinerSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1339,7 +1342,7 @@ func (m *HashJoinerSpec) Reset() { *m = HashJoinerSpec{} } func (m *HashJoinerSpec) String() string { return proto.CompactTextString(m) } func (*HashJoinerSpec) ProtoMessage() {} func (*HashJoinerSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{16} + return fileDescriptor_processors_601c194419973a68, []int{16} } func (m *HashJoinerSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1387,7 +1390,7 @@ func (m *AggregatorSpec) Reset() { *m = AggregatorSpec{} } func (m *AggregatorSpec) String() string { return proto.CompactTextString(m) } func (*AggregatorSpec) ProtoMessage() {} func (*AggregatorSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{17} + return fileDescriptor_processors_601c194419973a68, []int{17} } func (m *AggregatorSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1440,7 +1443,7 @@ func (m *AggregatorSpec_Aggregation) Reset() { *m = AggregatorSpec_Aggre func (m *AggregatorSpec_Aggregation) String() string { return proto.CompactTextString(m) } func (*AggregatorSpec_Aggregation) ProtoMessage() {} func (*AggregatorSpec_Aggregation) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{17, 0} + return fileDescriptor_processors_601c194419973a68, []int{17, 0} } func (m *AggregatorSpec_Aggregation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1500,7 +1503,7 @@ func (m *BackfillerSpec) Reset() { *m = BackfillerSpec{} } func (m *BackfillerSpec) String() string { return proto.CompactTextString(m) } func (*BackfillerSpec) ProtoMessage() {} func (*BackfillerSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{18} + return fileDescriptor_processors_601c194419973a68, []int{18} } func (m *BackfillerSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1540,7 +1543,7 @@ func (m *FlowSpec) Reset() { *m = FlowSpec{} } func (m *FlowSpec) String() string { return proto.CompactTextString(m) } func (*FlowSpec) ProtoMessage() {} func (*FlowSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{19} + return fileDescriptor_processors_601c194419973a68, []int{19} } func (m *FlowSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1582,7 +1585,7 @@ func (m *JobProgress) Reset() { *m = JobProgress{} } func (m *JobProgress) String() string { return proto.CompactTextString(m) } func (*JobProgress) ProtoMessage() {} func (*JobProgress) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{20} + return fileDescriptor_processors_601c194419973a68, []int{20} } func (m *JobProgress) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1636,7 +1639,7 @@ func (m *ReadImportDataSpec) Reset() { *m = ReadImportDataSpec{} } func (m *ReadImportDataSpec) String() string { return proto.CompactTextString(m) } func (*ReadImportDataSpec) ProtoMessage() {} func (*ReadImportDataSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{21} + return fileDescriptor_processors_601c194419973a68, []int{21} } func (m *ReadImportDataSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1683,7 +1686,7 @@ func (m *SSTWriterSpec) Reset() { *m = SSTWriterSpec{} } func (m *SSTWriterSpec) String() string { return proto.CompactTextString(m) } func (*SSTWriterSpec) ProtoMessage() {} func (*SSTWriterSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{22} + return fileDescriptor_processors_601c194419973a68, []int{22} } func (m *SSTWriterSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1721,7 +1724,7 @@ func (m *SSTWriterSpec_SpanName) Reset() { *m = SSTWriterSpec_SpanName{} func (m *SSTWriterSpec_SpanName) String() string { return proto.CompactTextString(m) } func (*SSTWriterSpec_SpanName) ProtoMessage() {} func (*SSTWriterSpec_SpanName) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{22, 0} + return fileDescriptor_processors_601c194419973a68, []int{22, 0} } func (m *SSTWriterSpec_SpanName) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1765,7 +1768,7 @@ func (m *CSVWriterSpec) Reset() { *m = CSVWriterSpec{} } func (m *CSVWriterSpec) String() string { return proto.CompactTextString(m) } func (*CSVWriterSpec) ProtoMessage() {} func (*CSVWriterSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{23} + return fileDescriptor_processors_601c194419973a68, []int{23} } func (m *CSVWriterSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1812,7 +1815,7 @@ func (m *SketchSpec) Reset() { *m = SketchSpec{} } func (m *SketchSpec) String() string { return proto.CompactTextString(m) } func (*SketchSpec) ProtoMessage() {} func (*SketchSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{24} + return fileDescriptor_processors_601c194419973a68, []int{24} } func (m *SketchSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1879,7 +1882,7 @@ func (m *SamplerSpec) Reset() { *m = SamplerSpec{} } func (m *SamplerSpec) String() string { return proto.CompactTextString(m) } func (*SamplerSpec) ProtoMessage() {} func (*SamplerSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{25} + return fileDescriptor_processors_601c194419973a68, []int{25} } func (m *SamplerSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1936,7 +1939,7 @@ func (m *SampleAggregatorSpec) Reset() { *m = SampleAggregatorSpec{} } func (m *SampleAggregatorSpec) String() string { return proto.CompactTextString(m) } func (*SampleAggregatorSpec) ProtoMessage() {} func (*SampleAggregatorSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{26} + return fileDescriptor_processors_601c194419973a68, []int{26} } func (m *SampleAggregatorSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2001,7 +2004,7 @@ func (m *InterleavedReaderJoinerSpec) Reset() { *m = InterleavedReaderJo func (m *InterleavedReaderJoinerSpec) String() string { return proto.CompactTextString(m) } func (*InterleavedReaderJoinerSpec) ProtoMessage() {} func (*InterleavedReaderJoinerSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{27} + return fileDescriptor_processors_601c194419973a68, []int{27} } func (m *InterleavedReaderJoinerSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2059,7 +2062,7 @@ func (m *InterleavedReaderJoinerSpec_Table) Reset() { *m = InterleavedRe func (m *InterleavedReaderJoinerSpec_Table) String() string { return proto.CompactTextString(m) } func (*InterleavedReaderJoinerSpec_Table) ProtoMessage() {} func (*InterleavedReaderJoinerSpec_Table) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{27, 0} + return fileDescriptor_processors_601c194419973a68, []int{27, 0} } func (m *InterleavedReaderJoinerSpec_Table) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2101,7 +2104,7 @@ func (m *ProjectSetSpec) Reset() { *m = ProjectSetSpec{} } func (m *ProjectSetSpec) String() string { return proto.CompactTextString(m) } func (*ProjectSetSpec) ProtoMessage() {} func (*ProjectSetSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{28} + return fileDescriptor_processors_601c194419973a68, []int{28} } func (m *ProjectSetSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2145,7 +2148,7 @@ func (m *WindowerSpec) Reset() { *m = WindowerSpec{} } func (m *WindowerSpec) String() string { return proto.CompactTextString(m) } func (*WindowerSpec) ProtoMessage() {} func (*WindowerSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{29} + return fileDescriptor_processors_601c194419973a68, []int{29} } func (m *WindowerSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2183,7 +2186,7 @@ func (m *WindowerSpec_Func) Reset() { *m = WindowerSpec_Func{} } func (m *WindowerSpec_Func) String() string { return proto.CompactTextString(m) } func (*WindowerSpec_Func) ProtoMessage() {} func (*WindowerSpec_Func) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{29, 0} + return fileDescriptor_processors_601c194419973a68, []int{29, 0} } func (m *WindowerSpec_Func) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2220,7 +2223,7 @@ func (m *WindowerSpec_Frame) Reset() { *m = WindowerSpec_Frame{} } func (m *WindowerSpec_Frame) String() string { return proto.CompactTextString(m) } func (*WindowerSpec_Frame) ProtoMessage() {} func (*WindowerSpec_Frame) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{29, 1} + return fileDescriptor_processors_601c194419973a68, []int{29, 1} } func (m *WindowerSpec_Frame) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2262,7 +2265,7 @@ func (m *WindowerSpec_Frame_Bound) Reset() { *m = WindowerSpec_Frame_Bou func (m *WindowerSpec_Frame_Bound) String() string { return proto.CompactTextString(m) } func (*WindowerSpec_Frame_Bound) ProtoMessage() {} func (*WindowerSpec_Frame_Bound) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{29, 1, 0} + return fileDescriptor_processors_601c194419973a68, []int{29, 1, 0} } func (m *WindowerSpec_Frame_Bound) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2300,7 +2303,7 @@ func (m *WindowerSpec_Frame_Bounds) Reset() { *m = WindowerSpec_Frame_Bo func (m *WindowerSpec_Frame_Bounds) String() string { return proto.CompactTextString(m) } func (*WindowerSpec_Frame_Bounds) ProtoMessage() {} func (*WindowerSpec_Frame_Bounds) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{29, 1, 1} + return fileDescriptor_processors_601c194419973a68, []int{29, 1, 1} } func (m *WindowerSpec_Frame_Bounds) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2350,7 +2353,7 @@ func (m *WindowerSpec_WindowFn) Reset() { *m = WindowerSpec_WindowFn{} } func (m *WindowerSpec_WindowFn) String() string { return proto.CompactTextString(m) } func (*WindowerSpec_WindowFn) ProtoMessage() {} func (*WindowerSpec_WindowFn) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{29, 2} + return fileDescriptor_processors_601c194419973a68, []int{29, 2} } func (m *WindowerSpec_WindowFn) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2389,7 +2392,7 @@ func (m *ChangeAggregatorSpec) Reset() { *m = ChangeAggregatorSpec{} } func (m *ChangeAggregatorSpec) String() string { return proto.CompactTextString(m) } func (*ChangeAggregatorSpec) ProtoMessage() {} func (*ChangeAggregatorSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{30} + return fileDescriptor_processors_601c194419973a68, []int{30} } func (m *ChangeAggregatorSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2425,7 +2428,7 @@ func (m *ChangeAggregatorSpec_Watch) Reset() { *m = ChangeAggregatorSpec func (m *ChangeAggregatorSpec_Watch) String() string { return proto.CompactTextString(m) } func (*ChangeAggregatorSpec_Watch) ProtoMessage() {} func (*ChangeAggregatorSpec_Watch) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{30, 0} + return fileDescriptor_processors_601c194419973a68, []int{30, 0} } func (m *ChangeAggregatorSpec_Watch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2470,7 +2473,7 @@ func (m *ChangeFrontierSpec) Reset() { *m = ChangeFrontierSpec{} } func (m *ChangeFrontierSpec) String() string { return proto.CompactTextString(m) } func (*ChangeFrontierSpec) ProtoMessage() {} func (*ChangeFrontierSpec) Descriptor() ([]byte, []int) { - return fileDescriptor_processors_bf707fc3f8e6bbc6, []int{31} + return fileDescriptor_processors_601c194419973a68, []int{31} } func (m *ChangeFrontierSpec) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13258,262 +13261,263 @@ var ( ) func init() { - proto.RegisterFile("sql/distsqlpb/processors.proto", fileDescriptor_processors_bf707fc3f8e6bbc6) -} - -var fileDescriptor_processors_bf707fc3f8e6bbc6 = []byte{ - // 4047 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x3d, 0x70, 0x1b, 0x59, - 0x72, 0x16, 0x80, 0xc1, 0x5f, 0xe3, 0x87, 0xb3, 0x4f, 0xd4, 0x0a, 0xcb, 0x5d, 0x8b, 0xd2, 0xec, - 0xde, 0xea, 0xe7, 0xf6, 0xc8, 0x93, 0x76, 0x7d, 0x77, 0xbb, 0x77, 0xe7, 0x35, 0x7e, 0xa9, 0xa1, - 0x40, 0x80, 0x37, 0x00, 0xa4, 0xdd, 0xab, 0x72, 0x4d, 0x0d, 0x30, 0x8f, 0xe0, 0x88, 0x83, 0x79, - 0xd0, 0xcc, 0x40, 0x24, 0xe5, 0xc0, 0x89, 0x9d, 0xd8, 0xc9, 0x95, 0xcb, 0x91, 0xcb, 0x81, 0x93, - 0x0b, 0x9d, 0x38, 0x70, 0xe2, 0xc4, 0x81, 0xcb, 0xde, 0xc0, 0xc1, 0x25, 0xae, 0xb2, 0x1d, 0xa8, - 0x7c, 0x74, 0x60, 0x97, 0x73, 0x57, 0xd9, 0x17, 0xb9, 0xde, 0xcf, 0x0c, 0x06, 0x20, 0x41, 0x90, - 0x94, 0xea, 0x2e, 0x21, 0x31, 0xfd, 0xba, 0xbf, 0xe9, 0xd7, 0xaf, 0x5f, 0xbf, 0xee, 0x7e, 0x03, - 0xb7, 0xbc, 0x17, 0xf6, 0xa6, 0x69, 0x79, 0xbe, 0xf7, 0xc2, 0x1e, 0xf7, 0x37, 0xc7, 0x2e, 0x19, - 0x60, 0xcf, 0x23, 0xae, 0xb7, 0x31, 0x76, 0x89, 0x4f, 0xd0, 0xcd, 0x01, 0x19, 0x1c, 0xb8, 0xc4, - 0x18, 0xec, 0x6f, 0x78, 0x2f, 0xec, 0x8d, 0x90, 0x73, 0xed, 0xdd, 0xe7, 0xa4, 0xef, 0x6d, 0xd2, - 0x3f, 0xe3, 0x3e, 0xfb, 0xc7, 0x05, 0xd6, 0x10, 0x63, 0x1e, 0xf7, 0x37, 0x4d, 0xc3, 0x37, 0x04, - 0xad, 0x14, 0xd0, 0x2c, 0xf2, 0x9d, 0x3d, 0xe2, 0x8e, 0x0c, 0x3f, 0xe0, 0xfe, 0x80, 0xbe, 0xde, - 0x7b, 0x61, 0xf7, 0x0d, 0x0f, 0x6f, 0x7a, 0xbe, 0x3b, 0x19, 0xf8, 0x13, 0x17, 0x9b, 0x62, 0xf4, - 0xfd, 0xe8, 0xe8, 0x73, 0x62, 0x39, 0xba, 0x7f, 0x3c, 0xc6, 0x01, 0xe8, 0xac, 0xe6, 0xd1, 0xd7, - 0x4d, 0x7c, 0xcb, 0xde, 0xdc, 0xb7, 0x07, 0x9b, 0xbe, 0x35, 0xc2, 0x9e, 0x6f, 0x8c, 0xc6, 0x62, - 0x64, 0x75, 0x48, 0x86, 0x84, 0xfd, 0xdc, 0xa4, 0xbf, 0x38, 0x55, 0xf9, 0x93, 0x04, 0x14, 0x76, - 0x83, 0x89, 0x77, 0xc6, 0x78, 0x80, 0x2a, 0x90, 0xb4, 0x9c, 0xf1, 0xc4, 0x2f, 0xc5, 0x6e, 0x27, - 0xee, 0xe5, 0x1e, 0x7d, 0xbc, 0xb1, 0xc0, 0x0a, 0x1b, 0x2a, 0xe5, 0xea, 0x1c, 0x3b, 0x03, 0x2a, - 0x56, 0x91, 0xbe, 0x79, 0xbd, 0x7e, 0x4d, 0xe3, 0xa2, 0xa8, 0x0e, 0xd2, 0x80, 0xb8, 0xb8, 0x14, - 0xbf, 0x1d, 0xbb, 0x97, 0x7b, 0xf4, 0xed, 0x85, 0x10, 0xe1, 0x9b, 0xab, 0xc4, 0xc5, 0x3d, 0xc7, - 0x22, 0x8e, 0xc0, 0x61, 0xe2, 0x68, 0x0b, 0x52, 0x64, 0xe2, 0x53, 0x5d, 0x12, 0x4c, 0x97, 0xfb, - 0x0b, 0x81, 0xda, 0x8c, 0x4d, 0x23, 0x13, 0x1f, 0xbb, 0x11, 0x75, 0x84, 0x38, 0xaa, 0x80, 0x34, - 0x26, 0x9e, 0x5f, 0x92, 0x98, 0x3e, 0xf7, 0x16, 0xeb, 0x43, 0x3c, 0x5f, 0xe8, 0x14, 0x41, 0x61, - 0xb2, 0xe8, 0x01, 0x64, 0x3c, 0xdf, 0x18, 0x62, 0xdd, 0x32, 0x4b, 0xc9, 0xdb, 0xb1, 0x7b, 0xc9, - 0xca, 0x0a, 0x1d, 0x3d, 0x79, 0xbd, 0x9e, 0xee, 0x50, 0xba, 0x5a, 0xd3, 0xd2, 0x8c, 0x41, 0x35, - 0xd1, 0xf7, 0x20, 0x1f, 0x7a, 0x13, 0xe5, 0x4f, 0x31, 0xfe, 0xeb, 0x82, 0x3f, 0x17, 0x4e, 0x5b, - 0xad, 0x69, 0xb9, 0x90, 0x51, 0x35, 0x95, 0xbf, 0x8a, 0xc3, 0xca, 0x9c, 0x0e, 0xa8, 0x0c, 0xa9, - 0x3d, 0xcb, 0xf6, 0xb1, 0x5b, 0x8a, 0x31, 0xed, 0x3f, 0x5c, 0xa8, 0x7d, 0xfd, 0x68, 0xec, 0x62, - 0xcf, 0x9b, 0x5a, 0x51, 0x08, 0xa2, 0x8f, 0x00, 0xc6, 0x2e, 0x79, 0x8e, 0x07, 0xbe, 0x45, 0x1c, - 0xb6, 0x28, 0x19, 0xc1, 0x11, 0xa1, 0xa3, 0xfb, 0x50, 0xe4, 0xe6, 0xd2, 0x07, 0xc4, 0x9e, 0x8c, - 0x1c, 0x8f, 0x59, 0xbd, 0x50, 0x89, 0xcb, 0x31, 0xad, 0xc0, 0x47, 0xaa, 0x7c, 0x00, 0x35, 0x21, - 0xef, 0x62, 0xc7, 0xc4, 0xae, 0x8e, 0x8f, 0xc6, 0xae, 0x57, 0x92, 0xd8, 0xf2, 0x5c, 0x42, 0xb3, - 0x1c, 0x17, 0xa7, 0x74, 0x0f, 0x7d, 0x00, 0x29, 0xb2, 0xb7, 0xe7, 0x61, 0x9f, 0xd9, 0x55, 0x0a, - 0xd7, 0x8e, 0xd1, 0xd0, 0x1a, 0x24, 0x6d, 0x6b, 0x64, 0xf9, 0xcc, 0x88, 0xc1, 0x20, 0x27, 0x29, - 0xff, 0x59, 0x04, 0x74, 0xda, 0x87, 0xd0, 0xe7, 0x20, 0x39, 0x84, 0x8c, 0x85, 0xc1, 0xbe, 0xb5, - 0x50, 0xad, 0x16, 0x21, 0x63, 0x2a, 0x45, 0xed, 0xac, 0x31, 0x11, 0xb4, 0x0d, 0x39, 0xdf, 0xe8, - 0xdb, 0x58, 0xc3, 0x86, 0x89, 0x5d, 0xe1, 0xc0, 0x8b, 0x1d, 0xa6, 0x3b, 0xe5, 0x65, 0x20, 0x51, - 0x61, 0xb4, 0x05, 0x40, 0x37, 0xae, 0x80, 0x4a, 0x30, 0xa8, 0xbb, 0x0b, 0xa1, 0xb6, 0x43, 0x56, - 0x86, 0x14, 0x11, 0x45, 0x3f, 0x84, 0x94, 0x47, 0x5c, 0xea, 0x02, 0xd2, 0x12, 0x17, 0xe8, 0x30, - 0x36, 0x06, 0x20, 0x44, 0xa8, 0x16, 0xc6, 0x70, 0xe8, 0xe2, 0xa1, 0xe1, 0x13, 0x97, 0x59, 0xf8, - 0x3c, 0x2d, 0xca, 0x21, 0x2b, 0xd7, 0x62, 0x2a, 0x8a, 0xca, 0x90, 0xa1, 0x7c, 0x96, 0x33, 0xf0, - 0x4b, 0xe9, 0x25, 0x96, 0xad, 0x09, 0x46, 0x06, 0x12, 0x8a, 0x51, 0xeb, 0x8e, 0xb0, 0x3b, 0xc4, - 0x74, 0xae, 0xd8, 0x2d, 0x65, 0x96, 0x58, 0x77, 0x67, 0xca, 0xcb, 0xad, 0x1b, 0x11, 0xa6, 0xf3, - 0xda, 0x37, 0xbc, 0x7d, 0x01, 0x95, 0x5d, 0x32, 0xaf, 0xc7, 0x21, 0x2b, 0x9f, 0xd7, 0x54, 0x14, - 0x7d, 0x09, 0xa9, 0x97, 0x86, 0x3d, 0xc1, 0x5e, 0x09, 0x96, 0x80, 0x3c, 0x65, 0x6c, 0xa1, 0xc7, - 0x08, 0x31, 0xaa, 0x49, 0xdf, 0x18, 0x1c, 0xec, 0x59, 0xb6, 0x8d, 0xdd, 0x52, 0x6e, 0x09, 0x48, - 0x25, 0x64, 0xe5, 0x9a, 0x4c, 0x45, 0xd1, 0x13, 0x00, 0x17, 0x1b, 0xa6, 0x3a, 0x1a, 0x13, 0xd7, - 0x2f, 0x15, 0x96, 0x04, 0x4f, 0x2d, 0x64, 0xad, 0x19, 0xbe, 0xc1, 0xc1, 0xa6, 0xe2, 0xa8, 0x06, - 0xd9, 0x4e, 0xa7, 0xfb, 0xcc, 0xb5, 0xa8, 0xdf, 0x14, 0x19, 0xd6, 0xe2, 0x58, 0x1e, 0x72, 0x32, - 0x98, 0xa9, 0x20, 0xfa, 0x1d, 0x48, 0x77, 0x8c, 0xd1, 0x98, 0x4e, 0x6c, 0x85, 0x61, 0x7c, 0xb4, - 0x18, 0x83, 0xf3, 0x31, 0x84, 0x40, 0x08, 0x7d, 0x0d, 0x32, 0xff, 0x39, 0x75, 0xac, 0x92, 0xcc, - 0x80, 0xbe, 0xb3, 0x04, 0x68, 0xce, 0x13, 0x4f, 0xc1, 0x20, 0x07, 0x6e, 0x5a, 0x8e, 0x8f, 0x5d, - 0x1b, 0x1b, 0x2f, 0xb1, 0xc9, 0xb7, 0x8a, 0xf0, 0x86, 0x77, 0xd8, 0x1b, 0x3e, 0x3b, 0xe7, 0xe8, - 0x3a, 0x53, 0x8e, 0xbd, 0x68, 0x11, 0x28, 0xd2, 0x01, 0x8d, 0xb0, 0x6f, 0xd0, 0xc3, 0xb6, 0x8b, - 0x3d, 0xbf, 0xc3, 0x22, 0x58, 0x09, 0xb1, 0x57, 0x6d, 0x9e, 0xe3, 0xc3, 0xf3, 0x22, 0xec, 0x2d, - 0x67, 0x40, 0x21, 0x0c, 0xab, 0x51, 0xaa, 0x86, 0x07, 0xd8, 0x7a, 0x89, 0xdd, 0xd2, 0x75, 0xf6, - 0x8a, 0x87, 0x17, 0x7a, 0x45, 0x20, 0xc4, 0x5e, 0x72, 0x26, 0x1c, 0x75, 0x8c, 0x6a, 0xe7, 0xa9, - 0x70, 0x8c, 0xd5, 0x25, 0x8e, 0x11, 0x72, 0x72, 0xc7, 0x08, 0x1f, 0xd1, 0x0e, 0xe4, 0x5f, 0x59, - 0xc3, 0x57, 0xc6, 0x50, 0x98, 0xfc, 0x06, 0x03, 0x5a, 0x7c, 0x42, 0xff, 0x34, 0xc2, 0xcc, 0xb0, - 0x66, 0xc4, 0xe9, 0x1e, 0x12, 0x47, 0x51, 0x07, 0xfb, 0xa5, 0x77, 0x97, 0xec, 0xa1, 0xdd, 0x90, - 0x95, 0xbb, 0xfd, 0x54, 0x94, 0x46, 0xa9, 0x43, 0xcb, 0x31, 0xc9, 0x21, 0x76, 0x4b, 0x37, 0x97, - 0x44, 0xa9, 0x67, 0x82, 0x91, 0x47, 0xa9, 0x40, 0x0c, 0xed, 0x42, 0xc1, 0x26, 0x03, 0xc3, 0xde, - 0xb5, 0x0d, 0xa7, 0x45, 0x4c, 0x5c, 0x2a, 0x31, 0x9c, 0x07, 0x0b, 0x71, 0x9a, 0x51, 0x6e, 0x06, - 0x36, 0x0b, 0x40, 0x77, 0xc1, 0x60, 0xdf, 0x70, 0x86, 0xd1, 0x5d, 0xf0, 0xde, 0x92, 0x5d, 0x50, - 0x9d, 0x13, 0xe0, 0xbb, 0x60, 0x1e, 0x06, 0x75, 0xa0, 0xc8, 0x69, 0x0d, 0x97, 0x38, 0xbe, 0x85, - 0xdd, 0xd2, 0xda, 0x92, 0xb8, 0x51, 0x9d, 0x61, 0x67, 0xb0, 0x73, 0x10, 0x5f, 0x48, 0xdf, 0xfc, - 0xe5, 0x7a, 0x6c, 0x5b, 0xca, 0xa4, 0xe4, 0xf4, 0xb6, 0x94, 0xc9, 0xcb, 0x05, 0xa5, 0x08, 0xf9, - 0xe8, 0x69, 0xa9, 0x7c, 0x06, 0xef, 0x9e, 0xed, 0xd9, 0x68, 0x0d, 0xe2, 0x96, 0xc9, 0x8e, 0xde, - 0x6c, 0x05, 0x44, 0xc6, 0x13, 0x57, 0x6b, 0x5a, 0xdc, 0x32, 0x95, 0xc7, 0x50, 0x5a, 0xe4, 0xac, - 0xe8, 0x13, 0x00, 0x8f, 0xe7, 0x14, 0x96, 0xe9, 0xb1, 0xe4, 0x33, 0x5b, 0x29, 0x9c, 0xbc, 0x5e, - 0xcf, 0x72, 0x6c, 0xb5, 0xe6, 0x69, 0x59, 0xce, 0xa0, 0x9a, 0x9e, 0xf2, 0xa7, 0x31, 0x28, 0xce, - 0x86, 0x63, 0x54, 0x81, 0x74, 0x90, 0xb8, 0xf0, 0xd4, 0x55, 0x59, 0x7c, 0x3c, 0x19, 0xfe, 0x64, - 0xa4, 0x3a, 0x7b, 0x44, 0xa4, 0x13, 0x81, 0x20, 0x7a, 0x1f, 0xb2, 0xae, 0x71, 0xa8, 0xf7, 0x8f, - 0x7d, 0xec, 0x95, 0xe2, 0xb7, 0x13, 0xf7, 0xf2, 0x5a, 0xc6, 0x35, 0x0e, 0x2b, 0xf4, 0x19, 0xad, - 0x43, 0xc6, 0x99, 0x8c, 0x74, 0x97, 0x1c, 0x7a, 0xec, 0x34, 0x0f, 0x92, 0x91, 0xb4, 0x33, 0x19, - 0x69, 0xe4, 0xd0, 0x53, 0x6a, 0xb0, 0x32, 0x93, 0x10, 0x18, 0x0e, 0x7a, 0x08, 0x92, 0x37, 0x36, - 0x1c, 0x91, 0x8a, 0xdc, 0x8c, 0x68, 0x24, 0xea, 0x82, 0x0d, 0xca, 0x16, 0x24, 0x9a, 0x94, 0x55, - 0xf9, 0xf3, 0xc4, 0x1c, 0x0c, 0x4f, 0xca, 0x59, 0x66, 0x21, 0x70, 0xe6, 0xf7, 0xab, 0xa8, 0x13, - 0x78, 0x3a, 0x52, 0xc3, 0xde, 0xc0, 0xb5, 0xc6, 0x3e, 0x71, 0x83, 0x64, 0x89, 0x89, 0xa2, 0x3b, - 0x90, 0xb5, 0x1c, 0x13, 0x1f, 0xe9, 0x96, 0x79, 0xc4, 0x12, 0x9b, 0x82, 0x18, 0xcf, 0x30, 0xb2, - 0x6a, 0x1e, 0xa1, 0x5b, 0x90, 0x76, 0xf1, 0x4b, 0xec, 0x7a, 0x98, 0x4d, 0x30, 0xc8, 0x12, 0x03, - 0x22, 0xaa, 0x41, 0x92, 0xaa, 0x18, 0x24, 0x7c, 0x17, 0xcc, 0x8b, 0xc2, 0xf9, 0x71, 0x61, 0xf4, - 0x21, 0x00, 0x4b, 0xdf, 0xf4, 0x7d, 0xcb, 0xe1, 0x39, 0x5f, 0x42, 0x30, 0x64, 0x19, 0xfd, 0xb1, - 0xe5, 0xf8, 0xd4, 0xd8, 0x96, 0xa7, 0x0f, 0xf6, 0xf1, 0xe0, 0x80, 0x65, 0x7e, 0xa1, 0x2e, 0x96, - 0x57, 0xa5, 0x44, 0xb4, 0x03, 0xf0, 0xd2, 0xf2, 0xac, 0xbe, 0x65, 0x5b, 0xfe, 0x31, 0x4b, 0x48, - 0x8a, 0xe7, 0x44, 0x8c, 0xce, 0xc0, 0x70, 0x9e, 0x86, 0xec, 0x41, 0xf6, 0x3b, 0x05, 0x40, 0xdf, - 0x82, 0xdc, 0xc8, 0x38, 0xd2, 0x5d, 0xec, 0x4d, 0x6c, 0xdf, 0x63, 0xa9, 0x49, 0xb0, 0xbe, 0x30, - 0x32, 0x8e, 0x34, 0x4e, 0x57, 0xfe, 0x31, 0x01, 0xc5, 0xd9, 0x4c, 0xed, 0xd7, 0xb5, 0x36, 0xf7, - 0xa1, 0x68, 0x13, 0x72, 0x30, 0x19, 0x9f, 0x95, 0x9e, 0xf3, 0x91, 0x20, 0x3d, 0xaf, 0x40, 0x9a, - 0x38, 0x2c, 0x35, 0x5f, 0x9a, 0x30, 0x9e, 0xae, 0x19, 0x88, 0x43, 0x69, 0xa8, 0x07, 0xef, 0x70, - 0x8d, 0x78, 0x0d, 0xc1, 0xd1, 0x92, 0x97, 0x45, 0x5b, 0x61, 0x18, 0x0d, 0x06, 0xc1, 0x60, 0x3f, - 0x07, 0x89, 0xd6, 0xb1, 0x6c, 0x49, 0x8b, 0x8f, 0xd6, 0x17, 0xd8, 0x8a, 0x5a, 0xb8, 0x7b, 0x3c, - 0xc6, 0xc1, 0xbe, 0xa0, 0x22, 0x6f, 0x79, 0xc1, 0x69, 0x04, 0x81, 0x69, 0xba, 0x8c, 0x76, 0x61, - 0x45, 0x54, 0x3f, 0xc4, 0x35, 0xb1, 0x6b, 0x39, 0x43, 0xb1, 0x9e, 0x77, 0x16, 0x17, 0x9d, 0x82, - 0x51, 0x80, 0x8b, 0xea, 0x29, 0xa0, 0xa2, 0x47, 0x80, 0x02, 0x28, 0x7d, 0x64, 0xf8, 0x83, 0x7d, - 0xdd, 0xc6, 0xce, 0xcc, 0xe2, 0xca, 0xc1, 0xf8, 0x0e, 0x1d, 0x6e, 0x62, 0x47, 0xe9, 0x43, 0x3e, - 0x9a, 0x3a, 0xa3, 0xbb, 0xb0, 0xc2, 0x78, 0xb0, 0xa9, 0x47, 0x63, 0x5b, 0x41, 0x2b, 0x0a, 0x72, - 0xb0, 0xe4, 0xf7, 0x41, 0x0e, 0xb2, 0xec, 0x90, 0x33, 0xce, 0x38, 0x57, 0x02, 0xba, 0x60, 0xa5, - 0x25, 0xbf, 0x3c, 0x7f, 0x1a, 0xa3, 0x1a, 0xa4, 0x98, 0x27, 0x7a, 0x0b, 0xca, 0xfe, 0xf3, 0xbd, - 0x58, 0xc8, 0xa2, 0x3a, 0x00, 0x7e, 0x31, 0xf3, 0xfe, 0xdc, 0xa3, 0xdb, 0x8b, 0x0f, 0x22, 0xce, - 0x17, 0xec, 0x7d, 0xfc, 0x22, 0x98, 0xcc, 0xfa, 0x74, 0x37, 0x44, 0xbd, 0x3c, 0xd8, 0x0b, 0x6f, - 0xc7, 0xc1, 0xb7, 0x21, 0xbf, 0x67, 0x1d, 0x61, 0x53, 0x17, 0xc9, 0x7f, 0x92, 0x69, 0x7b, 0xe1, - 0xe4, 0x3f, 0xc7, 0x84, 0x39, 0xf1, 0x0d, 0xbc, 0x5a, 0xb1, 0xe0, 0x9d, 0x53, 0xe9, 0x03, 0x52, - 0x20, 0xaf, 0x91, 0xc3, 0x0e, 0x99, 0xb8, 0x03, 0xac, 0x9a, 0x47, 0xcc, 0x13, 0x0b, 0xda, 0x0c, - 0x0d, 0x7d, 0x00, 0xd9, 0x16, 0x3d, 0xc4, 0xc6, 0x13, 0xdf, 0xe3, 0x5e, 0xa5, 0x4d, 0x09, 0x08, - 0x81, 0xd4, 0x32, 0x46, 0x3c, 0x8c, 0x67, 0x35, 0xf6, 0x5b, 0xb9, 0x0b, 0xe9, 0xc0, 0xc2, 0x1f, - 0xcc, 0x9e, 0x95, 0xdc, 0xbe, 0x01, 0x49, 0xf9, 0xd7, 0x38, 0xac, 0xcc, 0xd5, 0x5e, 0xa8, 0x09, - 0x05, 0x1b, 0xef, 0x5d, 0x7d, 0x77, 0xe4, 0xa9, 0x74, 0xb8, 0x37, 0x5a, 0x50, 0x74, 0xad, 0xe1, - 0x7e, 0x04, 0x2e, 0x7e, 0x39, 0xb8, 0x02, 0x13, 0x0f, 0xf1, 0x22, 0x0e, 0x91, 0xbc, 0xaa, 0x43, - 0xbc, 0x41, 0x68, 0xba, 0x0f, 0x05, 0x67, 0x62, 0xdb, 0x3a, 0x7e, 0x31, 0x31, 0xc2, 0xe8, 0x14, - 0x9c, 0x58, 0x79, 0x3a, 0x54, 0x17, 0x23, 0xca, 0xcf, 0x12, 0x50, 0x9c, 0x2d, 0x46, 0xd1, 0x03, - 0x58, 0x61, 0xa6, 0x8d, 0x6c, 0x9d, 0x58, 0x24, 0xb4, 0xe3, 0x3d, 0xbf, 0x1e, 0x6e, 0x8d, 0x4f, - 0x40, 0xe6, 0x86, 0x9b, 0xdb, 0x67, 0x9c, 0x99, 0x1b, 0x75, 0xca, 0xfd, 0x1b, 0x36, 0xcb, 0xb7, - 0xa1, 0xc8, 0x2a, 0xf6, 0x69, 0xf0, 0x8a, 0xda, 0xa5, 0xc0, 0xc7, 0x02, 0x5d, 0xbf, 0x80, 0x9b, - 0x73, 0x56, 0xd0, 0x0d, 0x17, 0xeb, 0x07, 0xf8, 0x98, 0x1d, 0xc6, 0x81, 0xd4, 0xf5, 0x19, 0x7b, - 0x94, 0x5d, 0xfc, 0x04, 0x1f, 0xa3, 0x1f, 0x41, 0x69, 0xde, 0x2a, 0xa1, 0x70, 0x36, 0x22, 0xbc, - 0x3a, 0x6b, 0x1f, 0x2e, 0xad, 0xfc, 0x77, 0x0a, 0x8a, 0xb3, 0x79, 0x36, 0xba, 0x03, 0x30, 0x74, - 0x09, 0x3f, 0x6b, 0xa3, 0x06, 0xce, 0x32, 0x6a, 0x95, 0xd8, 0x1e, 0xfa, 0x3d, 0xc8, 0x07, 0xcd, - 0x11, 0x8b, 0x88, 0xd3, 0x38, 0xf7, 0xe8, 0xd3, 0x0b, 0x76, 0x56, 0xc2, 0xc7, 0xa9, 0xc1, 0x67, - 0xe0, 0xd0, 0x77, 0xc5, 0xe9, 0x81, 0x4d, 0x3d, 0xa2, 0x89, 0x14, 0x6a, 0x22, 0x8b, 0xd1, 0xad, - 0x50, 0xa1, 0x86, 0x58, 0xa8, 0x24, 0x5b, 0xa8, 0x4f, 0x2e, 0xaa, 0xc8, 0xfc, 0xaa, 0xad, 0xfd, - 0x51, 0x1c, 0x72, 0x11, 0xed, 0x28, 0xee, 0xde, 0xc4, 0x19, 0xb0, 0x0d, 0x7f, 0x09, 0xdc, 0xc6, - 0xc4, 0x09, 0x1b, 0xa8, 0x54, 0x1e, 0xdd, 0x8e, 0xf4, 0x8f, 0xa2, 0x3d, 0xc8, 0x69, 0x7b, 0xe8, - 0x23, 0x28, 0x8a, 0x6c, 0x63, 0x40, 0x6c, 0x96, 0x0a, 0x49, 0x3c, 0xf0, 0x71, 0x6a, 0x95, 0xd8, - 0x34, 0xf0, 0xdd, 0x64, 0xb1, 0x8b, 0x0d, 0x27, 0xd9, 0x09, 0x97, 0x1a, 0xf0, 0x81, 0x2d, 0xc8, - 0x1a, 0xee, 0x70, 0x32, 0xc2, 0x8e, 0xef, 0x95, 0x52, 0x97, 0x6d, 0x49, 0x4e, 0x65, 0xb7, 0xa5, - 0x4c, 0x42, 0x96, 0x94, 0x9f, 0xc7, 0x41, 0xa2, 0x93, 0x40, 0x32, 0xe4, 0xcb, 0xad, 0xaf, 0xf5, - 0x56, 0xbb, 0xab, 0xb7, 0x7a, 0xcd, 0xa6, 0x7c, 0x0d, 0xa5, 0x21, 0x51, 0x7e, 0xba, 0x25, 0xc7, - 0x50, 0x1e, 0x32, 0x95, 0x76, 0xbb, 0xa9, 0x97, 0x5b, 0x35, 0x39, 0x8e, 0x72, 0x90, 0x66, 0x4f, - 0x6d, 0x4d, 0x4e, 0xa0, 0x22, 0x40, 0xb5, 0xdd, 0xaa, 0x96, 0xbb, 0x7a, 0x79, 0x6b, 0x4b, 0x96, - 0x50, 0x16, 0x92, 0xd5, 0x76, 0xaf, 0xd5, 0x95, 0x93, 0x54, 0x7c, 0xa7, 0xfc, 0x95, 0x9c, 0x66, - 0x3f, 0xd4, 0x96, 0x9c, 0x41, 0x00, 0xa9, 0x4e, 0xb7, 0x56, 0xab, 0x3f, 0x95, 0xb3, 0x94, 0xd8, - 0xe9, 0xed, 0xc8, 0x40, 0xe1, 0x3a, 0xbd, 0x1d, 0x5d, 0x6d, 0x75, 0xe5, 0x1c, 0x7d, 0xd3, 0xd3, - 0xb2, 0xa6, 0x96, 0x5b, 0xd5, 0xba, 0x9c, 0xa7, 0x43, 0x5f, 0xb5, 0x35, 0x86, 0x5c, 0xe0, 0x6f, - 0xea, 0xb5, 0xba, 0xba, 0xd6, 0x7e, 0xd6, 0x91, 0x8b, 0x4c, 0xee, 0x27, 0x5a, 0x4d, 0x6d, 0x34, - 0xe4, 0x15, 0x84, 0xa0, 0xd8, 0x50, 0x5b, 0xe5, 0xa6, 0x1e, 0x4a, 0xcb, 0x74, 0x42, 0x9c, 0x26, - 0xde, 0xf9, 0x0e, 0x2a, 0x40, 0xb6, 0xac, 0x69, 0xe5, 0xaf, 0x19, 0x22, 0xa2, 0x2f, 0xdb, 0xee, - 0xb4, 0x5b, 0xec, 0xe9, 0x3a, 0x1d, 0xa4, 0x4f, 0x15, 0xf6, 0xb8, 0x4a, 0x5f, 0xd7, 0xe9, 0x6a, - 0x6a, 0x6b, 0x8b, 0x3d, 0xdf, 0x50, 0x3e, 0x01, 0x89, 0xfa, 0x10, 0xca, 0x80, 0x54, 0xee, 0x75, - 0xdb, 0xf2, 0x35, 0x36, 0x9b, 0x6a, 0xb9, 0x59, 0xd6, 0xe4, 0x18, 0xe5, 0x6e, 0xb5, 0x5b, 0xba, - 0x78, 0x8e, 0x2b, 0xff, 0x9b, 0x80, 0xe2, 0x6c, 0x0b, 0x2c, 0x74, 0xdc, 0x65, 0x0e, 0x36, 0x2b, - 0x76, 0xca, 0x71, 0xa7, 0x89, 0x78, 0xfc, 0xea, 0x89, 0x78, 0x58, 0xe1, 0x24, 0xde, 0xa4, 0xc2, - 0x79, 0x08, 0x19, 0x73, 0xe2, 0xb2, 0xed, 0xc3, 0x5c, 0x38, 0x51, 0xb9, 0x41, 0x87, 0x7f, 0xf5, - 0x7a, 0xbd, 0xe0, 0x5b, 0x23, 0xbc, 0x51, 0x13, 0x83, 0x5a, 0xc8, 0x46, 0x8b, 0xa2, 0xc1, 0xfe, - 0xc4, 0x39, 0xd0, 0x3d, 0xeb, 0x15, 0x9e, 0x2d, 0x8a, 0x18, 0xbd, 0x63, 0xbd, 0xc2, 0xa8, 0x0d, - 0x79, 0xe2, 0xef, 0x63, 0x57, 0x17, 0xb9, 0x5a, 0xea, 0x0a, 0xb9, 0x5a, 0x8e, 0x21, 0x74, 0x79, - 0xc2, 0xf6, 0x25, 0x64, 0x5c, 0x6c, 0x98, 0x65, 0xaf, 0xbd, 0x27, 0x7a, 0xba, 0xbf, 0x15, 0x01, - 0x9b, 0xf8, 0x96, 0xbd, 0xb1, 0x6f, 0x0f, 0x36, 0xba, 0xc1, 0x5d, 0x52, 0xb0, 0x65, 0x03, 0x21, - 0xe5, 0x81, 0x58, 0xfc, 0x1c, 0xa4, 0x55, 0xe7, 0xa5, 0x61, 0x5b, 0x26, 0x5f, 0x7f, 0x1e, 0x61, - 0xe5, 0x18, 0x75, 0x7b, 0x95, 0xa6, 0x6d, 0x72, 0x5c, 0x39, 0x89, 0x41, 0xa6, 0x61, 0x93, 0x43, - 0xb6, 0xe8, 0x0f, 0x21, 0xbd, 0x67, 0x93, 0x43, 0x5d, 0xf4, 0x0a, 0xf2, 0x95, 0x12, 0x45, 0xfe, - 0xb7, 0xd7, 0xeb, 0x29, 0xca, 0xa2, 0xd6, 0x4e, 0xc2, 0x5f, 0x5a, 0x8a, 0x32, 0xaa, 0x26, 0x6a, - 0xb2, 0x1e, 0x91, 0xb8, 0xa3, 0x13, 0xd9, 0xe5, 0xc7, 0xcb, 0xef, 0x96, 0x22, 0x37, 0x39, 0x11, - 0x79, 0xd4, 0x83, 0xf4, 0xd0, 0xf0, 0xf1, 0xa1, 0x71, 0xcc, 0x92, 0xa4, 0x64, 0xe5, 0x87, 0x62, - 0x89, 0x3e, 0x1d, 0x5a, 0xfe, 0xfe, 0xa4, 0xbf, 0x31, 0x20, 0xa3, 0xcd, 0x10, 0xdc, 0xec, 0x4f, - 0x7f, 0x6f, 0x8e, 0x0f, 0x86, 0x9b, 0x41, 0xf9, 0x4e, 0x73, 0x36, 0xb5, 0xa6, 0x05, 0x58, 0xca, - 0x21, 0xe4, 0xb6, 0x49, 0x7f, 0xd7, 0x25, 0x43, 0x1a, 0x5e, 0xd0, 0x47, 0x90, 0x7a, 0x4e, 0xfa, - 0xc1, 0x2c, 0x13, 0x95, 0x82, 0xe8, 0x88, 0x24, 0xb7, 0x49, 0x5f, 0xad, 0x69, 0xc9, 0xe7, 0xa4, - 0xaf, 0x9a, 0xe8, 0x1e, 0xe4, 0x07, 0xc4, 0xf1, 0x5d, 0xab, 0x3f, 0x09, 0xaf, 0x68, 0xe2, 0xc1, - 0xb1, 0x10, 0x1d, 0x41, 0x25, 0x90, 0x3c, 0x9b, 0xf8, 0x42, 0xe5, 0xa0, 0x6d, 0x60, 0x13, 0x5f, - 0xf9, 0x67, 0x09, 0xd0, 0xe9, 0x96, 0x30, 0xad, 0x6b, 0x3d, 0xd6, 0x39, 0xe5, 0x8e, 0x15, 0x8f, - 0xc8, 0x01, 0x1f, 0x60, 0x9e, 0xd5, 0x80, 0xcc, 0x58, 0xe8, 0xcc, 0x4e, 0xfa, 0xf3, 0x1a, 0xbd, - 0x91, 0xf9, 0x05, 0xfe, 0x10, 0xc8, 0xa2, 0x06, 0x24, 0x26, 0xae, 0x55, 0x4a, 0xb3, 0xc5, 0xf9, - 0xec, 0x12, 0xbd, 0xeb, 0x8d, 0x9e, 0x6b, 0xd5, 0x1d, 0xdf, 0x3d, 0xd6, 0x28, 0x00, 0xfa, 0x31, - 0xa4, 0xf8, 0x6d, 0xa9, 0xb8, 0x24, 0x58, 0x3f, 0xa3, 0x73, 0xa2, 0xb6, 0x1b, 0x96, 0x8d, 0x1b, - 0x8c, 0x2d, 0xbc, 0xf1, 0x62, 0x4f, 0xa8, 0x17, 0x96, 0x33, 0x59, 0xa6, 0xc9, 0xf7, 0x2f, 0xa3, - 0x09, 0xdf, 0x1b, 0x4c, 0x19, 0x06, 0x1b, 0x0b, 0xeb, 0x9b, 0x2f, 0xe1, 0x3d, 0xef, 0xc0, 0x1a, - 0xeb, 0x23, 0xcb, 0xf3, 0x68, 0x59, 0xb7, 0x47, 0x5c, 0x6c, 0x0d, 0x1d, 0x9a, 0x67, 0xf0, 0xdb, - 0x83, 0xe0, 0x4c, 0x7b, 0x97, 0xb2, 0xed, 0x70, 0xae, 0x06, 0x67, 0x7a, 0x82, 0x8f, 0xbd, 0x35, - 0x03, 0x72, 0x11, 0x74, 0x24, 0x43, 0x82, 0xa6, 0x28, 0xac, 0x59, 0xa6, 0xd1, 0x9f, 0xe8, 0x47, - 0x90, 0x64, 0xf5, 0xc8, 0xe5, 0x62, 0x98, 0xc6, 0x85, 0xbe, 0x88, 0xff, 0x20, 0xb6, 0xf6, 0x3d, - 0xc8, 0x04, 0xa6, 0x8c, 0xe2, 0x27, 0x39, 0xfe, 0x6a, 0x14, 0x3f, 0x1b, 0x91, 0xdb, 0x96, 0x32, - 0x31, 0x39, 0xce, 0x8f, 0xbe, 0x6d, 0x29, 0x23, 0xc9, 0xc9, 0x6d, 0x29, 0x93, 0x94, 0x53, 0xca, - 0xdf, 0xc4, 0xa1, 0x30, 0x73, 0x3d, 0x80, 0x3e, 0x86, 0x9c, 0x89, 0xe9, 0x91, 0xcd, 0x03, 0x1c, - 0x6f, 0xf5, 0x89, 0xe0, 0x12, 0x19, 0x40, 0x0f, 0xa0, 0x70, 0x68, 0xd8, 0x36, 0x8d, 0x78, 0x2d, - 0xc3, 0x21, 0xbc, 0x69, 0x16, 0x44, 0xb5, 0xd9, 0x21, 0xf4, 0x64, 0xb6, 0xb3, 0xb4, 0x79, 0xb1, - 0x9b, 0x0a, 0xd6, 0x3c, 0xa3, 0xb5, 0xcd, 0x6c, 0xf8, 0x8d, 0x3a, 0x73, 0xf2, 0xea, 0xce, 0x4c, - 0x4d, 0x19, 0xbc, 0x80, 0x6e, 0x3c, 0x87, 0x16, 0x54, 0xd1, 0xd9, 0x32, 0x0a, 0x35, 0x32, 0x76, - 0x4c, 0x66, 0xd0, 0xbc, 0x46, 0x7f, 0x6e, 0x4b, 0x99, 0xb8, 0x9c, 0x50, 0xfe, 0x3e, 0x06, 0x85, - 0x99, 0xf6, 0xf9, 0x85, 0x0d, 0x77, 0x17, 0xf2, 0x14, 0x59, 0x1f, 0x1b, 0xbe, 0x8f, 0x5d, 0x1e, - 0x0e, 0x42, 0x46, 0x3a, 0xb2, 0xcb, 0x07, 0xd0, 0x8f, 0x21, 0x4d, 0xc6, 0x41, 0xfa, 0x39, 0x1f, - 0xbd, 0x83, 0x6d, 0x52, 0xed, 0x3c, 0x6d, 0x73, 0xa6, 0xa0, 0x85, 0x26, 0x64, 0xa6, 0x67, 0x0e, - 0x6b, 0x69, 0x4a, 0xa7, 0xce, 0x1c, 0xd6, 0xd4, 0xfc, 0xc3, 0x38, 0x40, 0xe7, 0x00, 0xfb, 0x83, - 0x7d, 0x36, 0x87, 0x6d, 0xc8, 0x79, 0xec, 0x49, 0x8f, 0x9c, 0xd9, 0xe7, 0x5c, 0x48, 0x32, 0xde, - 0xc8, 0x51, 0x0d, 0x5e, 0x48, 0x41, 0xa5, 0x69, 0x15, 0xca, 0x7b, 0x15, 0x61, 0x1f, 0xf6, 0x53, - 0x40, 0x43, 0xec, 0x60, 0xd7, 0xf0, 0xb1, 0xbe, 0x6f, 0x79, 0x3e, 0x19, 0xba, 0xc6, 0x68, 0xa6, - 0x27, 0xf9, 0x4e, 0x30, 0xfe, 0x38, 0x18, 0x46, 0x3f, 0x80, 0x1b, 0x21, 0xaf, 0x3e, 0x32, 0x8e, - 0xf4, 0xfe, 0x64, 0x70, 0x80, 0x7d, 0x3e, 0xb3, 0xa0, 0xe7, 0x72, 0x3d, 0x64, 0xd9, 0x31, 0x8e, - 0x2a, 0x9c, 0x01, 0xdd, 0x81, 0xac, 0xe7, 0x1b, 0xbe, 0xce, 0x56, 0x38, 0x19, 0xb1, 0x76, 0x86, - 0x92, 0x59, 0xf1, 0xfc, 0xfb, 0x90, 0x8b, 0x5c, 0x70, 0xa1, 0x3a, 0x64, 0xf8, 0x44, 0xc2, 0x8e, - 0xc9, 0x32, 0x1b, 0x44, 0x8e, 0xa1, 0x50, 0xf4, 0xac, 0xe8, 0x5c, 0x38, 0x1d, 0x9d, 0x95, 0xff, - 0x8a, 0xc3, 0xea, 0x59, 0xb7, 0x62, 0xbf, 0x5e, 0x35, 0xd0, 0x1f, 0x00, 0xe2, 0x4f, 0x41, 0x41, - 0x17, 0x69, 0xd0, 0xfc, 0xe4, 0xe4, 0xf5, 0xba, 0xb8, 0xa3, 0x13, 0x25, 0x9d, 0x5a, 0xf3, 0x7e, - 0xf5, 0x7a, 0xfd, 0xf3, 0x0b, 0x9d, 0xa6, 0x91, 0x8f, 0x5d, 0x36, 0x02, 0x69, 0x4d, 0xf6, 0x66, - 0xe0, 0x4c, 0x0f, 0x19, 0x90, 0x61, 0x91, 0x98, 0x9e, 0xa7, 0x7c, 0x51, 0x1b, 0xc1, 0x37, 0x18, - 0x2c, 0x22, 0xaa, 0xb5, 0x0b, 0x9f, 0xdf, 0xd1, 0x37, 0xd2, 0xf3, 0x9b, 0xe1, 0xaa, 0xa6, 0xf2, - 0x7f, 0x12, 0xbc, 0x7f, 0xce, 0xf5, 0x20, 0xfa, 0x6a, 0xae, 0x51, 0xf6, 0xc5, 0x55, 0x2e, 0x19, - 0x79, 0xfc, 0x9e, 0x6b, 0x9e, 0x45, 0x9a, 0xef, 0xf1, 0xb3, 0x9a, 0xef, 0xb3, 0x6d, 0xf3, 0xc4, - 0xd9, 0x6d, 0xf3, 0xb7, 0xd1, 0x19, 0xfb, 0x7c, 0xa6, 0x90, 0xbc, 0x4c, 0xc5, 0xbf, 0xf6, 0xb7, - 0x71, 0x48, 0xb2, 0xb9, 0xa1, 0xdf, 0x05, 0xc9, 0xc4, 0xde, 0xe0, 0x4a, 0x4d, 0x71, 0x26, 0x79, - 0x91, 0x9e, 0x78, 0xf0, 0x5d, 0x4f, 0xe2, 0x0d, 0xbe, 0xeb, 0xa9, 0x42, 0x26, 0x6c, 0x42, 0x49, - 0x97, 0x6b, 0x42, 0x85, 0x82, 0xd3, 0xb2, 0x21, 0xf9, 0x06, 0x65, 0x83, 0xf2, 0x8b, 0x18, 0x14, - 0x67, 0xaf, 0x36, 0xd1, 0x97, 0x90, 0xe4, 0x9f, 0xd8, 0xc4, 0x2e, 0x5b, 0xcf, 0x72, 0x39, 0xd4, - 0x85, 0x30, 0x52, 0x9a, 0x73, 0x9d, 0xd9, 0x3b, 0x0b, 0x16, 0x85, 0xef, 0xb7, 0xc8, 0xda, 0xca, - 0x21, 0x42, 0xd0, 0xac, 0xb9, 0x0b, 0xb2, 0x33, 0x19, 0xb1, 0x9e, 0x84, 0x3e, 0xc6, 0xae, 0x3e, - 0xc4, 0x0e, 0x8f, 0x03, 0x5a, 0xc1, 0x99, 0x8c, 0xaa, 0xc4, 0xf6, 0x76, 0xb1, 0xbb, 0x85, 0x1d, - 0xe5, 0xcf, 0xf2, 0x90, 0x8f, 0x5e, 0xb3, 0xa2, 0xdb, 0x90, 0x1b, 0x1b, 0xae, 0x6f, 0xb1, 0xc6, - 0xc7, 0xb1, 0xe8, 0x66, 0x47, 0x49, 0x48, 0x83, 0x2c, 0xbf, 0x8a, 0x6d, 0x84, 0x9a, 0x6e, 0x5c, - 0xe8, 0x0a, 0x57, 0x3c, 0x34, 0xc2, 0x8a, 0x3e, 0x84, 0x59, 0xfb, 0xeb, 0x98, 0xa8, 0xe5, 0x35, - 0x28, 0x04, 0x6d, 0x16, 0xdc, 0xb8, 0x62, 0x57, 0x43, 0x9b, 0x85, 0x40, 0xbb, 0x00, 0xe2, 0x4d, - 0x14, 0x30, 0xce, 0x00, 0xbf, 0x7b, 0x29, 0x8d, 0x29, 0x68, 0x04, 0x83, 0xdf, 0xbf, 0xae, 0xfd, - 0x32, 0x09, 0xc9, 0x86, 0x4b, 0x53, 0x8c, 0x6d, 0x90, 0x46, 0xc4, 0x0c, 0x4e, 0xdb, 0x0b, 0x62, - 0x33, 0xd1, 0x8d, 0x1d, 0x62, 0x86, 0x5b, 0x94, 0x62, 0xa0, 0x5d, 0x48, 0xf5, 0xc9, 0xc4, 0x31, - 0x3d, 0x91, 0x62, 0x3e, 0xba, 0x0c, 0x5a, 0x85, 0x49, 0x06, 0xf1, 0x82, 0xe3, 0xac, 0xfd, 0x4f, - 0x0c, 0x92, 0x6c, 0x00, 0x7d, 0x0d, 0x59, 0x46, 0xeb, 0x4e, 0x53, 0x83, 0xdf, 0xbe, 0x34, 0x7c, - 0xc4, 0xf1, 0xa6, 0x68, 0x34, 0xfa, 0x59, 0x8e, 0xaf, 0x8b, 0x0f, 0xc5, 0xa2, 0xe1, 0x20, 0x6b, - 0x39, 0x7e, 0x9b, 0x7f, 0x2b, 0x76, 0x07, 0xf2, 0x34, 0x0c, 0x99, 0x01, 0x5b, 0x82, 0xe5, 0x64, - 0x39, 0x46, 0x13, 0x2c, 0x2a, 0xe4, 0xf8, 0x20, 0xcf, 0x5f, 0xf8, 0x8e, 0xbf, 0xf8, 0x4d, 0x31, - 0x70, 0x61, 0xaa, 0xd2, 0xda, 0x5f, 0xc4, 0x20, 0xc5, 0x0d, 0x82, 0x76, 0x20, 0xe9, 0xf9, 0x86, - 0xeb, 0x8b, 0x70, 0xf7, 0xf0, 0xd2, 0x93, 0x0e, 0x03, 0x01, 0x45, 0x41, 0xd5, 0x69, 0x4a, 0x79, - 0x15, 0x30, 0x96, 0x85, 0x2a, 0x77, 0x41, 0xa2, 0x8b, 0x4f, 0x2b, 0x70, 0xad, 0xdc, 0xda, 0xaa, - 0xcb, 0xd7, 0x50, 0x06, 0x24, 0xd6, 0x23, 0x8a, 0xd1, 0x12, 0x7d, 0x4b, 0x6b, 0xf7, 0x76, 0x3b, - 0x72, 0x5c, 0x79, 0x05, 0xd9, 0xd0, 0xf0, 0xe8, 0x26, 0x5c, 0xef, 0xb5, 0x2a, 0xed, 0x5e, 0xab, - 0x56, 0xaf, 0xe9, 0xbb, 0x5a, 0xbd, 0x5a, 0xaf, 0xa9, 0xad, 0x2d, 0xf9, 0xda, 0xec, 0x40, 0xa3, - 0xdd, 0x6c, 0xb6, 0x9f, 0xd1, 0x81, 0x18, 0x5a, 0x05, 0xb9, 0xdd, 0x68, 0x74, 0xea, 0xdd, 0x08, - 0x7b, 0x3c, 0x42, 0x9d, 0xf2, 0x26, 0xd0, 0x0a, 0xe4, 0xaa, 0x3d, 0x4d, 0xab, 0xf3, 0x66, 0x95, - 0x2c, 0xad, 0xfd, 0x53, 0x1c, 0x32, 0xc1, 0xb6, 0x45, 0xb5, 0x48, 0xa7, 0xf1, 0xbc, 0xef, 0x2d, - 0x66, 0xe7, 0x3d, 0xdf, 0x67, 0xfc, 0x18, 0x72, 0x86, 0x3b, 0x54, 0xcd, 0xa3, 0x0e, 0x5b, 0x91, - 0xa8, 0xab, 0x44, 0x07, 0xd0, 0x6d, 0xc8, 0x18, 0xee, 0xb0, 0x4a, 0x26, 0xe2, 0x34, 0x0d, 0x8f, - 0x97, 0x80, 0xfa, 0x76, 0x8e, 0x86, 0x32, 0x24, 0xf7, 0xdc, 0x20, 0xaf, 0x3c, 0xef, 0xbb, 0x8c, - 0xd3, 0xab, 0xa9, 0x71, 0x49, 0x74, 0x0f, 0x66, 0x3a, 0xa0, 0xe2, 0x73, 0x52, 0xd1, 0x1e, 0x88, - 0x8e, 0x28, 0x3f, 0x8f, 0x01, 0x4c, 0x63, 0x0a, 0x2a, 0x02, 0x68, 0xed, 0x67, 0x7a, 0xab, 0xb7, - 0x53, 0xa9, 0x6b, 0x62, 0xfd, 0xcb, 0xad, 0x27, 0xbc, 0x2d, 0x57, 0xab, 0xb7, 0x3a, 0x75, 0x9d, - 0x3d, 0xc7, 0x91, 0x0c, 0xf9, 0xdd, 0xba, 0x56, 0x65, 0x0b, 0x43, 0x29, 0x09, 0x54, 0x80, 0x6c, - 0xb5, 0xb7, 0x53, 0xd7, 0x6b, 0x6a, 0xa7, 0xcb, 0xdb, 0x97, 0xad, 0xae, 0xda, 0xac, 0xf3, 0xf6, - 0x65, 0xb3, 0xbc, 0x25, 0xa7, 0x28, 0x5c, 0xb3, 0x5e, 0xae, 0xc9, 0x69, 0xba, 0xae, 0x0d, 0x55, - 0xeb, 0x74, 0xf5, 0xa7, 0xe5, 0x66, 0xaf, 0x2e, 0x67, 0x28, 0x7e, 0xb3, 0x1c, 0x3e, 0x67, 0x29, - 0x5a, 0xab, 0xfb, 0x58, 0x3c, 0x82, 0xf2, 0x77, 0x71, 0x58, 0x3d, 0xeb, 0x03, 0x17, 0xd4, 0x81, - 0xf4, 0xa1, 0x11, 0xcd, 0x67, 0x3f, 0xbd, 0xd4, 0x07, 0x32, 0x1b, 0xcf, 0xa8, 0x70, 0x90, 0x39, - 0x09, 0x24, 0xd6, 0xc1, 0xc6, 0x38, 0xd8, 0x4f, 0xf3, 0xb1, 0x9e, 0x7d, 0xc0, 0xcd, 0x3f, 0xe6, - 0x16, 0x98, 0x94, 0xb9, 0x86, 0x7d, 0xc3, 0xb2, 0xbd, 0xd0, 0xb3, 0x30, 0x36, 0xd7, 0xfe, 0x38, - 0x06, 0x49, 0xf6, 0x02, 0xd4, 0x02, 0xd9, 0x72, 0x2c, 0xdf, 0x32, 0x6c, 0xdd, 0xc5, 0x1e, 0xb1, - 0x5f, 0x62, 0x53, 0x78, 0xed, 0x85, 0xfa, 0x67, 0x2b, 0x42, 0x58, 0x13, 0xb2, 0xe1, 0x67, 0x22, - 0xf1, 0x8b, 0x7f, 0x26, 0xf2, 0x0f, 0x31, 0x40, 0xa7, 0x3f, 0xe5, 0x41, 0x15, 0x28, 0xf8, 0xae, - 0x31, 0x38, 0xc0, 0xa6, 0xce, 0x33, 0x12, 0x6e, 0xc6, 0x25, 0x90, 0x79, 0x21, 0xd3, 0x11, 0xf5, - 0xf3, 0x5b, 0xb1, 0x57, 0xa4, 0xf9, 0x95, 0x58, 0xdc, 0xfc, 0x7a, 0xf0, 0x7d, 0x28, 0xce, 0x5e, - 0xd6, 0xd3, 0xe0, 0xb4, 0xdb, 0xab, 0x34, 0xd5, 0xaa, 0x7c, 0x0d, 0xbd, 0x07, 0x37, 0xf8, 0x6f, - 0xbd, 0xdc, 0xaa, 0xb1, 0x1e, 0xbc, 0x18, 0x8a, 0x3d, 0x50, 0x82, 0xc2, 0x94, 0x05, 0xae, 0x55, - 0x90, 0x1f, 0x37, 0x9b, 0xfa, 0x6e, 0xb3, 0xd7, 0xe1, 0x7f, 0x9e, 0x3e, 0x94, 0xaf, 0x55, 0x3e, - 0xfc, 0xe6, 0x97, 0xb7, 0xae, 0x7d, 0x73, 0x72, 0x2b, 0xf6, 0x8b, 0x93, 0x5b, 0xb1, 0x7f, 0x39, - 0xb9, 0x15, 0xfb, 0xf7, 0x93, 0x5b, 0xb1, 0x9f, 0xfd, 0xc7, 0xad, 0x6b, 0x3f, 0xcd, 0x86, 0x9e, - 0xf4, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x16, 0x48, 0xed, 0x48, 0x09, 0x30, 0x00, 0x00, + proto.RegisterFile("sql/distsqlpb/processors.proto", fileDescriptor_processors_601c194419973a68) +} + +var fileDescriptor_processors_601c194419973a68 = []byte{ + // 4053 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xc4, 0x5a, 0x3d, 0x70, 0x1b, 0x49, + 0x76, 0x16, 0x80, 0xc1, 0xdf, 0xc3, 0x0f, 0x67, 0x5b, 0xd4, 0x0a, 0xcb, 0x5d, 0x8b, 0xd2, 0xec, + 0xde, 0xea, 0xe7, 0xf6, 0xc8, 0x93, 0x76, 0xef, 0x67, 0xf7, 0xee, 0xbc, 0xc6, 0x2f, 0x35, 0x14, + 0x08, 0xf0, 0x06, 0x80, 0xb4, 0x7b, 0x55, 0xae, 0xa9, 0x01, 0xa6, 0x09, 0x8e, 0x38, 0x98, 0x86, + 0x66, 0x06, 0x22, 0x29, 0x07, 0x0e, 0x6c, 0x27, 0x76, 0x72, 0xe5, 0x72, 0xe4, 0x72, 0xe0, 0xe4, + 0x42, 0x27, 0x0e, 0x9c, 0x38, 0x71, 0xe0, 0xb2, 0x37, 0x70, 0x70, 0x89, 0xab, 0x6c, 0x07, 0x2a, + 0x1f, 0x1d, 0xd8, 0xe5, 0xdc, 0x81, 0x2f, 0x72, 0xf5, 0xcf, 0x0c, 0x06, 0x20, 0x41, 0x90, 0x94, + 0xea, 0x9c, 0x90, 0x98, 0xee, 0xf7, 0xbe, 0x7e, 0xfd, 0xfa, 0xf5, 0xeb, 0xf7, 0x5e, 0x37, 0xdc, + 0xf2, 0x5e, 0xd8, 0x9b, 0xa6, 0xe5, 0xf9, 0xde, 0x0b, 0x7b, 0xdc, 0xdf, 0x1c, 0xbb, 0x64, 0x80, + 0x3d, 0x8f, 0xb8, 0xde, 0xc6, 0xd8, 0x25, 0x3e, 0x41, 0x37, 0x07, 0x64, 0x70, 0xe0, 0x12, 0x63, + 0xb0, 0xbf, 0xe1, 0xbd, 0xb0, 0x37, 0x42, 0xca, 0xb5, 0x77, 0x9f, 0x93, 0xbe, 0xb7, 0x49, 0xff, + 0x8c, 0xfb, 0xec, 0x1f, 0x67, 0x58, 0x43, 0x8c, 0x78, 0xdc, 0xdf, 0x34, 0x0d, 0xdf, 0x10, 0x6d, + 0xa5, 0xa0, 0xcd, 0x22, 0xdf, 0xd9, 0x23, 0xee, 0xc8, 0xf0, 0x03, 0xea, 0x0f, 0xe8, 0xf0, 0xde, + 0x0b, 0xbb, 0x6f, 0x78, 0x78, 0xd3, 0xf3, 0xdd, 0xc9, 0xc0, 0x9f, 0xb8, 0xd8, 0x14, 0xbd, 0xef, + 0x47, 0x7b, 0x9f, 0x13, 0xcb, 0xd1, 0xfd, 0xe3, 0x31, 0x0e, 0x40, 0x67, 0x25, 0x8f, 0x0e, 0x37, + 0xf1, 0x2d, 0x7b, 0x73, 0xdf, 0x1e, 0x6c, 0xfa, 0xd6, 0x08, 0x7b, 0xbe, 0x31, 0x1a, 0x8b, 0x9e, + 0xd5, 0x21, 0x19, 0x12, 0xf6, 0x73, 0x93, 0xfe, 0xe2, 0xad, 0xca, 0x9f, 0x24, 0xa0, 0xb0, 0x1b, + 0x4c, 0xbc, 0x33, 0xc6, 0x03, 0x54, 0x81, 0xa4, 0xe5, 0x8c, 0x27, 0x7e, 0x29, 0x76, 0x3b, 0x71, + 0x2f, 0xf7, 0xe8, 0xe3, 0x8d, 0x05, 0x5a, 0xd8, 0x50, 0x29, 0x55, 0xe7, 0xd8, 0x19, 0x50, 0xb6, + 0x8a, 0xf4, 0xcd, 0xeb, 0xf5, 0x6b, 0x1a, 0x67, 0x45, 0x75, 0x90, 0x06, 0xc4, 0xc5, 0xa5, 0xf8, + 0xed, 0xd8, 0xbd, 0xdc, 0xa3, 0x6f, 0x2f, 0x84, 0x08, 0x47, 0xae, 0x12, 0x17, 0xf7, 0x1c, 0x8b, + 0x38, 0x02, 0x87, 0xb1, 0xa3, 0x2d, 0x48, 0x91, 0x89, 0x4f, 0x65, 0x49, 0x30, 0x59, 0xee, 0x2f, + 0x04, 0x6a, 0x33, 0x32, 0x8d, 0x4c, 0x7c, 0xec, 0x46, 0xc4, 0x11, 0xec, 0xa8, 0x02, 0xd2, 0x98, + 0x78, 0x7e, 0x49, 0x62, 0xf2, 0xdc, 0x5b, 0x2c, 0x0f, 0xf1, 0x7c, 0x21, 0x53, 0x04, 0x85, 0xf1, + 0xa2, 0x07, 0x90, 0xf1, 0x7c, 0x63, 0x88, 0x75, 0xcb, 0x2c, 0x25, 0x6f, 0xc7, 0xee, 0x25, 0x2b, + 0x2b, 0xb4, 0xf7, 0xe4, 0xf5, 0x7a, 0xba, 0x43, 0xdb, 0xd5, 0x9a, 0x96, 0x66, 0x04, 0xaa, 0x89, + 0xbe, 0x0f, 0xf9, 0xd0, 0x9a, 0x28, 0x7d, 0x8a, 0xd1, 0x5f, 0x17, 0xf4, 0xb9, 0x70, 0xda, 0x6a, + 0x4d, 0xcb, 0x85, 0x84, 0xaa, 0xa9, 0xfc, 0x55, 0x1c, 0x56, 0xe6, 0x64, 0x40, 0x65, 0x48, 0xed, + 0x59, 0xb6, 0x8f, 0xdd, 0x52, 0x8c, 0x49, 0xff, 0xe1, 0x42, 0xe9, 0xeb, 0x47, 0x63, 0x17, 0x7b, + 0xde, 0x54, 0x8b, 0x82, 0x11, 0x7d, 0x04, 0x30, 0x76, 0xc9, 0x73, 0x3c, 0xf0, 0x2d, 0xe2, 0xb0, + 0x45, 0xc9, 0x08, 0x8a, 0x48, 0x3b, 0xba, 0x0f, 0x45, 0xae, 0x2e, 0x7d, 0x40, 0xec, 0xc9, 0xc8, + 0xf1, 0x98, 0xd6, 0x0b, 0x95, 0xb8, 0x1c, 0xd3, 0x0a, 0xbc, 0xa7, 0xca, 0x3b, 0x50, 0x13, 0xf2, + 0x2e, 0x76, 0x4c, 0xec, 0xea, 0xf8, 0x68, 0xec, 0x7a, 0x25, 0x89, 0x2d, 0xcf, 0x25, 0x24, 0xcb, + 0x71, 0x76, 0xda, 0xee, 0xa1, 0x0f, 0x20, 0x45, 0xf6, 0xf6, 0x3c, 0xec, 0x33, 0xbd, 0x4a, 0xe1, + 0xda, 0xb1, 0x36, 0xb4, 0x06, 0x49, 0xdb, 0x1a, 0x59, 0x3e, 0x53, 0x62, 0xd0, 0xc9, 0x9b, 0x94, + 0xff, 0x2c, 0x02, 0x3a, 0x6d, 0x43, 0xe8, 0x73, 0x90, 0x1c, 0x42, 0xc6, 0x42, 0x61, 0xdf, 0x5a, + 0x28, 0x56, 0x8b, 0x90, 0x31, 0xe5, 0xa2, 0x7a, 0xd6, 0x18, 0x0b, 0xda, 0x86, 0x9c, 0x6f, 0xf4, + 0x6d, 0xac, 0x61, 0xc3, 0xc4, 0xae, 0x30, 0xe0, 0xc5, 0x06, 0xd3, 0x9d, 0xd2, 0x32, 0x90, 0x28, + 0x33, 0xda, 0x02, 0xa0, 0x1b, 0x57, 0x40, 0x25, 0x18, 0xd4, 0xdd, 0x85, 0x50, 0xdb, 0x21, 0x29, + 0x43, 0x8a, 0xb0, 0xa2, 0x1f, 0x41, 0xca, 0x23, 0x2e, 0x35, 0x01, 0x69, 0x89, 0x09, 0x74, 0x18, + 0x19, 0x03, 0x10, 0x2c, 0x54, 0x0a, 0x63, 0x38, 0x74, 0xf1, 0xd0, 0xf0, 0x89, 0xcb, 0x34, 0x7c, + 0x9e, 0x14, 0xe5, 0x90, 0x94, 0x4b, 0x31, 0x65, 0x45, 0x65, 0xc8, 0x50, 0x3a, 0xcb, 0x19, 0xf8, + 0xa5, 0xf4, 0x12, 0xcd, 0xd6, 0x04, 0x21, 0x03, 0x09, 0xd9, 0xa8, 0x76, 0x47, 0xd8, 0x1d, 0x62, + 0x3a, 0x57, 0xec, 0x96, 0x32, 0x4b, 0xb4, 0xbb, 0x33, 0xa5, 0xe5, 0xda, 0x8d, 0x30, 0xd3, 0x79, + 0xed, 0x1b, 0xde, 0xbe, 0x80, 0xca, 0x2e, 0x99, 0xd7, 0xe3, 0x90, 0x94, 0xcf, 0x6b, 0xca, 0x8a, + 0xbe, 0x84, 0xd4, 0x4b, 0xc3, 0x9e, 0x60, 0xaf, 0x04, 0x4b, 0x40, 0x9e, 0x32, 0xb2, 0xd0, 0x62, + 0x04, 0x1b, 0x95, 0xa4, 0x6f, 0x0c, 0x0e, 0xf6, 0x2c, 0xdb, 0xc6, 0x6e, 0x29, 0xb7, 0x04, 0xa4, + 0x12, 0x92, 0x72, 0x49, 0xa6, 0xac, 0xe8, 0x09, 0x80, 0x8b, 0x0d, 0x53, 0x1d, 0x8d, 0x89, 0xeb, + 0x97, 0x0a, 0x4b, 0x9c, 0xa7, 0x16, 0x92, 0xd6, 0x0c, 0xdf, 0xe0, 0x60, 0x53, 0x76, 0x54, 0x83, + 0x6c, 0xa7, 0xd3, 0x7d, 0xe6, 0x5a, 0xd4, 0x6e, 0x8a, 0x0c, 0x6b, 0xb1, 0x2f, 0x0f, 0x29, 0x19, + 0xcc, 0x94, 0x11, 0xfd, 0x36, 0xa4, 0x3b, 0xc6, 0x68, 0x4c, 0x27, 0xb6, 0xc2, 0x30, 0x3e, 0x5a, + 0x8c, 0xc1, 0xe9, 0x18, 0x42, 0xc0, 0x84, 0xbe, 0x06, 0x99, 0xff, 0x9c, 0x1a, 0x56, 0x49, 0x66, + 0x40, 0xdf, 0x59, 0x02, 0x34, 0x67, 0x89, 0xa7, 0x60, 0x90, 0x03, 0x37, 0x2d, 0xc7, 0xc7, 0xae, + 0x8d, 0x8d, 0x97, 0xd8, 0xe4, 0x5b, 0x45, 0x58, 0xc3, 0x3b, 0x6c, 0x84, 0xcf, 0xce, 0x39, 0xba, + 0xce, 0xe4, 0x63, 0x03, 0x2d, 0x02, 0x45, 0x3a, 0xa0, 0x11, 0xf6, 0x0d, 0x7a, 0xd8, 0x76, 0xb1, + 0xe7, 0x77, 0x98, 0x07, 0x2b, 0x21, 0x36, 0xd4, 0xe6, 0x39, 0x36, 0x3c, 0xcf, 0xc2, 0x46, 0x39, + 0x03, 0x0a, 0x61, 0x58, 0x8d, 0xb6, 0x6a, 0x78, 0x80, 0xad, 0x97, 0xd8, 0x2d, 0x5d, 0x67, 0x43, + 0x3c, 0xbc, 0xd0, 0x10, 0x01, 0x13, 0x1b, 0xe4, 0x4c, 0x38, 0x6a, 0x18, 0xd5, 0xce, 0x53, 0x61, + 0x18, 0xab, 0x4b, 0x0c, 0x23, 0xa4, 0xe4, 0x86, 0x11, 0x7e, 0xa2, 0x1d, 0xc8, 0xbf, 0xb2, 0x86, + 0xaf, 0x8c, 0xa1, 0x50, 0xf9, 0x0d, 0x06, 0xb4, 0xf8, 0x84, 0xfe, 0x59, 0x84, 0x98, 0x61, 0xcd, + 0xb0, 0xd3, 0x3d, 0x24, 0x8e, 0xa2, 0x0e, 0xf6, 0x4b, 0xef, 0x2e, 0xd9, 0x43, 0xbb, 0x21, 0x29, + 0x37, 0xfb, 0x29, 0x2b, 0xf5, 0x52, 0x87, 0x96, 0x63, 0x92, 0x43, 0xec, 0x96, 0x6e, 0x2e, 0xf1, + 0x52, 0xcf, 0x04, 0x21, 0xf7, 0x52, 0x01, 0x1b, 0xda, 0x85, 0x82, 0x4d, 0x06, 0x86, 0xbd, 0x6b, + 0x1b, 0x4e, 0x8b, 0x98, 0xb8, 0x54, 0x62, 0x38, 0x0f, 0x16, 0xe2, 0x34, 0xa3, 0xd4, 0x0c, 0x6c, + 0x16, 0x80, 0xee, 0x82, 0xc1, 0xbe, 0xe1, 0x0c, 0xa3, 0xbb, 0xe0, 0xbd, 0x25, 0xbb, 0xa0, 0x3a, + 0xc7, 0xc0, 0x77, 0xc1, 0x3c, 0x0c, 0xea, 0x40, 0x91, 0xb7, 0x35, 0x5c, 0xe2, 0xf8, 0x16, 0x76, + 0x4b, 0x6b, 0x4b, 0xfc, 0x46, 0x75, 0x86, 0x9c, 0xc1, 0xce, 0x41, 0x7c, 0x21, 0x7d, 0xf3, 0x97, + 0xeb, 0xb1, 0x6d, 0x29, 0x93, 0x92, 0xd3, 0xdb, 0x52, 0x26, 0x2f, 0x17, 0x94, 0x22, 0xe4, 0xa3, + 0xa7, 0xa5, 0xf2, 0x19, 0xbc, 0x7b, 0xb6, 0x65, 0xa3, 0x35, 0x88, 0x5b, 0x26, 0x3b, 0x7a, 0xb3, + 0x15, 0x10, 0x11, 0x4f, 0x5c, 0xad, 0x69, 0x71, 0xcb, 0x54, 0x1e, 0x43, 0x69, 0x91, 0xb1, 0xa2, + 0x4f, 0x00, 0x3c, 0x1e, 0x53, 0x58, 0xa6, 0xc7, 0x82, 0xcf, 0x6c, 0xa5, 0x70, 0xf2, 0x7a, 0x3d, + 0xcb, 0xb1, 0xd5, 0x9a, 0xa7, 0x65, 0x39, 0x81, 0x6a, 0x7a, 0xca, 0x9f, 0xc6, 0xa0, 0x38, 0xeb, + 0x8e, 0x51, 0x05, 0xd2, 0x41, 0xe0, 0xc2, 0x43, 0x57, 0x65, 0xf1, 0xf1, 0x64, 0xf8, 0x93, 0x91, + 0xea, 0xec, 0x11, 0x11, 0x4e, 0x04, 0x8c, 0xe8, 0x7d, 0xc8, 0xba, 0xc6, 0xa1, 0xde, 0x3f, 0xf6, + 0xb1, 0x57, 0x8a, 0xdf, 0x4e, 0xdc, 0xcb, 0x6b, 0x19, 0xd7, 0x38, 0xac, 0xd0, 0x6f, 0xb4, 0x0e, + 0x19, 0x67, 0x32, 0xd2, 0x5d, 0x72, 0xe8, 0xb1, 0xd3, 0x3c, 0x08, 0x46, 0xd2, 0xce, 0x64, 0xa4, + 0x91, 0x43, 0x4f, 0xa9, 0xc1, 0xca, 0x4c, 0x40, 0x60, 0x38, 0xe8, 0x21, 0x48, 0xde, 0xd8, 0x70, + 0x44, 0x28, 0x72, 0x33, 0x22, 0x91, 0xc8, 0x0b, 0x36, 0x28, 0x59, 0x10, 0x68, 0x52, 0x52, 0xe5, + 0xcf, 0x13, 0x73, 0x30, 0x3c, 0x28, 0x67, 0x91, 0x85, 0xc0, 0x99, 0xdf, 0xaf, 0x22, 0x4f, 0xe0, + 0xe1, 0x48, 0x0d, 0x7b, 0x03, 0xd7, 0x1a, 0xfb, 0xc4, 0x0d, 0x82, 0x25, 0xc6, 0x8a, 0xee, 0x40, + 0xd6, 0x72, 0x4c, 0x7c, 0xa4, 0x5b, 0xe6, 0x11, 0x0b, 0x6c, 0x0a, 0xa2, 0x3f, 0xc3, 0x9a, 0x55, + 0xf3, 0x08, 0xdd, 0x82, 0xb4, 0x8b, 0x5f, 0x62, 0xd7, 0xc3, 0x6c, 0x82, 0x41, 0x94, 0x18, 0x34, + 0xa2, 0x1a, 0x24, 0xa9, 0x88, 0x41, 0xc0, 0x77, 0xc1, 0xb8, 0x28, 0x9c, 0x1f, 0x67, 0x46, 0x1f, + 0x02, 0xb0, 0xf0, 0x4d, 0xdf, 0xb7, 0x1c, 0x1e, 0xf3, 0x25, 0x04, 0x41, 0x96, 0xb5, 0x3f, 0xb6, + 0x1c, 0x9f, 0x2a, 0xdb, 0xf2, 0xf4, 0xc1, 0x3e, 0x1e, 0x1c, 0xb0, 0xc8, 0x2f, 0x94, 0xc5, 0xf2, + 0xaa, 0xb4, 0x11, 0xed, 0x00, 0xbc, 0xb4, 0x3c, 0xab, 0x6f, 0xd9, 0x96, 0x7f, 0xcc, 0x02, 0x92, + 0xe2, 0x39, 0x1e, 0xa3, 0x33, 0x30, 0x9c, 0xa7, 0x21, 0x79, 0x10, 0xfd, 0x4e, 0x01, 0xd0, 0xb7, + 0x20, 0x37, 0x32, 0x8e, 0x74, 0x17, 0x7b, 0x13, 0xdb, 0xf7, 0x58, 0x68, 0x12, 0xac, 0x2f, 0x8c, + 0x8c, 0x23, 0x8d, 0xb7, 0x2b, 0xff, 0x98, 0x80, 0xe2, 0x6c, 0xa4, 0xf6, 0x9b, 0x5a, 0x9b, 0xfb, + 0x50, 0xb4, 0x09, 0x39, 0x98, 0x8c, 0xcf, 0x0a, 0xcf, 0x79, 0x4f, 0x10, 0x9e, 0x57, 0x20, 0x4d, + 0x1c, 0x16, 0x9a, 0x2f, 0x0d, 0x18, 0x4f, 0xe7, 0x0c, 0xc4, 0xa1, 0x6d, 0xa8, 0x07, 0xef, 0x70, + 0x89, 0x78, 0x0e, 0xc1, 0xd1, 0x92, 0x97, 0x45, 0x5b, 0x61, 0x18, 0x0d, 0x06, 0xc1, 0x60, 0x3f, + 0x07, 0x89, 0xe6, 0xb1, 0x6c, 0x49, 0x8b, 0x8f, 0xd6, 0x17, 0xe8, 0x8a, 0x6a, 0xb8, 0x7b, 0x3c, + 0xc6, 0xc1, 0xbe, 0xa0, 0x2c, 0x6f, 0x79, 0xc1, 0xa9, 0x07, 0x81, 0x69, 0xb8, 0x8c, 0x76, 0x61, + 0x45, 0x64, 0x3f, 0xc4, 0x35, 0xb1, 0x6b, 0x39, 0x43, 0xb1, 0x9e, 0x77, 0x16, 0x27, 0x9d, 0x82, + 0x50, 0x80, 0x8b, 0xec, 0x29, 0x68, 0x45, 0x8f, 0x00, 0x05, 0x50, 0xfa, 0xc8, 0xf0, 0x07, 0xfb, + 0xba, 0x8d, 0x9d, 0x99, 0xc5, 0x95, 0x83, 0xfe, 0x1d, 0xda, 0xdd, 0xc4, 0x8e, 0xd2, 0x87, 0x7c, + 0x34, 0x74, 0x46, 0x77, 0x61, 0x85, 0xd1, 0x60, 0x53, 0x8f, 0xfa, 0xb6, 0x82, 0x56, 0x14, 0xcd, + 0xc1, 0x92, 0xdf, 0x07, 0x39, 0x88, 0xb2, 0x43, 0xca, 0x38, 0xa3, 0x5c, 0x09, 0xda, 0x05, 0x29, + 0x4d, 0xf9, 0xe5, 0xf9, 0xd3, 0x18, 0xd5, 0x20, 0xc5, 0x2c, 0xd1, 0x5b, 0x90, 0xf6, 0x9f, 0x6f, + 0xc5, 0x82, 0x17, 0xd5, 0x01, 0xf0, 0x8b, 0x99, 0xf1, 0x73, 0x8f, 0x6e, 0x2f, 0x3e, 0x88, 0x38, + 0x5d, 0xb0, 0xf7, 0xf1, 0x8b, 0x60, 0x32, 0xeb, 0xd3, 0xdd, 0x10, 0xb5, 0xf2, 0x60, 0x2f, 0xbc, + 0x1d, 0x03, 0xdf, 0x86, 0xfc, 0x9e, 0x75, 0x84, 0x4d, 0x5d, 0x04, 0xff, 0x49, 0x26, 0xed, 0x85, + 0x83, 0xff, 0x1c, 0x63, 0xe6, 0x8d, 0x6f, 0x60, 0xd5, 0x8a, 0x05, 0xef, 0x9c, 0x0a, 0x1f, 0x90, + 0x02, 0x79, 0x8d, 0x1c, 0x76, 0xc8, 0xc4, 0x1d, 0x60, 0xd5, 0x3c, 0x62, 0x96, 0x58, 0xd0, 0x66, + 0xda, 0xd0, 0x07, 0x90, 0x6d, 0xd1, 0x43, 0x6c, 0x3c, 0xf1, 0x3d, 0x6e, 0x55, 0xda, 0xb4, 0x01, + 0x21, 0x90, 0x5a, 0xc6, 0x88, 0xbb, 0xf1, 0xac, 0xc6, 0x7e, 0x2b, 0x77, 0x21, 0x1d, 0x68, 0xf8, + 0x83, 0xd9, 0xb3, 0x92, 0xeb, 0x37, 0x68, 0x52, 0xfe, 0x35, 0x0e, 0x2b, 0x73, 0xb9, 0x17, 0x6a, + 0x42, 0xc1, 0xc6, 0x7b, 0x57, 0xdf, 0x1d, 0x79, 0xca, 0x1d, 0xee, 0x8d, 0x16, 0x14, 0x5d, 0x6b, + 0xb8, 0x1f, 0x81, 0x8b, 0x5f, 0x0e, 0xae, 0xc0, 0xd8, 0x43, 0xbc, 0x88, 0x41, 0x24, 0xaf, 0x6a, + 0x10, 0x6f, 0xe0, 0x9a, 0xee, 0x43, 0xc1, 0x99, 0xd8, 0xb6, 0x8e, 0x5f, 0x4c, 0x8c, 0xd0, 0x3b, + 0x05, 0x27, 0x56, 0x9e, 0x76, 0xd5, 0x45, 0x8f, 0xf2, 0xf3, 0x04, 0x14, 0x67, 0x93, 0x51, 0xf4, + 0x00, 0x56, 0x98, 0x6a, 0x23, 0x5b, 0x27, 0x16, 0x71, 0xed, 0x78, 0xcf, 0xaf, 0x87, 0x5b, 0xe3, + 0x13, 0x90, 0xb9, 0xe2, 0xe6, 0xf6, 0x19, 0x27, 0xe6, 0x4a, 0x9d, 0x52, 0xff, 0x3f, 0xab, 0xe5, + 0xdb, 0x50, 0x64, 0x19, 0xfb, 0xd4, 0x79, 0x45, 0xf5, 0x52, 0xe0, 0x7d, 0x81, 0xac, 0x5f, 0xc0, + 0xcd, 0x39, 0x2d, 0xe8, 0x86, 0x8b, 0xf5, 0x03, 0x7c, 0xcc, 0x0e, 0xe3, 0x80, 0xeb, 0xfa, 0x8c, + 0x3e, 0xca, 0x2e, 0x7e, 0x82, 0x8f, 0xd1, 0x8f, 0xa1, 0x34, 0xaf, 0x95, 0x90, 0x39, 0x1b, 0x61, + 0x5e, 0x9d, 0xd5, 0x0f, 0xe7, 0x56, 0xfe, 0x3b, 0x05, 0xc5, 0xd9, 0x38, 0x1b, 0xdd, 0x01, 0x18, + 0xba, 0x84, 0x9f, 0xb5, 0x51, 0x05, 0x67, 0x59, 0x6b, 0x95, 0xd8, 0x1e, 0xfa, 0x5d, 0xc8, 0x07, + 0xc5, 0x11, 0x8b, 0x88, 0xd3, 0x38, 0xf7, 0xe8, 0xd3, 0x0b, 0x56, 0x56, 0xc2, 0xcf, 0xa9, 0xc2, + 0x67, 0xe0, 0xd0, 0x77, 0xc5, 0xe9, 0x81, 0x4d, 0x3d, 0x22, 0x89, 0x14, 0x4a, 0x22, 0x8b, 0xde, + 0xad, 0x50, 0xa0, 0x86, 0x58, 0xa8, 0x24, 0x5b, 0xa8, 0x4f, 0x2e, 0x2a, 0xc8, 0xfc, 0xaa, 0xad, + 0xfd, 0x51, 0x1c, 0x72, 0x11, 0xe9, 0x28, 0xee, 0xde, 0xc4, 0x19, 0xb0, 0x0d, 0x7f, 0x09, 0xdc, + 0xc6, 0xc4, 0x09, 0x0b, 0xa8, 0x94, 0x1f, 0xdd, 0x8e, 0xd4, 0x8f, 0xa2, 0x35, 0xc8, 0x69, 0x79, + 0xe8, 0x23, 0x28, 0x8a, 0x68, 0x63, 0x40, 0x6c, 0x16, 0x0a, 0x49, 0xdc, 0xf1, 0xf1, 0xd6, 0x2a, + 0xb1, 0xa9, 0xe3, 0xbb, 0xc9, 0x7c, 0x17, 0xeb, 0x4e, 0xb2, 0x13, 0x2e, 0x35, 0xe0, 0x1d, 0x5b, + 0x90, 0x35, 0xdc, 0xe1, 0x64, 0x84, 0x1d, 0xdf, 0x2b, 0xa5, 0x2e, 0x5b, 0x92, 0x9c, 0xf2, 0x6e, + 0x4b, 0x99, 0x84, 0x2c, 0x29, 0xbf, 0x88, 0x83, 0x44, 0x27, 0x81, 0x64, 0xc8, 0x97, 0x5b, 0x5f, + 0xeb, 0xad, 0x76, 0x57, 0x6f, 0xf5, 0x9a, 0x4d, 0xf9, 0x1a, 0x4a, 0x43, 0xa2, 0xfc, 0x74, 0x4b, + 0x8e, 0xa1, 0x3c, 0x64, 0x2a, 0xed, 0x76, 0x53, 0x2f, 0xb7, 0x6a, 0x72, 0x1c, 0xe5, 0x20, 0xcd, + 0xbe, 0xda, 0x9a, 0x9c, 0x40, 0x45, 0x80, 0x6a, 0xbb, 0x55, 0x2d, 0x77, 0xf5, 0xf2, 0xd6, 0x96, + 0x2c, 0xa1, 0x2c, 0x24, 0xab, 0xed, 0x5e, 0xab, 0x2b, 0x27, 0x29, 0xfb, 0x4e, 0xf9, 0x2b, 0x39, + 0xcd, 0x7e, 0xa8, 0x2d, 0x39, 0x83, 0x00, 0x52, 0x9d, 0x6e, 0xad, 0x56, 0x7f, 0x2a, 0x67, 0x69, + 0x63, 0xa7, 0xb7, 0x23, 0x03, 0x85, 0xeb, 0xf4, 0x76, 0x74, 0xb5, 0xd5, 0x95, 0x73, 0x74, 0xa4, + 0xa7, 0x65, 0x4d, 0x2d, 0xb7, 0xaa, 0x75, 0x39, 0x4f, 0xbb, 0xbe, 0x6a, 0x6b, 0x0c, 0xb9, 0xc0, + 0x47, 0xea, 0xb5, 0xba, 0xba, 0xd6, 0x7e, 0xd6, 0x91, 0x8b, 0x8c, 0xef, 0xa7, 0x5a, 0x4d, 0x6d, + 0x34, 0xe4, 0x15, 0x84, 0xa0, 0xd8, 0x50, 0x5b, 0xe5, 0xa6, 0x1e, 0x72, 0xcb, 0x74, 0x42, 0xbc, + 0x4d, 0x8c, 0xf9, 0x0e, 0x2a, 0x40, 0xb6, 0xac, 0x69, 0xe5, 0xaf, 0x19, 0x22, 0xa2, 0x83, 0x6d, + 0x77, 0xda, 0x2d, 0xf6, 0x75, 0x9d, 0x76, 0xd2, 0xaf, 0x0a, 0xfb, 0x5c, 0xa5, 0xc3, 0x75, 0xba, + 0x9a, 0xda, 0xda, 0x62, 0xdf, 0x37, 0x94, 0x4f, 0x40, 0xa2, 0x36, 0x84, 0x32, 0x20, 0x95, 0x7b, + 0xdd, 0xb6, 0x7c, 0x8d, 0xcd, 0xa6, 0x5a, 0x6e, 0x96, 0x35, 0x39, 0x46, 0xa9, 0x5b, 0xed, 0x96, + 0x2e, 0xbe, 0xe3, 0xca, 0x1f, 0x48, 0x50, 0x9c, 0x2d, 0x81, 0x85, 0x86, 0xbb, 0xcc, 0xc0, 0x66, + 0xd9, 0x4e, 0x19, 0xee, 0x34, 0x10, 0x8f, 0x5f, 0x3d, 0x10, 0x0f, 0x33, 0x9c, 0xc4, 0x9b, 0x64, + 0x38, 0x0f, 0x21, 0x63, 0x4e, 0x5c, 0xb6, 0x7d, 0x98, 0x09, 0x27, 0x2a, 0x37, 0x68, 0xf7, 0xaf, + 0x5f, 0xaf, 0x17, 0x7c, 0x6b, 0x84, 0x37, 0x6a, 0xa2, 0x53, 0x0b, 0xc9, 0x68, 0x52, 0x34, 0xd8, + 0x9f, 0x38, 0x07, 0xba, 0x67, 0xbd, 0xc2, 0xb3, 0x49, 0x11, 0x6b, 0xef, 0x58, 0xaf, 0x30, 0x6a, + 0x43, 0x9e, 0xf8, 0xfb, 0xd8, 0xd5, 0x45, 0xac, 0x96, 0xba, 0x42, 0xac, 0x96, 0x63, 0x08, 0x5d, + 0x1e, 0xb0, 0x7d, 0x09, 0x19, 0x17, 0x1b, 0x66, 0xd9, 0x6b, 0xef, 0x89, 0x9a, 0xee, 0x6f, 0x45, + 0xc0, 0x26, 0xbe, 0x65, 0x6f, 0xec, 0xdb, 0x83, 0x8d, 0x6e, 0x70, 0x97, 0x14, 0x6c, 0xd9, 0x80, + 0x49, 0xf9, 0x9e, 0x58, 0xfc, 0x1c, 0xa4, 0x55, 0xe7, 0xa5, 0x61, 0x5b, 0x26, 0x5f, 0x7f, 0xee, + 0x61, 0xe5, 0x18, 0x35, 0x7b, 0x95, 0x86, 0x6d, 0x72, 0x9c, 0xed, 0x00, 0x9a, 0xba, 0xc9, 0x09, + 0xe5, 0x24, 0x06, 0x99, 0x86, 0x4d, 0x0e, 0xd9, 0xfa, 0x3f, 0x84, 0xf4, 0x9e, 0x4d, 0x0e, 0x75, + 0x51, 0x36, 0xc8, 0x57, 0x4a, 0x74, 0x90, 0x7f, 0x7b, 0xbd, 0x9e, 0xa2, 0x24, 0x6a, 0xed, 0x24, + 0xfc, 0xa5, 0xa5, 0x28, 0xa1, 0x6a, 0xa2, 0x26, 0x2b, 0x17, 0x89, 0xeb, 0x3a, 0x11, 0x68, 0x7e, + 0xbc, 0xfc, 0x9a, 0x29, 0x72, 0xa9, 0x13, 0xe1, 0x47, 0x3d, 0x48, 0x0f, 0x0d, 0x1f, 0x1f, 0x1a, + 0xc7, 0x2c, 0x5e, 0x4a, 0x56, 0x7e, 0x24, 0x56, 0xeb, 0xd3, 0xa1, 0xe5, 0xef, 0x4f, 0xfa, 0x1b, + 0x03, 0x32, 0xda, 0x0c, 0xc1, 0xcd, 0xfe, 0xf4, 0xf7, 0xe6, 0xf8, 0x60, 0xb8, 0x19, 0x64, 0xf2, + 0x34, 0x7c, 0x53, 0x6b, 0x5a, 0x80, 0xa5, 0x1c, 0x42, 0x6e, 0x9b, 0xf4, 0x77, 0x5d, 0x32, 0xa4, + 0x9e, 0x06, 0x7d, 0x04, 0xa9, 0xe7, 0xa4, 0x1f, 0xcc, 0x32, 0x51, 0x29, 0x88, 0xe2, 0x48, 0x72, + 0x9b, 0xf4, 0xd5, 0x9a, 0x96, 0x7c, 0x4e, 0xfa, 0xaa, 0x89, 0xee, 0x41, 0x7e, 0x40, 0x1c, 0xdf, + 0xb5, 0xfa, 0x93, 0xf0, 0xb6, 0x26, 0x1e, 0x9c, 0x10, 0xd1, 0x1e, 0x54, 0x02, 0xc9, 0xb3, 0x89, + 0x2f, 0x44, 0x0e, 0x2a, 0x08, 0x36, 0xf1, 0x95, 0x7f, 0x96, 0x00, 0x9d, 0xae, 0x0e, 0xd3, 0x14, + 0xd7, 0x63, 0x45, 0x54, 0x6e, 0x63, 0xf1, 0x08, 0x1f, 0xf0, 0x0e, 0x66, 0x64, 0x0d, 0xc8, 0x8c, + 0x85, 0xcc, 0xec, 0xd0, 0x3f, 0xaf, 0xe6, 0x1b, 0x99, 0x5f, 0x60, 0x1a, 0x01, 0x2f, 0x6a, 0x40, + 0x62, 0xe2, 0x5a, 0xa5, 0x34, 0x5b, 0x9c, 0xcf, 0x2e, 0x51, 0xc6, 0xde, 0xe8, 0xb9, 0x56, 0xdd, + 0xf1, 0xdd, 0x63, 0x8d, 0x02, 0xa0, 0x9f, 0x40, 0x8a, 0x5f, 0x9c, 0x8a, 0xfb, 0x82, 0xf5, 0x33, + 0x8a, 0x28, 0x6a, 0xbb, 0x61, 0xd9, 0xb8, 0xc1, 0xc8, 0xc2, 0xcb, 0x2f, 0xf6, 0x85, 0x7a, 0x61, + 0x66, 0x93, 0x65, 0x92, 0xfc, 0xe0, 0x32, 0x92, 0xf0, 0x6d, 0xc2, 0x84, 0x61, 0xb0, 0xb1, 0x30, + 0xd5, 0xf9, 0x12, 0xde, 0xf3, 0x0e, 0xac, 0xb1, 0x3e, 0xb2, 0x3c, 0x8f, 0x66, 0x78, 0x7b, 0xc4, + 0xc5, 0xd6, 0xd0, 0xa1, 0x21, 0x07, 0xbf, 0x48, 0x08, 0x8e, 0xb7, 0x77, 0x29, 0xd9, 0x0e, 0xa7, + 0x6a, 0x70, 0xa2, 0x27, 0xf8, 0xd8, 0x5b, 0x33, 0x20, 0x17, 0x41, 0x47, 0x32, 0x24, 0x68, 0xb4, + 0xc2, 0xea, 0x66, 0x1a, 0xfd, 0x89, 0x7e, 0x0c, 0x49, 0x96, 0x9a, 0x5c, 0xce, 0x9d, 0x69, 0x9c, + 0xe9, 0x8b, 0xf8, 0x0f, 0x63, 0x6b, 0xdf, 0x87, 0x4c, 0xa0, 0xca, 0x28, 0x7e, 0x92, 0xe3, 0xaf, + 0x46, 0xf1, 0xb3, 0x11, 0xbe, 0x6d, 0x29, 0x13, 0x93, 0xe3, 0xfc, 0x14, 0xdc, 0x96, 0x32, 0x92, + 0x9c, 0xdc, 0x96, 0x32, 0x49, 0x39, 0xa5, 0xfc, 0x4d, 0x1c, 0x0a, 0x33, 0x37, 0x05, 0xe8, 0x63, + 0xc8, 0x99, 0x98, 0x9e, 0xde, 0xdc, 0xd7, 0xf1, 0xaa, 0x9f, 0xf0, 0x33, 0x91, 0x0e, 0xf4, 0x00, + 0x0a, 0x87, 0x86, 0x6d, 0x53, 0xe7, 0xd7, 0x32, 0x1c, 0xc2, 0xeb, 0x67, 0x81, 0x83, 0x9b, 0xed, + 0x42, 0x4f, 0x66, 0x8b, 0x4c, 0x9b, 0x17, 0xbb, 0xb4, 0x60, 0x75, 0x34, 0x9a, 0xe6, 0xcc, 0x7a, + 0xe2, 0xa8, 0x31, 0x27, 0xaf, 0x6e, 0xcc, 0x54, 0x95, 0xc1, 0x00, 0x74, 0xe3, 0x39, 0x34, 0xb7, + 0x8a, 0xce, 0x96, 0xb5, 0x50, 0x25, 0x63, 0xc7, 0x64, 0x0a, 0xcd, 0x6b, 0xf4, 0xe7, 0xb6, 0x94, + 0x89, 0xcb, 0x09, 0xe5, 0xef, 0x63, 0x50, 0x98, 0xa9, 0xa4, 0x5f, 0x58, 0x71, 0x77, 0x21, 0x4f, + 0x91, 0xf5, 0xb1, 0xe1, 0xfb, 0xd8, 0xe5, 0xee, 0x20, 0x24, 0xa4, 0x3d, 0xbb, 0xbc, 0x03, 0xfd, + 0x04, 0xd2, 0x64, 0x1c, 0x44, 0xa2, 0xf3, 0x8e, 0x3c, 0xd8, 0x26, 0xd5, 0xce, 0xd3, 0x36, 0x27, + 0x0a, 0xaa, 0x69, 0x82, 0x67, 0x7a, 0xfc, 0xb0, 0xea, 0xa6, 0x74, 0xea, 0xf8, 0x61, 0xf5, 0xcd, + 0x3f, 0x8c, 0x03, 0x74, 0x0e, 0xb0, 0x3f, 0xd8, 0x67, 0x73, 0xd8, 0x86, 0x9c, 0xc7, 0xbe, 0xf4, + 0xc8, 0xf1, 0x7d, 0xce, 0xdd, 0x24, 0xa3, 0x8d, 0x9c, 0xda, 0xe0, 0x85, 0x2d, 0xa8, 0x34, 0x4d, + 0x48, 0x79, 0xd9, 0x22, 0x2c, 0xc9, 0x7e, 0x0a, 0x68, 0x88, 0x1d, 0xec, 0x1a, 0x3e, 0xd6, 0xf7, + 0x2d, 0xcf, 0x27, 0x43, 0xd7, 0x18, 0xcd, 0x94, 0x27, 0xdf, 0x09, 0xfa, 0x1f, 0x07, 0xdd, 0xe8, + 0x87, 0x70, 0x23, 0xa4, 0xd5, 0x47, 0xc6, 0x91, 0xde, 0x9f, 0x0c, 0x0e, 0xb0, 0xcf, 0x67, 0x16, + 0x94, 0x5f, 0xae, 0x87, 0x24, 0x3b, 0xc6, 0x51, 0x85, 0x13, 0xa0, 0x3b, 0x90, 0xf5, 0x7c, 0xc3, + 0xd7, 0xd9, 0x0a, 0x27, 0x23, 0xda, 0xce, 0xd0, 0x66, 0x96, 0x47, 0xff, 0x1e, 0xe4, 0x22, 0x77, + 0x5d, 0xa8, 0x0e, 0x19, 0x3e, 0x91, 0xb0, 0x78, 0xb2, 0x4c, 0x07, 0x91, 0x63, 0x28, 0x64, 0x3d, + 0xcb, 0x3b, 0x17, 0x4e, 0x7b, 0x67, 0xe5, 0xbf, 0xe2, 0xb0, 0x7a, 0xd6, 0x05, 0xd9, 0x6f, 0x56, + 0x0c, 0xf4, 0xfb, 0x80, 0xf8, 0x57, 0x90, 0xdb, 0x45, 0x6a, 0x35, 0x3f, 0x3d, 0x79, 0xbd, 0x2e, + 0xae, 0xeb, 0x44, 0x76, 0xa7, 0xd6, 0xbc, 0x5f, 0xbf, 0x5e, 0xff, 0xfc, 0x42, 0xa7, 0x69, 0xe4, + 0xdd, 0xcb, 0x46, 0xc0, 0xad, 0xc9, 0xde, 0x0c, 0x9c, 0xe9, 0x21, 0x03, 0x32, 0xcc, 0x13, 0xd3, + 0xf3, 0x94, 0x2f, 0x6a, 0x23, 0x78, 0x8e, 0xc1, 0x3c, 0xa2, 0x5a, 0xbb, 0xf0, 0xf9, 0x1d, 0x1d, + 0x91, 0x9e, 0xdf, 0x0c, 0x57, 0x35, 0x95, 0xff, 0x95, 0xe0, 0xfd, 0x73, 0x6e, 0x0a, 0xd1, 0x57, + 0x73, 0x35, 0xb3, 0x2f, 0xae, 0x72, 0xdf, 0xc8, 0xfd, 0xf7, 0x5c, 0x1d, 0x2d, 0x52, 0x87, 0x8f, + 0x9f, 0x55, 0x87, 0x9f, 0xad, 0xa0, 0x27, 0xce, 0xae, 0xa0, 0xbf, 0x8d, 0x22, 0xd9, 0xe7, 0x33, + 0x39, 0xe5, 0x65, 0x92, 0xff, 0xb5, 0xbf, 0x8d, 0x43, 0x92, 0xcd, 0x0d, 0xfd, 0x0e, 0x48, 0x26, + 0xf6, 0x06, 0x57, 0xaa, 0x8f, 0x33, 0xce, 0x8b, 0x94, 0xc7, 0x83, 0x27, 0x3e, 0x89, 0x37, 0x78, + 0xe2, 0x53, 0x85, 0x4c, 0x58, 0x8f, 0x92, 0x2e, 0x57, 0x8f, 0x0a, 0x19, 0xa7, 0x19, 0x44, 0xf2, + 0x0d, 0x32, 0x08, 0xe5, 0x97, 0x31, 0x28, 0xce, 0xde, 0x72, 0xa2, 0x2f, 0x21, 0xc9, 0x5f, 0xdb, + 0xc4, 0x2e, 0x9b, 0xda, 0x72, 0x3e, 0xd4, 0x85, 0xd0, 0x53, 0x9a, 0x73, 0x45, 0xda, 0x3b, 0x0b, + 0x16, 0x85, 0xef, 0xb7, 0xc8, 0xda, 0xca, 0x21, 0x42, 0x50, 0xb7, 0xb9, 0x0b, 0xb2, 0x33, 0x19, + 0xb1, 0xf2, 0x84, 0x3e, 0xc6, 0xae, 0x3e, 0xc4, 0x0e, 0xf7, 0x03, 0x5a, 0xc1, 0x99, 0x8c, 0xaa, + 0xc4, 0xf6, 0x76, 0xb1, 0xbb, 0x85, 0x1d, 0xe5, 0xcf, 0xf2, 0x90, 0x8f, 0xde, 0xb8, 0xa2, 0xdb, + 0x90, 0x1b, 0x1b, 0xae, 0x6f, 0xb1, 0x1a, 0xc8, 0xb1, 0x28, 0x6c, 0x47, 0x9b, 0x90, 0x06, 0x59, + 0x7e, 0x2b, 0xdb, 0x08, 0x25, 0xdd, 0xb8, 0xd0, 0x6d, 0xae, 0xf8, 0x68, 0x84, 0xc9, 0x7d, 0x08, + 0xb3, 0xf6, 0xd7, 0x31, 0x91, 0xd6, 0x6b, 0x50, 0x08, 0x2a, 0x2e, 0xb8, 0x71, 0xc5, 0x02, 0x87, + 0x36, 0x0b, 0x81, 0x76, 0x01, 0xc4, 0x48, 0x14, 0x30, 0xce, 0x00, 0xbf, 0x7b, 0x29, 0x89, 0x29, + 0x68, 0x04, 0x83, 0x5f, 0xc5, 0xae, 0xfd, 0x2a, 0x09, 0xc9, 0x86, 0x4b, 0x43, 0x8c, 0x6d, 0x90, + 0x46, 0xc4, 0x0c, 0x4e, 0xdb, 0x0b, 0x62, 0x33, 0xd6, 0x8d, 0x1d, 0x62, 0x86, 0x5b, 0x94, 0x62, + 0xa0, 0x5d, 0x48, 0xf5, 0xc9, 0xc4, 0x31, 0x3d, 0x11, 0x62, 0x3e, 0xba, 0x0c, 0x5a, 0x85, 0x71, + 0x06, 0xfe, 0x82, 0xe3, 0xac, 0xfd, 0x4f, 0x0c, 0x92, 0xac, 0x03, 0x7d, 0x0d, 0x59, 0xd6, 0xd6, + 0x9d, 0x86, 0x06, 0xdf, 0xbb, 0x34, 0x7c, 0xc4, 0xf0, 0xa6, 0x68, 0xd4, 0xfb, 0x59, 0x8e, 0xaf, + 0x8b, 0x37, 0x63, 0x51, 0x77, 0x90, 0xb5, 0x1c, 0xbf, 0xcd, 0x9f, 0x8d, 0xdd, 0x81, 0x3c, 0x75, + 0x43, 0x66, 0x40, 0x96, 0x60, 0x31, 0x59, 0x8e, 0xb5, 0x09, 0x12, 0x15, 0x72, 0xbc, 0x93, 0xc7, + 0x2f, 0x7c, 0xc7, 0x5f, 0xfc, 0xd2, 0x18, 0x38, 0x33, 0x15, 0x69, 0xed, 0x2f, 0x62, 0x90, 0xe2, + 0x0a, 0x41, 0x3b, 0x90, 0xf4, 0x7c, 0xc3, 0xf5, 0x85, 0xbb, 0x7b, 0x78, 0xe9, 0x49, 0x87, 0x8e, + 0x80, 0xa2, 0xa0, 0xea, 0x34, 0xa4, 0xbc, 0x0a, 0x18, 0x8b, 0x42, 0x95, 0xbb, 0x20, 0xd1, 0xc5, + 0xa7, 0x19, 0xb8, 0x56, 0x6e, 0x6d, 0xd5, 0xe5, 0x6b, 0x28, 0x03, 0x12, 0x2b, 0x17, 0xc5, 0x68, + 0xb6, 0xbe, 0xa5, 0xb5, 0x7b, 0xbb, 0x1d, 0x39, 0xae, 0xbc, 0x82, 0x6c, 0xa8, 0x78, 0x74, 0x13, + 0xae, 0xf7, 0x5a, 0x95, 0x76, 0xaf, 0x55, 0xab, 0xd7, 0xf4, 0x5d, 0xad, 0x5e, 0xad, 0xd7, 0xd4, + 0xd6, 0x96, 0x7c, 0x6d, 0xb6, 0xa3, 0xd1, 0x6e, 0x36, 0xdb, 0xcf, 0x68, 0x47, 0x0c, 0xad, 0x82, + 0xdc, 0x6e, 0x34, 0x3a, 0xf5, 0x6e, 0x84, 0x3c, 0x1e, 0x69, 0x9d, 0xd2, 0x26, 0xd0, 0x0a, 0xe4, + 0xaa, 0x3d, 0x4d, 0xab, 0xf3, 0xba, 0x95, 0x2c, 0xad, 0xfd, 0x53, 0x1c, 0x32, 0xc1, 0xb6, 0x45, + 0xb5, 0x48, 0xd1, 0xf1, 0xbc, 0xa7, 0x17, 0xb3, 0xf3, 0x9e, 0x2f, 0x39, 0x7e, 0x0c, 0x39, 0xc3, + 0x1d, 0xaa, 0xe6, 0x51, 0x87, 0xad, 0x48, 0xd4, 0x54, 0xa2, 0x1d, 0xe8, 0x36, 0x64, 0x0c, 0x77, + 0x58, 0x25, 0x13, 0x71, 0x9a, 0x86, 0xc7, 0x4b, 0xd0, 0xfa, 0x76, 0x8e, 0x86, 0x32, 0x24, 0xf7, + 0xdc, 0x20, 0xae, 0x3c, 0xef, 0x89, 0xc6, 0xe9, 0xd5, 0xd4, 0x38, 0x27, 0xba, 0x07, 0x33, 0xc5, + 0x50, 0xf1, 0xb2, 0x54, 0x94, 0x07, 0xa2, 0x3d, 0xca, 0x2f, 0x62, 0x00, 0x53, 0x9f, 0x82, 0x8a, + 0x00, 0x5a, 0xfb, 0x99, 0xde, 0xea, 0xed, 0x54, 0xea, 0x9a, 0x58, 0xff, 0x72, 0xeb, 0x09, 0xaf, + 0xd0, 0xd5, 0xea, 0xad, 0x4e, 0x5d, 0x67, 0xdf, 0x71, 0x24, 0x43, 0x7e, 0xb7, 0xae, 0x55, 0xd9, + 0xc2, 0xd0, 0x96, 0x04, 0x2a, 0x40, 0xb6, 0xda, 0xdb, 0xa9, 0xeb, 0x35, 0xb5, 0xd3, 0xe5, 0x95, + 0xcc, 0x56, 0x57, 0x6d, 0xd6, 0x79, 0x25, 0xb3, 0x59, 0xde, 0x92, 0x53, 0x14, 0xae, 0x59, 0x2f, + 0xd7, 0xe4, 0x34, 0x5d, 0xd7, 0x86, 0xaa, 0x75, 0xba, 0xfa, 0xd3, 0x72, 0xb3, 0x57, 0x97, 0x33, + 0x14, 0xbf, 0x59, 0x0e, 0xbf, 0xb3, 0x14, 0xad, 0xd5, 0x7d, 0x2c, 0x3e, 0x41, 0xf9, 0xbb, 0x38, + 0xac, 0x9e, 0xf5, 0xd6, 0x05, 0x75, 0x20, 0x7d, 0x68, 0x44, 0xe3, 0xd9, 0x4f, 0x2f, 0xf5, 0x56, + 0x66, 0xe3, 0x19, 0x65, 0x0e, 0x22, 0x27, 0x81, 0xc4, 0x8a, 0xd9, 0x18, 0x07, 0xfb, 0x69, 0xde, + 0xd7, 0xb3, 0xb7, 0xdc, 0xfc, 0x5d, 0xb7, 0xc0, 0xa4, 0xc4, 0x35, 0xec, 0x1b, 0x96, 0xed, 0x85, + 0x96, 0x85, 0xb1, 0xb9, 0xf6, 0xc7, 0x31, 0x48, 0xb2, 0x01, 0x50, 0x0b, 0x64, 0xcb, 0xb1, 0x7c, + 0xcb, 0xb0, 0x75, 0x17, 0x7b, 0xc4, 0x7e, 0x89, 0x4d, 0x61, 0xb5, 0x17, 0x2a, 0xa5, 0xad, 0x08, + 0x66, 0x4d, 0xf0, 0x86, 0x2f, 0x46, 0xe2, 0x17, 0x7f, 0x31, 0xf2, 0x0f, 0x31, 0x40, 0xa7, 0x5f, + 0xf5, 0xa0, 0x0a, 0x14, 0x7c, 0xd7, 0x18, 0x1c, 0x60, 0x53, 0xe7, 0x11, 0x09, 0x57, 0xe3, 0x12, + 0xc8, 0xbc, 0xe0, 0xe9, 0x88, 0xfc, 0xf9, 0xad, 0xe8, 0x2b, 0x52, 0xfc, 0x4a, 0x2c, 0x2e, 0x7e, + 0x3d, 0xf8, 0x01, 0x14, 0x67, 0xef, 0xed, 0xa9, 0x73, 0xda, 0xed, 0x55, 0x9a, 0x6a, 0x55, 0xbe, + 0x86, 0xde, 0x83, 0x1b, 0xfc, 0xb7, 0x5e, 0x6e, 0xd5, 0x58, 0x39, 0x5e, 0x74, 0xc5, 0x1e, 0x28, + 0x41, 0x62, 0xca, 0x1c, 0xd7, 0x2a, 0xc8, 0x8f, 0x9b, 0x4d, 0x7d, 0xb7, 0xd9, 0xeb, 0xf0, 0x3f, + 0x4f, 0x1f, 0xca, 0xd7, 0x2a, 0x1f, 0x7e, 0xf3, 0xab, 0x5b, 0xd7, 0xbe, 0x39, 0xb9, 0x15, 0xfb, + 0xe5, 0xc9, 0xad, 0xd8, 0xbf, 0x9c, 0xdc, 0x8a, 0xfd, 0xfb, 0xc9, 0xad, 0xd8, 0xcf, 0xff, 0xe3, + 0xd6, 0xb5, 0x9f, 0x65, 0x43, 0x4b, 0xfa, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, 0x06, 0x7b, 0x26, + 0xf7, 0x14, 0x30, 0x00, 0x00, } diff --git a/pkg/sql/distsqlpb/processors.proto b/pkg/sql/distsqlpb/processors.proto index e006c060822e..c00731df3c2a 100644 --- a/pkg/sql/distsqlpb/processors.proto +++ b/pkg/sql/distsqlpb/processors.proto @@ -577,6 +577,7 @@ message BackfillerSpec { Invalid = 0; Column = 1; Index = 2; + Check = 3; } optional Type type = 1 [(gogoproto.nullable) = false]; optional sqlbase.TableDescriptor table = 2 [(gogoproto.nullable) = false]; diff --git a/pkg/sql/distsqlrun/checkbackfiller.go b/pkg/sql/distsqlrun/checkbackfiller.go new file mode 100644 index 000000000000..258892124d91 --- /dev/null +++ b/pkg/sql/distsqlrun/checkbackfiller.go @@ -0,0 +1,97 @@ +// Copyright 2018 The Cockroach Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. + +package distsqlrun + +import ( + "context" + + "github.com/cockroachdb/cockroach/pkg/internal/client" + "github.com/cockroachdb/cockroach/pkg/roachpb" + "github.com/cockroachdb/cockroach/pkg/sql/backfill" + "github.com/cockroachdb/cockroach/pkg/sql/distsqlpb" + "github.com/cockroachdb/cockroach/pkg/sql/sqlbase" + "github.com/cockroachdb/cockroach/pkg/util/hlc" +) + +// indexBackfiller is a processor that backfills new indexes. +type checkBackfiller struct { + backfiller + + backfill.CheckBackfiller + + desc *sqlbase.ImmutableTableDescriptor +} + +var _ Processor = &checkBackfiller{} +var _ chunkBackfiller = &checkBackfiller{} + +func newCheckBackfiller( + flowCtx *FlowCtx, + processorID int32, + spec distsqlpb.BackfillerSpec, + post *distsqlpb.PostProcessSpec, + output RowReceiver, +) (*checkBackfiller, error) { + cb := &checkBackfiller{ + desc: sqlbase.NewImmutableTableDescriptor(spec.Table), + backfiller: backfiller{ + name: "Check", + filter: backfill.CheckMutationFilter, + flowCtx: flowCtx, + processorID: processorID, + output: output, + spec: spec, + }, + } + cb.backfiller.chunkBackfiller = cb + + if err := cb.CheckBackfiller.Init(cb.flowCtx.NewEvalCtx(), cb.desc); err != nil { + return nil, err + } + + return cb, nil +} + +func (cb *checkBackfiller) runChunk( + ctx context.Context, + mutations []sqlbase.DescriptorMutation, + sp roachpb.Span, + chunkSize int64, + readAsOf hlc.Timestamp, +) (roachpb.Key, error) { + var key roachpb.Key + err := cb.flowCtx.ClientDB.Txn(ctx, func(ctx context.Context, txn *client.Txn) error { + if cb.flowCtx.testingKnobs.RunBeforeBackfillChunk != nil { + if err := cb.flowCtx.testingKnobs.RunBeforeBackfillChunk(sp); err != nil { + return err + } + } + if cb.flowCtx.testingKnobs.RunAfterBackfillChunk != nil { + defer cb.flowCtx.testingKnobs.RunAfterBackfillChunk() + } + + var err error + key, err = cb.RunCheckBackfillChunk( + ctx, + txn, + cb.desc, + sp, + chunkSize, + false, /*traceKV*/ + ) + return err + }) + return key, err +} diff --git a/pkg/sql/distsqlrun/processors.go b/pkg/sql/distsqlrun/processors.go index 9001eb1bcd12..d31f65d5d42d 100644 --- a/pkg/sql/distsqlrun/processors.go +++ b/pkg/sql/distsqlrun/processors.go @@ -1073,6 +1073,8 @@ func newProcessor( return newIndexBackfiller(flowCtx, processorID, *core.Backfiller, post, outputs[0]) case distsqlpb.BackfillerSpec_Column: return newColumnBackfiller(flowCtx, processorID, *core.Backfiller, post, outputs[0]) + case distsqlpb.BackfillerSpec_Check: + return newCheckBackfiller(flowCtx, processorID, *core.Backfiller, post, outputs[0]) } } if core.Sampler != nil { diff --git a/pkg/sql/logictest/testdata/logic_test/alter_table b/pkg/sql/logictest/testdata/logic_test/alter_table index 922f5432d63c..1b59127d9837 100644 --- a/pkg/sql/logictest/testdata/logic_test/alter_table +++ b/pkg/sql/logictest/testdata/logic_test/alter_table @@ -103,6 +103,12 @@ ALTER TABLE t DROP CONSTRAINT check_a statement ok INSERT INTO t (a, f) VALUES (-2, 9) +statement error validation of CHECK "a > 0" failed on row: a=-2, f=9, b=NULL, c=NULL +ALTER TABLE t ADD CONSTRAINT check_a CHECK (a > 0) + +statement ok +DELETE FROM t WHERE a = -2 + statement ok ALTER TABLE t ADD CONSTRAINT check_a CHECK (a > 0) @@ -112,7 +118,7 @@ INSERT INTO t (a) VALUES (-3) query TTTTB SHOW CONSTRAINTS FROM t ---- -t check_a CHECK CHECK (a > 0) false +t check_a CHECK CHECK (a > 0) true t fk_f_ref_other FOREIGN KEY FOREIGN KEY (f) REFERENCES other (b) true t foo UNIQUE UNIQUE (b ASC) true t primary PRIMARY KEY PRIMARY KEY (a ASC) true @@ -127,8 +133,8 @@ ALTER TABLE t ADD CHECK (a > 0) query TTTTB SHOW CONSTRAINTS FROM t ---- -t check_a CHECK CHECK (a > 0) false -t check_a1 CHECK CHECK (a > 0) false +t check_a CHECK CHECK (a > 0) true +t check_a1 CHECK CHECK (a > 0) true t fk_f_ref_other FOREIGN KEY FOREIGN KEY (f) REFERENCES other (b) true t foo UNIQUE UNIQUE (b ASC) true t primary PRIMARY KEY PRIMARY KEY (a ASC) true @@ -136,11 +142,12 @@ t primary PRIMARY KEY PRIMARY KEY (a ASC) true statement error constraint "typo" does not exist ALTER TABLE t VALIDATE CONSTRAINT typo -statement error validation of CHECK "a > 0" failed on row: a=-2, f=9, b=NULL, c=NULL -ALTER TABLE t VALIDATE CONSTRAINT check_a +# TODO(erik): re-enable test when unvalidated checks can be added +#statement error validation of CHECK "a > 0" failed on row: a=-2, f=9, b=NULL, c=NULL +#ALTER TABLE t VALIDATE CONSTRAINT check_a -statement ok -DELETE FROM t WHERE a = -2 +#statement ok +#DELETE FROM t WHERE a = -2 statement ok ALTER TABLE t VALIDATE CONSTRAINT check_a @@ -149,7 +156,7 @@ query TTTTB SHOW CONSTRAINTS FROM t ---- t check_a CHECK CHECK (a > 0) true -t check_a1 CHECK CHECK (a > 0) false +t check_a1 CHECK CHECK (a > 0) true t fk_f_ref_other FOREIGN KEY FOREIGN KEY (f) REFERENCES other (b) true t foo UNIQUE UNIQUE (b ASC) true t primary PRIMARY KEY PRIMARY KEY (a ASC) true diff --git a/pkg/sql/logictest/testdata/logic_test/schema_change_in_txn b/pkg/sql/logictest/testdata/logic_test/schema_change_in_txn index 766b517c2ac1..352d3645bf57 100644 --- a/pkg/sql/logictest/testdata/logic_test/schema_change_in_txn +++ b/pkg/sql/logictest/testdata/logic_test/schema_change_in_txn @@ -777,3 +777,44 @@ ALTER TABLE orders2 VALIDATE CONSTRAINT fk_product_ref_products statement ok COMMIT + +subtest check_on_add_col + +statement ok +BEGIN + +statement ok +ALTER TABLE forlater ADD d INT + +statement ok +ALTER TABLE forlater ADD CONSTRAINT d_0 CHECK (d > 0) + +statement ok +COMMIT + +statement ok +BEGIN + +statement ok +ALTER TABLE forlater ADD e INT DEFAULT 0 + +statement ok +ALTER TABLE forlater ADD CONSTRAINT e_0 CHECK (e > 0) + +statement error pq: validation of CHECK "e > 0" failed on row: k='c', v='d', d=NULL, e=0 +COMMIT + +# Constraint e_0 was not added +query TTTTB +SHOW CONSTRAINTS FROM forlater +---- +forlater d_0 CHECK CHECK (d > 0) true +forlater primary PRIMARY KEY PRIMARY KEY (k ASC) true + +# Adding column e was rolled back +query TTBTTTB +SHOW COLUMNS FROM forlater +---- +k CHAR false NULL · {primary} false +v CHAR true NULL · {} false +d INT8 true NULL · {} false diff --git a/pkg/sql/schema_changer.go b/pkg/sql/schema_changer.go index 665782e6319c..8e993eee43a5 100644 --- a/pkg/sql/schema_changer.go +++ b/pkg/sql/schema_changer.go @@ -1112,7 +1112,7 @@ func (sc *SchemaChanger) reverseMutations(ctx context.Context, causingError erro _, err := sc.leaseMgr.Publish(ctx, sc.tableID, func(desc *sqlbase.MutableTableDescriptor) error { // Keep track of the column mutations being reversed so that indexes // referencing them can be dropped. - columns := make(map[string]struct{}) + columnIDs := make(map[sqlbase.ColumnID]struct{}) droppedMutations = nil for i, mutation := range desc.Mutations { @@ -1132,16 +1132,16 @@ func (sc *SchemaChanger) reverseMutations(ctx context.Context, causingError erro } log.Warningf(ctx, "reverse schema change mutation: %+v", mutation) - desc.Mutations[i], columns = sc.reverseMutation(mutation, false /*notStarted*/, columns) + desc.Mutations[i] = sc.reverseMutation(mutation, false /*notStarted*/, columnIDs) desc.Mutations[i].Rollback = true } // Delete all mutations that reference any of the reversed columns // by running a graph traversal of the mutations. - if len(columns) > 0 { + if len(columnIDs) > 0 { var err error - droppedMutations, err = sc.deleteIndexMutationsWithReversedColumns(ctx, desc, columns) + droppedMutations, err = sc.deleteMutationsWithReversedColumns(ctx, desc, columnIDs) if err != nil { return err } @@ -1282,33 +1282,47 @@ func (sc *SchemaChanger) createRollbackJob( return nil, fmt.Errorf("no job found for table %d mutation %d", sc.tableID, sc.mutationID) } -// deleteIndexMutationsWithReversedColumns deletes mutations with a +// deleteMutationsWithReversedColumns deletes mutations with a // different mutationID than the schema changer and with an index that // references one of the reversed columns. Execute this as a breadth // first search graph traversal. -func (sc *SchemaChanger) deleteIndexMutationsWithReversedColumns( - ctx context.Context, desc *sqlbase.MutableTableDescriptor, columns map[string]struct{}, +func (sc *SchemaChanger) deleteMutationsWithReversedColumns( + ctx context.Context, + desc *sqlbase.MutableTableDescriptor, + columnIDs map[sqlbase.ColumnID]struct{}, ) (map[sqlbase.MutationID]struct{}, error) { dropMutations := make(map[sqlbase.MutationID]struct{}) // Run breadth first search traversal that reverses mutations + + drop := func(mutation *sqlbase.DescriptorMutation) { + // Such an mutation has to be with direction ADD and in the + // DELETE_ONLY state. Live indexes/checks referencing live + // columns cannot be deleted and thus never have direction + // DROP. All mutations with the ADD direction start off in + // the DELETE_ONLY state. + if mutation.Direction != sqlbase.DescriptorMutation_ADD || + mutation.State != sqlbase.DescriptorMutation_DELETE_ONLY { + panic(fmt.Sprintf("mutation in bad state: %+v", mutation)) + } + log.Warningf(ctx, "drop schema change mutation: %+v", mutation) + dropMutations[mutation.MutationID] = struct{}{} + } + for { start := len(dropMutations) for _, mutation := range desc.Mutations { if mutation.MutationID != sc.mutationID { if idx := mutation.GetIndex(); idx != nil { - for _, name := range idx.ColumnNames { - if _, ok := columns[name]; ok { - // Such an index mutation has to be with direction ADD and - // in the DELETE_ONLY state. Live indexes referencing live - // columns cannot be deleted and thus never have direction - // DROP. All mutations with the ADD direction start off in - // the DELETE_ONLY state. - if mutation.Direction != sqlbase.DescriptorMutation_ADD || - mutation.State != sqlbase.DescriptorMutation_DELETE_ONLY { - panic(fmt.Sprintf("mutation in bad state: %+v", mutation)) - } - log.Warningf(ctx, "drop schema change mutation: %+v", mutation) - dropMutations[mutation.MutationID] = struct{}{} + for _, id := range idx.ColumnIDs { + if _, ok := columnIDs[id]; ok { + drop(&mutation) + break + } + } + } else if ck := mutation.GetCheck(); ck != nil { + for _, id := range ck.ColumnIDs { + if _, ok := columnIDs[id]; ok { + drop(&mutation) break } } @@ -1327,7 +1341,7 @@ func (sc *SchemaChanger) deleteIndexMutationsWithReversedColumns( // Reverse mutation. Update columns to reflect additional // columns that have been purged. This mutation doesn't need // a rollback because it was not started. - mutation, columns = sc.reverseMutation(mutation, true /*notStarted*/, columns) + mutation = sc.reverseMutation(mutation, true /*notStarted*/, columnIDs) // Mark as complete because this mutation needs no backfill. if err := desc.MakeMutationComplete(mutation); err != nil { return nil, err @@ -1346,14 +1360,14 @@ func (sc *SchemaChanger) deleteIndexMutationsWithReversedColumns( // notStarted is set to true only if the schema change state machine // was not started for the mutation. func (sc *SchemaChanger) reverseMutation( - mutation sqlbase.DescriptorMutation, notStarted bool, columns map[string]struct{}, -) (sqlbase.DescriptorMutation, map[string]struct{}) { + mutation sqlbase.DescriptorMutation, notStarted bool, columnIDs map[sqlbase.ColumnID]struct{}, +) sqlbase.DescriptorMutation { switch mutation.Direction { case sqlbase.DescriptorMutation_ADD: mutation.Direction = sqlbase.DescriptorMutation_DROP // A column ADD being reversed gets placed in the map. if col := mutation.GetColumn(); col != nil { - columns[col.Name] = struct{}{} + columnIDs[col.ID] = struct{}{} } if notStarted && mutation.State != sqlbase.DescriptorMutation_DELETE_ONLY { panic(fmt.Sprintf("mutation in bad state: %+v", mutation)) @@ -1365,7 +1379,7 @@ func (sc *SchemaChanger) reverseMutation( panic(fmt.Sprintf("mutation in bad state: %+v", mutation)) } } - return mutation, columns + return mutation } // TestingSchemaChangerCollection is an exported (for testing) version of diff --git a/pkg/sql/schema_changer_test.go b/pkg/sql/schema_changer_test.go index c2158eaa79af..1cd73442936e 100644 --- a/pkg/sql/schema_changer_test.go +++ b/pkg/sql/schema_changer_test.go @@ -1222,7 +1222,8 @@ func dropIndexSchemaChange( } } -// TestDropColumn tests that dropped columns properly drop their Table's CHECK constraints +// TestDropColumn tests that dropped columns properly drop their Table's CHECK constraints, +// or an error occurs if a CHECK constraint is being added on it. func TestDropColumn(t *testing.T) { defer leaktest.AfterTest(t)() params, _ := tests.CreateTestServerParams() @@ -1266,6 +1267,22 @@ CREATE TABLE t.test ( if tableDesc.Checks[0].Name != "check_ab" { t.Fatalf("Only check_ab should remain, got: %s ", tableDesc.Checks[0].Name) } + + // Test that a constraint being added prevents the column from being dropped. + txn, err := sqlDB.Begin() + if err != nil { + t.Fatal(err) + } + if _, err := txn.Exec(`ALTER TABLE t.test ADD CONSTRAINT check_bk CHECK (b >= k)`); err != nil { + t.Fatal(err) + } + if _, err := txn.Exec(`ALTER TABLE t.test DROP b`); !testutils.IsError(err, + "referencing constraint \"check_bk\" in the middle of being added") { + t.Fatalf("err = %+v", err) + } + if err := txn.Rollback(); err != nil { + t.Fatal(err) + } } // Test schema changes are retried and complete properly. This also checks @@ -2557,6 +2574,8 @@ INSERT INTO t.kv VALUES ('a', 'b'); {`select-create`, `SELECT * FROM t.kv`, `CREATE INDEX bar ON t.kv (v)`, ``}, {`index-on-add-col`, `ALTER TABLE t.kv ADD i INT`, `CREATE INDEX foobar ON t.kv (i)`, ``}, + {`check-on-add-col`, `ALTER TABLE t.kv ADD j INT`, + `ALTER TABLE t.kv ADD CONSTRAINT ck_j CHECK (j >= 0)`, ``}, } for _, testCase := range testCases { @@ -3416,7 +3435,7 @@ CREATE DATABASE t; t.Fatal(err) } - if _, err := tx.Exec(`CREATE TABLE t.testing (k INT PRIMARY KEY, v INT, INDEX foo(v));`); err != nil { + if _, err := tx.Exec(`CREATE TABLE t.testing (k INT PRIMARY KEY, v INT, INDEX foo(v), CONSTRAINT ck_k CHECK (k >= 0));`); err != nil { t.Fatal(err) } @@ -3433,9 +3452,9 @@ CREATE DATABASE t; t.Fatal(err) } - // Run schema changes that are execute Column and Index backfills. + // Run schema changes that are execute Column, Check and Index backfills. if _, err := tx.Exec(` -ALTER TABLE t.test ADD COLUMN c INT AS (v + 4) STORED, ADD COLUMN d INT DEFAULT 23, ADD CONSTRAINT bar UNIQUE (c) +ALTER TABLE t.test ADD COLUMN c INT AS (v + 4) STORED, ADD COLUMN d INT DEFAULT 23, ADD CONSTRAINT bar UNIQUE (c), DROP CONSTRAINT ck_k, ADD CONSTRAINT ck_c CHECK (c >= 4) `); err != nil { t.Fatal(err) } @@ -3487,6 +3506,16 @@ ALTER TABLE t.test ADD COLUMN c INT AS (v + 4) STORED, ADD COLUMN d INT DEFAULT t.Fatalf("read the wrong number of rows: e = %d, v = %d", eCount, count) } + // Constraint ck_k dropped, ck_c public. + if _, err := sqlDB.Exec(fmt.Sprintf("INSERT INTO t.test (k, v) VALUES (-1, %d)", maxValue+10)); err != nil { + t.Fatal(err) + } + q := fmt.Sprintf("INSERT INTO t.test (k, v) VALUES (%d, -1)", maxValue+10) + if _, err := sqlDB.Exec(q); !testutils.IsError(err, + `failed to satisfy CHECK constraint \(c >= 4\)`) { + t.Fatalf("err = %+v", err) + } + // The descriptor version hasn't changed. tableDesc := sqlbase.GetTableDescriptor(kvDB, "t", "test") if tableDesc.Version != 1 { @@ -3494,8 +3523,8 @@ ALTER TABLE t.test ADD COLUMN c INT AS (v + 4) STORED, ADD COLUMN d INT DEFAULT } } -// TestCancelSchemaChange tests that a CANCEL JOB run midway through column -// and index backfills is canceled. +// TestCancelSchemaChange tests that a CANCEL JOB run midway through column, +// index, or check backfill is canceled. func TestCancelSchemaChange(t *testing.T) { defer leaktest.AfterTest(t)() @@ -3587,6 +3616,10 @@ func TestCancelSchemaChange(t *testing.T) { false, false}, {`CREATE INDEX foo ON t.public.test (v)`, false, true}, + {`ALTER TABLE t.public.test ADD CONSTRAINT ck_k CHECK (k >= 0)`, + false, false}, + {`ALTER TABLE t.public.test ADD CONSTRAINT ck_v CHECK (v >= 0)`, + true, false}, } idx := 0 @@ -3669,19 +3702,29 @@ func TestCancelSchemaChange(t *testing.T) { t.Fatalf("read the wrong number of rows: e = %d, v = %d", eCount, count) } + // Verify that only constraint `ck_k` is active. + if _, err := db.Exec(`INSERT INTO t.test (k, v) VALUES (-1, 0)`); !testutils.IsError(err, + `failed to satisfy CHECK constraint \(k >= 0\)`) { + t.Fatalf("err = %+v", err) + } + // ck_v is absent. + if _, err := db.Exec(`INSERT INTO t.test (k, v) VALUES (999, -1)`); err != nil { + t.Fatal(err) + } + // Verify that the data from the canceled CREATE INDEX is cleaned up. atomic.StoreUint32(&enableAsyncSchemaChanges, 1) if _, err := addImmediateGCZoneConfig(db, tableDesc.ID); err != nil { t.Fatal(err) } testutils.SucceedsSoon(t, func() error { - return checkTableKeyCount(ctx, kvDB, 3, maxValue) + return checkTableKeyCount(ctx, kvDB, 3, maxValue+1) }) } // This test checks that when a transaction containing schema changes // needs to be retried it gets retried internal to cockroach. This test -// currently fails because a schema changeg transaction is not retried. +// currently fails because a schema change transaction is not retried. func TestSchemaChangeRetryError(t *testing.T) { defer leaktest.AfterTest(t)() const numNodes = 3 diff --git a/pkg/sql/sqlbase/check.go b/pkg/sql/sqlbase/check.go index 6b831cb356a0..382587f1a1ce 100644 --- a/pkg/sql/sqlbase/check.go +++ b/pkg/sql/sqlbase/check.go @@ -19,6 +19,7 @@ import ( "github.com/cockroachdb/cockroach/pkg/sql/parser" "github.com/cockroachdb/cockroach/pkg/sql/pgwire/pgerror" + "github.com/cockroachdb/cockroach/pkg/sql/sem/transform" "github.com/cockroachdb/cockroach/pkg/sql/sem/tree" "github.com/cockroachdb/cockroach/pkg/sql/sem/types" "github.com/pkg/errors" @@ -46,6 +47,61 @@ type AnalyzeExprFunction func( typingContext string, ) (tree.TypedExpr, error) +// MakeCheckExprs returns a slice of typed check expressions for the +// slice of input check constraint descriptors. +// The length of the result slice matches the length of the input +// constraint descriptors. +func MakeCheckExprs( + checks []TableDescriptor_CheckConstraint, + tn *tree.TableName, + cols []ColumnDescriptor, + txCtx *transform.ExprTransformContext, + evalCtx *tree.EvalContext, +) ([]tree.TypedExpr, error) { + typedExprs := make([]tree.TypedExpr, 0, len(checks)) + + exprStrings := make([]string, 0, len(cols)) + for _, ck := range checks { + exprStrings = append(exprStrings, ck.Expr) + } + exprs, err := parser.ParseExprs(exprStrings) + if err != nil { + return nil, err + } + + // We need an ivarHelper and sourceInfo for type checking that each + // expressions results in a boolean. + iv := &descContainer{cols} + ivarHelper := tree.MakeIndexedVarHelper(iv, len(cols)) + + sourceInfo := NewSourceInfoForSingleTable( + *tn, ResultColumnsFromColDescs(cols), + ) + + semaCtx := tree.MakeSemaContext(false) + semaCtx.IVarContainer = iv + + for _, raw := range exprs { + expr, _, _, err := ResolveNames(raw, + MakeMultiSourceInfo(sourceInfo), + ivarHelper, evalCtx.SessionData.SearchPath) + if err != nil { + return nil, err + } + + typedExpr, err := tree.TypeCheck(expr, &semaCtx, types.Bool) + if err != nil { + return nil, err + } + if typedExpr, err = txCtx.NormalizeExpr(evalCtx, typedExpr); err != nil { + return nil, err + } + typedExprs = append(typedExprs, typedExpr) + } + + return typedExprs, nil +} + // Init initializes the CheckHelper. This step should be done during planning. func (c *CheckHelper) Init( ctx context.Context, @@ -53,18 +109,19 @@ func (c *CheckHelper) Init( tn *tree.TableName, tableDesc *ImmutableTableDescriptor, ) error { - if len(tableDesc.Checks) == 0 { + checks := tableDesc.WritableChecks() + if len(checks) == 0 { return nil } - c.cols = tableDesc.Columns + c.cols = tableDesc.WritableColumns() c.sourceInfo = NewSourceInfoForSingleTable( - *tn, ResultColumnsFromColDescs(tableDesc.Columns), + *tn, ResultColumnsFromColDescs(tableDesc.WritableColumns()), ) - c.Exprs = make([]tree.TypedExpr, len(tableDesc.Checks)) - exprStrings := make([]string, len(tableDesc.Checks)) - for i, check := range tableDesc.Checks { + c.Exprs = make([]tree.TypedExpr, len(checks)) + exprStrings := make([]string, len(checks)) + for i, check := range checks { exprStrings[i] = check.Expr } exprs, err := parser.ParseExprs(exprStrings) diff --git a/pkg/sql/sqlbase/computed_exprs.go b/pkg/sql/sqlbase/computed_exprs.go index 671ff74e6bea..d584d0f035fa 100644 --- a/pkg/sql/sqlbase/computed_exprs.go +++ b/pkg/sql/sqlbase/computed_exprs.go @@ -59,7 +59,8 @@ func (*RowIndexedVarContainer) IndexedVarNodeFormatter(idx int) tree.NodeFormatt } // descContainer is a helper type that implements tree.IndexedVarContainer; it -// is used to type check computed columns and does not support evaluation. +// is used to type check computed columns and check constraints. It does not +// support evaluation. type descContainer struct { cols []ColumnDescriptor } diff --git a/pkg/sql/sqlbase/structured.go b/pkg/sql/sqlbase/structured.go index 0b1d960a7a1c..c400c5801d55 100644 --- a/pkg/sql/sqlbase/structured.go +++ b/pkg/sql/sqlbase/structured.go @@ -118,6 +118,10 @@ type MutableTableDescriptor struct { type ImmutableTableDescriptor struct { TableDescriptor + // publicAndNonPublicChecks is a list of public and non-public check constraints. + // It is partitioned by the state of the index: public, write-only, delete-only + publicAndNonPublicChecks []*TableDescriptor_CheckConstraint + // publicAndNonPublicCols is a list of public and non-public columns. // It is partitioned by the state of the column: public, write-only, delete-only publicAndNonPublicCols []ColumnDescriptor @@ -126,6 +130,7 @@ type ImmutableTableDescriptor struct { // It is partitioned by the state of the index: public, write-only, delete-only publicAndNonPublicIndexes []IndexDescriptor + writeOnlyCheckCount int writeOnlyColCount int writeOnlyIndexCount int @@ -196,6 +201,7 @@ func NewMutableExistingTableDescriptor(tbl TableDescriptor) *MutableTableDescrip // NewImmutableTableDescriptor returns a ImmutableTableDescriptor from the // given TableDescriptor. func NewImmutableTableDescriptor(tbl TableDescriptor) *ImmutableTableDescriptor { + publicAndNonPublicChecks := tbl.Checks publicAndNonPublicCols := tbl.Columns publicAndNonPublicIndexes := tbl.Indexes @@ -204,10 +210,12 @@ func NewImmutableTableDescriptor(tbl TableDescriptor) *ImmutableTableDescriptor desc := &ImmutableTableDescriptor{TableDescriptor: tbl} if len(tbl.Mutations) > 0 { + publicAndNonPublicChecks = make([]*TableDescriptor_CheckConstraint, 0, len(tbl.Checks)+len(tbl.Mutations)) publicAndNonPublicCols = make([]ColumnDescriptor, 0, len(tbl.Columns)+len(tbl.Mutations)) publicAndNonPublicIndexes = make([]IndexDescriptor, 0, len(tbl.Indexes)+len(tbl.Mutations)) readableCols = make([]ColumnDescriptor, 0, len(tbl.Columns)+len(tbl.Mutations)) + publicAndNonPublicChecks = append(publicAndNonPublicChecks, tbl.Checks...) publicAndNonPublicCols = append(publicAndNonPublicCols, tbl.Columns...) publicAndNonPublicIndexes = append(publicAndNonPublicIndexes, tbl.Indexes...) readableCols = append(readableCols, tbl.Columns...) @@ -223,6 +231,9 @@ func NewImmutableTableDescriptor(tbl TableDescriptor) *ImmutableTableDescriptor } else if col := m.GetColumn(); col != nil { publicAndNonPublicCols = append(publicAndNonPublicCols, *col) desc.writeOnlyColCount++ + } else if ck := m.GetCheck(); ck != nil { + publicAndNonPublicChecks = append(publicAndNonPublicChecks, ck) + desc.writeOnlyCheckCount++ } } } @@ -234,6 +245,8 @@ func NewImmutableTableDescriptor(tbl TableDescriptor) *ImmutableTableDescriptor publicAndNonPublicIndexes = append(publicAndNonPublicIndexes, *idx) } else if col := m.GetColumn(); col != nil { publicAndNonPublicCols = append(publicAndNonPublicCols, *col) + } else if ck := m.GetCheck(); ck != nil { + publicAndNonPublicChecks = append(publicAndNonPublicChecks, ck) } } } @@ -248,6 +261,7 @@ func NewImmutableTableDescriptor(tbl TableDescriptor) *ImmutableTableDescriptor } desc.ReadableColumns = readableCols + desc.publicAndNonPublicChecks = publicAndNonPublicChecks desc.publicAndNonPublicCols = publicAndNonPublicCols desc.publicAndNonPublicIndexes = publicAndNonPublicIndexes @@ -534,9 +548,9 @@ func (desc *TableDescriptor) KeysPerRow(indexID IndexID) int { return 1 } -// allNonDropColumns returns all the columns, including those being added +// AllNonDropColumns returns all the columns, including those being added // in the mutations. -func (desc *TableDescriptor) allNonDropColumns() []ColumnDescriptor { +func (desc *TableDescriptor) AllNonDropColumns() []ColumnDescriptor { cols := make([]ColumnDescriptor, 0, len(desc.Columns)+len(desc.Mutations)) cols = append(cols, desc.Columns...) for _, m := range desc.Mutations { @@ -567,6 +581,21 @@ func (desc *TableDescriptor) AllNonDropIndexes() []IndexDescriptor { return indexes } +// allNonDropChecks returns all the checks, including those being added +// in the mutations. +func (desc *TableDescriptor) allNonDropChecks() []*TableDescriptor_CheckConstraint { + checks := make([]*TableDescriptor_CheckConstraint, 0, len(desc.Checks)+len(desc.Mutations)) + checks = append(checks, desc.Checks...) + for _, m := range desc.Mutations { + if ck := m.GetCheck(); ck != nil { + if m.Direction == DescriptorMutation_ADD { + checks = append(checks, ck) + } + } + } + return checks +} + // ForeachNonDropIndex runs a function on all indexes, including those being // added in the mutations. func (desc *TableDescriptor) ForeachNonDropIndex(f func(*IndexDescriptor) error) error { @@ -1214,7 +1243,7 @@ func (desc *TableDescriptor) ValidateTable(st *cluster.Settings) error { columnNames := make(map[string]ColumnID, len(desc.Columns)) columnIDs := make(map[ColumnID]string, len(desc.Columns)) - for _, column := range desc.allNonDropColumns() { + for _, column := range desc.AllNonDropColumns() { if err := validateName(column.Name, "column"); err != nil { return err } @@ -1269,6 +1298,11 @@ func (desc *TableDescriptor) ValidateTable(st *cluster.Settings) error { idx := desc.Index return errors.Errorf("mutation in state %s, direction %s, index %s, id %v", m.State, m.Direction, idx.Name, idx.ID) } + case *DescriptorMutation_Check: + if unSetEnums { + ck := desc.Check + return errors.Errorf("mutation in state %s, direction %s, check %s", m.State, m.Direction, ck.Name) + } default: return errors.Errorf("mutation in state %s, direction %s, and no column/index descriptor", m.State, m.Direction) } @@ -1716,7 +1750,7 @@ func notIndexableError(cols []ColumnDescriptor, inverted bool) error { func checkColumnsValidForIndex(tableDesc *MutableTableDescriptor, indexColNames []string) error { invalidColumns := make([]ColumnDescriptor, 0, len(indexColNames)) for _, indexCol := range indexColNames { - for _, col := range tableDesc.allNonDropColumns() { + for _, col := range tableDesc.AllNonDropColumns() { if col.Name == indexCol { if !columnTypeIsIndexable(col.Type) { invalidColumns = append(invalidColumns, col) @@ -1738,7 +1772,7 @@ func checkColumnsValidForInvertedIndex( } invalidColumns := make([]ColumnDescriptor, 0, len(indexColNames)) for _, indexCol := range indexColNames { - for _, col := range tableDesc.allNonDropColumns() { + for _, col := range tableDesc.AllNonDropColumns() { if col.Name == indexCol { if !columnTypeIsInvertedIndexable(col.Type) { invalidColumns = append(invalidColumns, col) @@ -1752,6 +1786,11 @@ func checkColumnsValidForInvertedIndex( return nil } +// AddCheck adds a check constraint to the table. +func (desc *MutableTableDescriptor) AddCheck(ck TableDescriptor_CheckConstraint) { + desc.Checks = append(desc.Checks, &ck) +} + // AddColumn adds a column to the table. func (desc *MutableTableDescriptor) AddColumn(col ColumnDescriptor) { desc.Columns = append(desc.Columns, col) @@ -2018,6 +2057,21 @@ func (desc *ImmutableTableDescriptor) FindReadableColumnByID( return nil, false, fmt.Errorf("column-id \"%d\" does not exist", id) } +// LabeledRowValues returns a formatted string containing a row's values +// and the column names. +func LabeledRowValues(cols []ColumnDescriptor, values tree.Datums) string { + var s bytes.Buffer + for i := range cols { + if i != 0 { + s.WriteString(`, `) + } + s.WriteString(cols[i].Name) + s.WriteString(`=`) + s.WriteString(values[i].String()) + } + return s.String() +} + // FindFamilyByID finds the family with specified ID. func (desc *TableDescriptor) FindFamilyByID(id FamilyID) (*ColumnFamilyDescriptor, error) { for i, f := range desc.Families { @@ -2157,6 +2211,12 @@ func (desc *MutableTableDescriptor) MakeMutationComplete(m DescriptorMutation) e if err := desc.AddIndex(*t.Index, false); err != nil { return err } + + case *DescriptorMutation_Check: + if t.Check.Validity == ConstraintValidity_Validating { + t.Check.Validity = ConstraintValidity_Validated + } + desc.AddCheck(*t.Check) } case DescriptorMutation_DROP: @@ -2164,12 +2224,31 @@ func (desc *MutableTableDescriptor) MakeMutationComplete(m DescriptorMutation) e case *DescriptorMutation_Column: desc.RemoveColumnFromFamily(t.Column.ID) } - // Nothing else to be done. The column/index was already removed from the - // set of column/index descriptors at mutation creation time. + // Nothing else to be done. The column/index/check was already removed from the + // set of column/index/check descriptors at mutation creation time. } return nil } +// MaybeAddCheckDropMutation adds a drop check constraint mutation to desc.Mutations +// if the constraint has been validated. +func (desc *MutableTableDescriptor) MaybeAddCheckDropMutation(c TableDescriptor_CheckConstraint) { + if c.Validity == ConstraintValidity_Validated { + // We cannot transition immediately to absent if the constraint has + // been validated because nodes on the current version expect every + // row to conform to the constraint. + desc.AddCheckMutation(c, DescriptorMutation_DROP) + } +} + +// AddCheckMutation adds a check mutation to desc.Mutations. +func (desc *MutableTableDescriptor) AddCheckMutation( + c TableDescriptor_CheckConstraint, direction DescriptorMutation_Direction, +) { + m := DescriptorMutation{Descriptor_: &DescriptorMutation_Check{Check: &c}, Direction: direction} + desc.addMutation(m) +} + // AddColumnMutation adds a column mutation to desc.Mutations. func (desc *MutableTableDescriptor) AddColumnMutation( c ColumnDescriptor, direction DescriptorMutation_Direction, @@ -2458,7 +2537,7 @@ func (desc *ColumnDescriptor) SQLString() string { // binaries will not, in which case this needs to be computed when requested. // // TODO(nvanbenschoten): we can remove this in v2.1 and replace it with a sql -// migration to backfill all TableDescriptor_CheckConstraint.ColumnIDs slices. +// migration to backfill all CheckConstraint.ColumnIDs slices. // See #22322. func (cc *TableDescriptor_CheckConstraint) ColumnsUsed(desc *TableDescriptor) ([]ColumnID, error) { if len(cc.ColumnIDs) > 0 { @@ -2479,8 +2558,8 @@ func (cc *TableDescriptor_CheckConstraint) ColumnsUsed(desc *TableDescriptor) ([ return err, false, nil } if c, ok := v.(*tree.ColumnItem); ok { - col, err := desc.FindActiveColumnByName(string(c.ColumnName)) - if err != nil { + col, dropped, err := desc.FindColumnByName(c.ColumnName) + if err != nil || dropped { return errors.Errorf("column %q not found for constraint %q", c.ColumnName, parsed.String()), false, nil } @@ -2702,7 +2781,7 @@ func (desc *TableDescriptor) FindAllReferences() (map[ID]struct{}, error) { return nil, err } - for _, c := range desc.allNonDropColumns() { + for _, c := range desc.AllNonDropColumns() { for _, id := range c.UsesSequenceIds { refs[id] = struct{}{} } @@ -2718,6 +2797,11 @@ func (desc *TableDescriptor) FindAllReferences() (map[ID]struct{}, error) { return refs, nil } +// WritableChecks returns a list of public and write-only mutation check constraints. +func (desc *ImmutableTableDescriptor) WritableChecks() []*TableDescriptor_CheckConstraint { + return desc.publicAndNonPublicChecks[:len(desc.Checks)+desc.writeOnlyCheckCount] +} + // WritableColumns returns a list of public and write-only mutation columns. func (desc *ImmutableTableDescriptor) WritableColumns() []ColumnDescriptor { return desc.publicAndNonPublicCols[:len(desc.Columns)+desc.writeOnlyColCount] diff --git a/pkg/sql/sqlbase/structured.pb.go b/pkg/sql/sqlbase/structured.pb.go index 2e6bd980c2f0..90fcfde65b65 100644 --- a/pkg/sql/sqlbase/structured.pb.go +++ b/pkg/sql/sqlbase/structured.pb.go @@ -28,15 +28,18 @@ type ConstraintValidity int32 const ( ConstraintValidity_Validated ConstraintValidity = 0 ConstraintValidity_Unvalidated ConstraintValidity = 1 + ConstraintValidity_Validating ConstraintValidity = 2 ) var ConstraintValidity_name = map[int32]string{ 0: "Validated", 1: "Unvalidated", + 2: "Validating", } var ConstraintValidity_value = map[string]int32{ "Validated": 0, "Unvalidated": 1, + "Validating": 2, } func (x ConstraintValidity) Enum() *ConstraintValidity { @@ -56,7 +59,7 @@ func (x *ConstraintValidity) UnmarshalJSON(data []byte) error { return nil } func (ConstraintValidity) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{0} + return fileDescriptor_structured_1343287f2a3f2062, []int{0} } // These mirror the types supported by sql/coltypes. @@ -164,7 +167,7 @@ func (x *ColumnType_SemanticType) UnmarshalJSON(data []byte) error { return nil } func (ColumnType_SemanticType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{0, 0} + return fileDescriptor_structured_1343287f2a3f2062, []int{0, 0} } type ColumnType_VisibleType int32 @@ -224,7 +227,7 @@ func (x *ColumnType_VisibleType) UnmarshalJSON(data []byte) error { return nil } func (ColumnType_VisibleType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{0, 1} + return fileDescriptor_structured_1343287f2a3f2062, []int{0, 1} } type ForeignKeyReference_Action int32 @@ -269,7 +272,7 @@ func (x *ForeignKeyReference_Action) UnmarshalJSON(data []byte) error { return nil } func (ForeignKeyReference_Action) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{1, 0} + return fileDescriptor_structured_1343287f2a3f2062, []int{1, 0} } // Match is the algorithm used to compare composite keys. @@ -306,7 +309,7 @@ func (x *ForeignKeyReference_Match) UnmarshalJSON(data []byte) error { return nil } func (ForeignKeyReference_Match) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{1, 1} + return fileDescriptor_structured_1343287f2a3f2062, []int{1, 1} } // The direction of a column in the index. @@ -343,7 +346,7 @@ func (x *IndexDescriptor_Direction) UnmarshalJSON(data []byte) error { return nil } func (IndexDescriptor_Direction) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{6, 0} + return fileDescriptor_structured_1343287f2a3f2062, []int{6, 0} } // The direction of a column in the index. @@ -380,7 +383,7 @@ func (x *IndexDescriptor_Type) UnmarshalJSON(data []byte) error { return nil } func (IndexDescriptor_Type) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{6, 1} + return fileDescriptor_structured_1343287f2a3f2062, []int{6, 1} } // A descriptor within a mutation is unavailable for reads, writes @@ -445,7 +448,7 @@ func (x *DescriptorMutation_State) UnmarshalJSON(data []byte) error { return nil } func (DescriptorMutation_State) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{7, 0} + return fileDescriptor_structured_1343287f2a3f2062, []int{7, 0} } // Direction of mutation. @@ -488,7 +491,7 @@ func (x *DescriptorMutation_Direction) UnmarshalJSON(data []byte) error { return nil } func (DescriptorMutation_Direction) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{7, 1} + return fileDescriptor_structured_1343287f2a3f2062, []int{7, 1} } // State is set if this TableDescriptor is in the process of being added or deleted. @@ -535,7 +538,7 @@ func (x *TableDescriptor_State) UnmarshalJSON(data []byte) error { return nil } func (TableDescriptor_State) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{8, 0} + return fileDescriptor_structured_1343287f2a3f2062, []int{8, 0} } // AuditMode indicates which auditing actions to take when this table is used. @@ -572,7 +575,7 @@ func (x *TableDescriptor_AuditMode) UnmarshalJSON(data []byte) error { return nil } func (TableDescriptor_AuditMode) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{8, 1} + return fileDescriptor_structured_1343287f2a3f2062, []int{8, 1} } type ColumnType struct { @@ -604,7 +607,7 @@ func (m *ColumnType) Reset() { *m = ColumnType{} } func (m *ColumnType) String() string { return proto.CompactTextString(m) } func (*ColumnType) ProtoMessage() {} func (*ColumnType) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{0} + return fileDescriptor_structured_1343287f2a3f2062, []int{0} } func (m *ColumnType) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -650,7 +653,7 @@ func (m *ForeignKeyReference) Reset() { *m = ForeignKeyReference{} } func (m *ForeignKeyReference) String() string { return proto.CompactTextString(m) } func (*ForeignKeyReference) ProtoMessage() {} func (*ForeignKeyReference) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{1} + return fileDescriptor_structured_1343287f2a3f2062, []int{1} } func (m *ForeignKeyReference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -697,7 +700,7 @@ func (m *ColumnDescriptor) Reset() { *m = ColumnDescriptor{} } func (m *ColumnDescriptor) String() string { return proto.CompactTextString(m) } func (*ColumnDescriptor) ProtoMessage() {} func (*ColumnDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{2} + return fileDescriptor_structured_1343287f2a3f2062, []int{2} } func (m *ColumnDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -750,7 +753,7 @@ func (m *ColumnFamilyDescriptor) Reset() { *m = ColumnFamilyDescriptor{} func (m *ColumnFamilyDescriptor) String() string { return proto.CompactTextString(m) } func (*ColumnFamilyDescriptor) ProtoMessage() {} func (*ColumnFamilyDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{3} + return fileDescriptor_structured_1343287f2a3f2062, []int{3} } func (m *ColumnFamilyDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -798,7 +801,7 @@ func (m *InterleaveDescriptor) Reset() { *m = InterleaveDescriptor{} } func (m *InterleaveDescriptor) String() string { return proto.CompactTextString(m) } func (*InterleaveDescriptor) ProtoMessage() {} func (*InterleaveDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{4} + return fileDescriptor_structured_1343287f2a3f2062, []int{4} } func (m *InterleaveDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -844,7 +847,7 @@ func (m *InterleaveDescriptor_Ancestor) Reset() { *m = InterleaveDescrip func (m *InterleaveDescriptor_Ancestor) String() string { return proto.CompactTextString(m) } func (*InterleaveDescriptor_Ancestor) ProtoMessage() {} func (*InterleaveDescriptor_Ancestor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{4, 0} + return fileDescriptor_structured_1343287f2a3f2062, []int{4, 0} } func (m *InterleaveDescriptor_Ancestor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -891,7 +894,7 @@ func (m *PartitioningDescriptor) Reset() { *m = PartitioningDescriptor{} func (m *PartitioningDescriptor) String() string { return proto.CompactTextString(m) } func (*PartitioningDescriptor) ProtoMessage() {} func (*PartitioningDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{5} + return fileDescriptor_structured_1343287f2a3f2062, []int{5} } func (m *PartitioningDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -936,7 +939,7 @@ func (m *PartitioningDescriptor_List) Reset() { *m = PartitioningDescrip func (m *PartitioningDescriptor_List) String() string { return proto.CompactTextString(m) } func (*PartitioningDescriptor_List) ProtoMessage() {} func (*PartitioningDescriptor_List) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{5, 0} + return fileDescriptor_structured_1343287f2a3f2062, []int{5, 0} } func (m *PartitioningDescriptor_List) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -983,7 +986,7 @@ func (m *PartitioningDescriptor_Range) Reset() { *m = PartitioningDescri func (m *PartitioningDescriptor_Range) String() string { return proto.CompactTextString(m) } func (*PartitioningDescriptor_Range) ProtoMessage() {} func (*PartitioningDescriptor_Range) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{5, 1} + return fileDescriptor_structured_1343287f2a3f2062, []int{5, 1} } func (m *PartitioningDescriptor_Range) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1117,7 +1120,7 @@ func (m *IndexDescriptor) Reset() { *m = IndexDescriptor{} } func (m *IndexDescriptor) String() string { return proto.CompactTextString(m) } func (*IndexDescriptor) ProtoMessage() {} func (*IndexDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{6} + return fileDescriptor_structured_1343287f2a3f2062, []int{6} } func (m *IndexDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1152,6 +1155,7 @@ type DescriptorMutation struct { // Types that are valid to be assigned to Descriptor_: // *DescriptorMutation_Column // *DescriptorMutation_Index + // *DescriptorMutation_Check Descriptor_ isDescriptorMutation_Descriptor_ `protobuf_oneof:"descriptor"` State DescriptorMutation_State `protobuf:"varint,3,opt,name=state,enum=cockroach.sql.sqlbase.DescriptorMutation_State" json:"state"` Direction DescriptorMutation_Direction `protobuf:"varint,4,opt,name=direction,enum=cockroach.sql.sqlbase.DescriptorMutation_Direction" json:"direction"` @@ -1170,7 +1174,7 @@ func (m *DescriptorMutation) Reset() { *m = DescriptorMutation{} } func (m *DescriptorMutation) String() string { return proto.CompactTextString(m) } func (*DescriptorMutation) ProtoMessage() {} func (*DescriptorMutation) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{7} + return fileDescriptor_structured_1343287f2a3f2062, []int{7} } func (m *DescriptorMutation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1207,9 +1211,13 @@ type DescriptorMutation_Column struct { type DescriptorMutation_Index struct { Index *IndexDescriptor `protobuf:"bytes,2,opt,name=index,oneof"` } +type DescriptorMutation_Check struct { + Check *TableDescriptor_CheckConstraint `protobuf:"bytes,8,opt,name=check,oneof"` +} func (*DescriptorMutation_Column) isDescriptorMutation_Descriptor_() {} func (*DescriptorMutation_Index) isDescriptorMutation_Descriptor_() {} +func (*DescriptorMutation_Check) isDescriptorMutation_Descriptor_() {} func (m *DescriptorMutation) GetDescriptor_() isDescriptorMutation_Descriptor_ { if m != nil { @@ -1232,11 +1240,19 @@ func (m *DescriptorMutation) GetIndex() *IndexDescriptor { return nil } +func (m *DescriptorMutation) GetCheck() *TableDescriptor_CheckConstraint { + if x, ok := m.GetDescriptor_().(*DescriptorMutation_Check); ok { + return x.Check + } + return nil +} + // XXX_OneofFuncs is for the internal use of the proto package. func (*DescriptorMutation) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { return _DescriptorMutation_OneofMarshaler, _DescriptorMutation_OneofUnmarshaler, _DescriptorMutation_OneofSizer, []interface{}{ (*DescriptorMutation_Column)(nil), (*DescriptorMutation_Index)(nil), + (*DescriptorMutation_Check)(nil), } } @@ -1254,6 +1270,11 @@ func _DescriptorMutation_OneofMarshaler(msg proto.Message, b *proto.Buffer) erro if err := b.EncodeMessage(x.Index); err != nil { return err } + case *DescriptorMutation_Check: + _ = b.EncodeVarint(8<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.Check); err != nil { + return err + } case nil: default: return fmt.Errorf("DescriptorMutation.Descriptor_ has unexpected type %T", x) @@ -1280,6 +1301,14 @@ func _DescriptorMutation_OneofUnmarshaler(msg proto.Message, tag, wire int, b *p err := b.DecodeMessage(msg) m.Descriptor_ = &DescriptorMutation_Index{msg} return true, err + case 8: // descriptor.check + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(TableDescriptor_CheckConstraint) + err := b.DecodeMessage(msg) + m.Descriptor_ = &DescriptorMutation_Check{msg} + return true, err default: return false, nil } @@ -1299,6 +1328,11 @@ func _DescriptorMutation_OneofSizer(msg proto.Message) (n int) { n += 1 // tag and wire n += proto.SizeVarint(uint64(s)) n += s + case *DescriptorMutation_Check: + s := proto.Size(x.Check) + n += 1 // tag and wire + n += proto.SizeVarint(uint64(s)) + n += s case nil: default: panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) @@ -1424,7 +1458,7 @@ func (m *TableDescriptor) Reset() { *m = TableDescriptor{} } func (m *TableDescriptor) String() string { return proto.CompactTextString(m) } func (*TableDescriptor) ProtoMessage() {} func (*TableDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{8} + return fileDescriptor_structured_1343287f2a3f2062, []int{8} } func (m *TableDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1676,7 +1710,7 @@ func (m *TableDescriptor_SchemaChangeLease) Reset() { *m = TableDescript func (m *TableDescriptor_SchemaChangeLease) String() string { return proto.CompactTextString(m) } func (*TableDescriptor_SchemaChangeLease) ProtoMessage() {} func (*TableDescriptor_SchemaChangeLease) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{8, 0} + return fileDescriptor_structured_1343287f2a3f2062, []int{8, 0} } func (m *TableDescriptor_SchemaChangeLease) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1715,7 +1749,7 @@ func (m *TableDescriptor_CheckConstraint) Reset() { *m = TableDescriptor func (m *TableDescriptor_CheckConstraint) String() string { return proto.CompactTextString(m) } func (*TableDescriptor_CheckConstraint) ProtoMessage() {} func (*TableDescriptor_CheckConstraint) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{8, 1} + return fileDescriptor_structured_1343287f2a3f2062, []int{8, 1} } func (m *TableDescriptor_CheckConstraint) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1820,7 +1854,7 @@ func (m *TableDescriptor_NameInfo) Reset() { *m = TableDescriptor_NameIn func (m *TableDescriptor_NameInfo) String() string { return proto.CompactTextString(m) } func (*TableDescriptor_NameInfo) ProtoMessage() {} func (*TableDescriptor_NameInfo) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{8, 2} + return fileDescriptor_structured_1343287f2a3f2062, []int{8, 2} } func (m *TableDescriptor_NameInfo) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1862,7 +1896,7 @@ func (m *TableDescriptor_Reference) Reset() { *m = TableDescriptor_Refer func (m *TableDescriptor_Reference) String() string { return proto.CompactTextString(m) } func (*TableDescriptor_Reference) ProtoMessage() {} func (*TableDescriptor_Reference) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{8, 3} + return fileDescriptor_structured_1343287f2a3f2062, []int{8, 3} } func (m *TableDescriptor_Reference) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1901,7 +1935,7 @@ func (m *TableDescriptor_MutationJob) Reset() { *m = TableDescriptor_Mut func (m *TableDescriptor_MutationJob) String() string { return proto.CompactTextString(m) } func (*TableDescriptor_MutationJob) ProtoMessage() {} func (*TableDescriptor_MutationJob) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{8, 4} + return fileDescriptor_structured_1343287f2a3f2062, []int{8, 4} } func (m *TableDescriptor_MutationJob) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1945,7 +1979,7 @@ func (m *TableDescriptor_SequenceOpts) Reset() { *m = TableDescriptor_Se func (m *TableDescriptor_SequenceOpts) String() string { return proto.CompactTextString(m) } func (*TableDescriptor_SequenceOpts) ProtoMessage() {} func (*TableDescriptor_SequenceOpts) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{8, 5} + return fileDescriptor_structured_1343287f2a3f2062, []int{8, 5} } func (m *TableDescriptor_SequenceOpts) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -1981,7 +2015,7 @@ func (m *TableDescriptor_Replacement) Reset() { *m = TableDescriptor_Rep func (m *TableDescriptor_Replacement) String() string { return proto.CompactTextString(m) } func (*TableDescriptor_Replacement) ProtoMessage() {} func (*TableDescriptor_Replacement) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{8, 6} + return fileDescriptor_structured_1343287f2a3f2062, []int{8, 6} } func (m *TableDescriptor_Replacement) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2020,7 +2054,7 @@ func (m *TableDescriptor_GCDescriptorMutation) Reset() { *m = TableDescr func (m *TableDescriptor_GCDescriptorMutation) String() string { return proto.CompactTextString(m) } func (*TableDescriptor_GCDescriptorMutation) ProtoMessage() {} func (*TableDescriptor_GCDescriptorMutation) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{8, 7} + return fileDescriptor_structured_1343287f2a3f2062, []int{8, 7} } func (m *TableDescriptor_GCDescriptorMutation) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2061,7 +2095,7 @@ func (m *DatabaseDescriptor) Reset() { *m = DatabaseDescriptor{} } func (m *DatabaseDescriptor) String() string { return proto.CompactTextString(m) } func (*DatabaseDescriptor) ProtoMessage() {} func (*DatabaseDescriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{9} + return fileDescriptor_structured_1343287f2a3f2062, []int{9} } func (m *DatabaseDescriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2121,7 +2155,7 @@ func (m *Descriptor) Reset() { *m = Descriptor{} } func (m *Descriptor) String() string { return proto.CompactTextString(m) } func (*Descriptor) ProtoMessage() {} func (*Descriptor) Descriptor() ([]byte, []int) { - return fileDescriptor_structured_5d7c10ae22dcc34f, []int{10} + return fileDescriptor_structured_1343287f2a3f2062, []int{10} } func (m *Descriptor) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -2998,6 +3032,20 @@ func (m *DescriptorMutation_Index) MarshalTo(dAtA []byte) (int, error) { } return i, nil } +func (m *DescriptorMutation_Check) MarshalTo(dAtA []byte) (int, error) { + i := 0 + if m.Check != nil { + dAtA[i] = 0x42 + i++ + i = encodeVarintStructured(dAtA, i, uint64(m.Check.Size())) + n9, err := m.Check.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n9 + } + return i, nil +} func (m *TableDescriptor) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3029,11 +3077,11 @@ func (m *TableDescriptor) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x3a i++ i = encodeVarintStructured(dAtA, i, uint64(m.ModificationTime.Size())) - n9, err := m.ModificationTime.MarshalTo(dAtA[i:]) + n10, err := m.ModificationTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n9 + i += n10 if len(m.Columns) > 0 { for _, msg := range m.Columns { dAtA[i] = 0x42 @@ -3052,11 +3100,11 @@ func (m *TableDescriptor) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x52 i++ i = encodeVarintStructured(dAtA, i, uint64(m.PrimaryIndex.Size())) - n10, err := m.PrimaryIndex.MarshalTo(dAtA[i:]) + n11, err := m.PrimaryIndex.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n10 + i += n11 if len(m.Indexes) > 0 { for _, msg := range m.Indexes { dAtA[i] = 0x5a @@ -3076,11 +3124,11 @@ func (m *TableDescriptor) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x6a i++ i = encodeVarintStructured(dAtA, i, uint64(m.Privileges.Size())) - n11, err := m.Privileges.MarshalTo(dAtA[i:]) + n12, err := m.Privileges.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n11 + i += n12 } if len(m.Mutations) > 0 { for _, msg := range m.Mutations { @@ -3098,11 +3146,11 @@ func (m *TableDescriptor) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x7a i++ i = encodeVarintStructured(dAtA, i, uint64(m.Lease.Size())) - n12, err := m.Lease.MarshalTo(dAtA[i:]) + n13, err := m.Lease.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n12 + i += n13 } dAtA[i] = 0x80 i++ @@ -3215,11 +3263,11 @@ func (m *TableDescriptor) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintStructured(dAtA, i, uint64(m.SequenceOpts.Size())) - n13, err := m.SequenceOpts.MarshalTo(dAtA[i:]) + n14, err := m.SequenceOpts.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n13 + i += n14 } dAtA[i] = 0xe8 i++ @@ -3231,11 +3279,11 @@ func (m *TableDescriptor) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintStructured(dAtA, i, uint64(m.ReplacementOf.Size())) - n14, err := m.ReplacementOf.MarshalTo(dAtA[i:]) + n15, err := m.ReplacementOf.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n14 + i += n15 dAtA[i] = 0xf8 i++ dAtA[i] = 0x1 @@ -3462,11 +3510,11 @@ func (m *TableDescriptor_Replacement) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintStructured(dAtA, i, uint64(m.Time.Size())) - n15, err := m.Time.MarshalTo(dAtA[i:]) + n16, err := m.Time.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n15 + i += n16 return i, nil } @@ -3523,11 +3571,11 @@ func (m *DatabaseDescriptor) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintStructured(dAtA, i, uint64(m.Privileges.Size())) - n16, err := m.Privileges.MarshalTo(dAtA[i:]) + n17, err := m.Privileges.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n16 + i += n17 } return i, nil } @@ -3548,11 +3596,11 @@ func (m *Descriptor) MarshalTo(dAtA []byte) (int, error) { var l int _ = l if m.Union != nil { - nn17, err := m.Union.MarshalTo(dAtA[i:]) + nn18, err := m.Union.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += nn17 + i += nn18 } return i, nil } @@ -3563,11 +3611,11 @@ func (m *Descriptor_Table) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintStructured(dAtA, i, uint64(m.Table.Size())) - n18, err := m.Table.MarshalTo(dAtA[i:]) + n19, err := m.Table.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n18 + i += n19 } return i, nil } @@ -3577,11 +3625,11 @@ func (m *Descriptor_Database) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintStructured(dAtA, i, uint64(m.Database.Size())) - n19, err := m.Database.MarshalTo(dAtA[i:]) + n20, err := m.Database.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n19 + i += n20 } return i, nil } @@ -3898,6 +3946,18 @@ func (m *DescriptorMutation_Index) Size() (n int) { } return n } +func (m *DescriptorMutation_Check) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Check != nil { + l = m.Check.Size() + n += 1 + l + sovStructured(uint64(l)) + } + return n +} func (m *TableDescriptor) Size() (n int) { if m == nil { return 0 @@ -6687,6 +6747,38 @@ func (m *DescriptorMutation) Unmarshal(dAtA []byte) error { } } m.Rollback = bool(v != 0) + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Check", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowStructured + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthStructured + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &TableDescriptor_CheckConstraint{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Descriptor_ = &DescriptorMutation_Check{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipStructured(dAtA[iNdEx:]) @@ -8923,208 +9015,209 @@ var ( ) func init() { - proto.RegisterFile("sql/sqlbase/structured.proto", fileDescriptor_structured_5d7c10ae22dcc34f) -} - -var fileDescriptor_structured_5d7c10ae22dcc34f = []byte{ - // 3170 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x59, 0xcd, 0x6f, 0x1b, 0x47, - 0x96, 0x57, 0x93, 0x4d, 0xb2, 0xf9, 0xf8, 0xd5, 0x2a, 0xcb, 0x0e, 0xcd, 0x38, 0x92, 0xcc, 0xc4, - 0x59, 0xe5, 0x8b, 0x72, 0xe4, 0xec, 0x6e, 0x90, 0x2c, 0x82, 0x25, 0xd9, 0x2d, 0xbb, 0x65, 0x8a, - 0x94, 0x9b, 0x94, 0x1c, 0x07, 0xd9, 0x25, 0x5a, 0xec, 0x92, 0xd4, 0x71, 0xb3, 0x9b, 0xee, 0x6e, - 0x2a, 0xd2, 0x7f, 0x90, 0xd3, 0x62, 0x31, 0x87, 0x99, 0x5b, 0x10, 0x04, 0x73, 0x08, 0x30, 0xd7, - 0x39, 0xcc, 0x9f, 0xe0, 0xb9, 0x0d, 0x72, 0x9a, 0xcb, 0x18, 0x33, 0x1a, 0x0c, 0x30, 0xb7, 0xb9, - 0x07, 0x18, 0x60, 0x50, 0xd5, 0x55, 0xcd, 0xa6, 0xbe, 0x42, 0xd9, 0x37, 0xf6, 0xab, 0xf7, 0x7e, - 0x55, 0xef, 0xd5, 0x7b, 0xbf, 0x7a, 0x55, 0x84, 0x5b, 0xfe, 0x33, 0x7b, 0xd5, 0x7f, 0x66, 0xef, - 0x1a, 0x3e, 0x5e, 0xf5, 0x03, 0x6f, 0x3c, 0x08, 0xc6, 0x1e, 0x36, 0x6b, 0x23, 0xcf, 0x0d, 0x5c, - 0x74, 0x7d, 0xe0, 0x0e, 0x9e, 0x7a, 0xae, 0x31, 0x38, 0xa8, 0xf9, 0xcf, 0xec, 0x1a, 0xd3, 0xab, - 0x94, 0xc7, 0x81, 0x65, 0xaf, 0x1e, 0xd8, 0x83, 0xd5, 0xc0, 0x1a, 0x62, 0x3f, 0x30, 0x86, 0xa3, - 0xd0, 0xa0, 0xf2, 0x7a, 0x1c, 0x6e, 0xe4, 0x59, 0x87, 0x96, 0x8d, 0xf7, 0x31, 0x1b, 0x5c, 0xd8, - 0x77, 0xf7, 0x5d, 0xfa, 0x73, 0x95, 0xfc, 0x0a, 0xa5, 0xd5, 0x1f, 0x33, 0x00, 0x4d, 0xd7, 0x1e, - 0x0f, 0x9d, 0xde, 0xf1, 0x08, 0xa3, 0x27, 0x50, 0xf0, 0xf1, 0xd0, 0x70, 0x02, 0x6b, 0xd0, 0x0f, - 0x8e, 0x47, 0xb8, 0x2c, 0x2c, 0x0b, 0x2b, 0xc5, 0xb5, 0x5a, 0xed, 0xdc, 0xa5, 0xd4, 0x26, 0x96, - 0xb5, 0x2e, 0x33, 0x23, 0x1f, 0x0d, 0xf1, 0xf9, 0x8b, 0xa5, 0x39, 0x3d, 0xef, 0xc7, 0x64, 0xa8, - 0x02, 0xa9, 0xaf, 0x2d, 0x33, 0x38, 0x28, 0x27, 0x96, 0x85, 0x95, 0x14, 0x53, 0x09, 0x45, 0xa8, - 0x0a, 0xd9, 0x91, 0x87, 0x07, 0x96, 0x6f, 0xb9, 0x4e, 0x39, 0x19, 0x1b, 0x9f, 0x88, 0xd1, 0x3b, - 0x20, 0x1b, 0x9e, 0x67, 0x1c, 0xf7, 0x4d, 0x6b, 0x88, 0x1d, 0x22, 0xf2, 0xcb, 0xe2, 0x72, 0x72, - 0x25, 0xa5, 0x97, 0xa8, 0x5c, 0x89, 0xc4, 0xe8, 0x06, 0xa4, 0x6d, 0x77, 0x60, 0xd8, 0xb8, 0x9c, - 0x5a, 0x16, 0x56, 0xb2, 0x3a, 0xfb, 0x42, 0x3b, 0x90, 0x3f, 0xb4, 0x7c, 0x6b, 0xd7, 0xc6, 0xa1, - 0x73, 0x69, 0xea, 0xdc, 0x07, 0x3f, 0xef, 0xdc, 0x4e, 0x68, 0x15, 0xf3, 0x2d, 0x77, 0x38, 0x11, - 0xa1, 0x6d, 0x28, 0x86, 0x4b, 0x1b, 0xb8, 0x4e, 0x80, 0x9d, 0xc0, 0x2f, 0x67, 0x5e, 0x26, 0x6c, - 0x7a, 0x81, 0xa2, 0x34, 0x19, 0x08, 0x6a, 0x43, 0x31, 0x18, 0x8f, 0x6c, 0x3c, 0x81, 0x95, 0x96, - 0x93, 0x2b, 0xb9, 0xb5, 0xdb, 0x3f, 0x0b, 0xcb, 0x16, 0x59, 0xa0, 0xe6, 0x11, 0xde, 0x6d, 0xc8, - 0x87, 0x78, 0xb6, 0xb1, 0x8b, 0x6d, 0xbf, 0x9c, 0x5d, 0x4e, 0xae, 0x64, 0xf5, 0x1c, 0x95, 0xb5, - 0xa8, 0xa8, 0xfa, 0x43, 0x02, 0xf2, 0xf1, 0x25, 0x21, 0x09, 0xc4, 0x46, 0xa7, 0xd3, 0x92, 0xe7, - 0x50, 0x06, 0x92, 0x5a, 0xbb, 0x27, 0x0b, 0x28, 0x0b, 0xa9, 0xf5, 0x56, 0xa7, 0xde, 0x93, 0x13, - 0x28, 0x07, 0x19, 0x45, 0x6d, 0x6a, 0x9b, 0xf5, 0x96, 0x9c, 0x24, 0xaa, 0x4a, 0xbd, 0xa7, 0xca, - 0x22, 0x2a, 0x40, 0xb6, 0xa7, 0x6d, 0xaa, 0xdd, 0x5e, 0x7d, 0x73, 0x4b, 0x4e, 0xa1, 0x3c, 0x48, - 0x5a, 0xbb, 0xa7, 0xea, 0x3b, 0xf5, 0x96, 0x9c, 0x46, 0x00, 0xe9, 0x6e, 0x4f, 0xd7, 0xda, 0xf7, - 0xe5, 0x0c, 0x81, 0x6a, 0x3c, 0xe9, 0xa9, 0x5d, 0x59, 0x42, 0x25, 0xc8, 0x45, 0x36, 0xbd, 0x2f, - 0xe4, 0x2c, 0x42, 0x50, 0x6c, 0x76, 0x5a, 0xad, 0x7a, 0x4f, 0x55, 0x98, 0x3e, 0x90, 0x29, 0xda, - 0xf5, 0x4d, 0x55, 0xce, 0x91, 0xd5, 0x74, 0x34, 0x45, 0xce, 0x53, 0xd1, 0x76, 0xab, 0x25, 0x17, - 0xc8, 0xaf, 0xed, 0x6d, 0x4d, 0x91, 0x8b, 0x04, 0xb6, 0xae, 0xeb, 0xf5, 0x27, 0x72, 0x89, 0x08, - 0xb5, 0xb6, 0xda, 0x93, 0x65, 0xf2, 0x8b, 0x4c, 0x20, 0xcf, 0x93, 0xe1, 0x8d, 0x6e, 0xa7, 0xdd, - 0x90, 0x11, 0xf9, 0xd9, 0xdb, 0xde, 0x6a, 0xa9, 0xf2, 0x02, 0x41, 0x6c, 0x68, 0x3d, 0xf9, 0x3a, - 0x2a, 0x01, 0x68, 0xed, 0xde, 0xda, 0x8e, 0xda, 0xec, 0x75, 0x74, 0xf9, 0xb9, 0x80, 0x8a, 0x90, - 0xed, 0x68, 0x0a, 0xfb, 0xfe, 0xbd, 0x50, 0x15, 0xa5, 0x6b, 0xf2, 0xb5, 0xea, 0x2f, 0x04, 0xc8, - 0xc5, 0xf2, 0x82, 0x2e, 0xa4, 0xd3, 0x56, 0xe5, 0x39, 0x12, 0x15, 0xe2, 0xef, 0x7d, 0x55, 0x97, - 0x05, 0xe2, 0x7c, 0x77, 0xb3, 0xde, 0x6a, 0x91, 0xd8, 0x25, 0x88, 0xf3, 0x0d, 0xed, 0x3e, 0xf9, - 0x4d, 0xe3, 0xa5, 0xab, 0xf5, 0x96, 0x9c, 0x42, 0x0b, 0x20, 0x2b, 0x9d, 0xed, 0x46, 0x4b, 0xed, - 0x6f, 0xe9, 0x6a, 0x53, 0xeb, 0x6a, 0x9d, 0xb6, 0x9c, 0x26, 0x30, 0x3b, 0x75, 0xbd, 0xf9, 0xa0, - 0xae, 0xcb, 0x19, 0xa2, 0x4c, 0x7f, 0x49, 0x64, 0xc9, 0x8f, 0xe8, 0xcf, 0x2c, 0x41, 0xdb, 0xa9, - 0xeb, 0x64, 0xd5, 0x50, 0x15, 0x25, 0x51, 0x16, 0x3f, 0x11, 0xff, 0xfe, 0xdd, 0x92, 0x50, 0xfd, - 0x87, 0x08, 0xd7, 0xd6, 0x5d, 0x0f, 0x5b, 0xfb, 0xce, 0x43, 0x7c, 0xac, 0xe3, 0x3d, 0xec, 0x61, - 0x67, 0x80, 0xd1, 0x32, 0xa4, 0x02, 0x63, 0xd7, 0x0e, 0xab, 0xba, 0xd0, 0x00, 0x92, 0x24, 0x3f, - 0xbd, 0x58, 0x4a, 0x68, 0x8a, 0x1e, 0x0e, 0xa0, 0x3b, 0x90, 0xb2, 0x1c, 0x13, 0x1f, 0xd1, 0x22, - 0x2d, 0x34, 0x4a, 0x4c, 0x23, 0xa3, 0x11, 0x21, 0x51, 0xa3, 0xa3, 0xa8, 0x0c, 0xa2, 0x63, 0x0c, - 0x31, 0x2d, 0xd5, 0x2c, 0x4b, 0x36, 0x2a, 0x41, 0x0f, 0x41, 0x3a, 0x34, 0x6c, 0xcb, 0xb4, 0x82, - 0xe3, 0xb2, 0x48, 0x8b, 0xe0, 0x9d, 0x0b, 0xb3, 0xd5, 0xf1, 0x03, 0xcf, 0xb0, 0x9c, 0x60, 0x87, - 0x19, 0x30, 0xa0, 0x08, 0x00, 0xdd, 0x85, 0x79, 0xff, 0xc0, 0xf0, 0xb0, 0xd9, 0x1f, 0x79, 0x78, - 0xcf, 0x3a, 0xea, 0xdb, 0xd8, 0xa1, 0x25, 0xcd, 0xe9, 0xa1, 0x14, 0x0e, 0x6f, 0xd1, 0xd1, 0x16, - 0x76, 0x50, 0x0f, 0xb2, 0xae, 0xd3, 0x37, 0xb1, 0x8d, 0x03, 0x5e, 0xde, 0x1f, 0x5e, 0x30, 0xff, - 0x39, 0x01, 0xaa, 0xd5, 0x07, 0x81, 0xe5, 0x3a, 0x7c, 0x1d, 0xae, 0xa3, 0x50, 0x20, 0x86, 0x3a, - 0x1e, 0x99, 0x46, 0x80, 0x59, 0x69, 0xbf, 0x0a, 0xea, 0x36, 0x05, 0x42, 0x2d, 0x48, 0x0d, 0x8d, - 0x60, 0x70, 0x50, 0x96, 0x28, 0xe2, 0xdd, 0x2b, 0x20, 0x6e, 0x12, 0x3b, 0x4e, 0xa1, 0x14, 0xa4, - 0xfa, 0x18, 0xd2, 0xe1, 0x3c, 0xa4, 0xfa, 0xda, 0x9d, 0x7e, 0xbd, 0xd9, 0x23, 0x69, 0x34, 0x47, - 0x12, 0x50, 0x57, 0x49, 0x05, 0x35, 0x7b, 0x2c, 0x1d, 0xd5, 0x5e, 0x9f, 0x96, 0x4c, 0x82, 0x14, - 0x1d, 0xf9, 0x52, 0xd4, 0xf5, 0xfa, 0x76, 0x8b, 0xe4, 0x64, 0x0e, 0x32, 0xcd, 0x7a, 0xb7, 0x59, - 0x57, 0x54, 0x59, 0xac, 0x88, 0x3f, 0xfc, 0x7a, 0x71, 0xae, 0xfa, 0x26, 0xa4, 0xe8, 0x74, 0xb4, - 0x70, 0xb5, 0x4d, 0x52, 0x2c, 0x73, 0x24, 0x1d, 0xd7, 0x09, 0x84, 0xc0, 0x94, 0xfe, 0x94, 0x00, - 0x39, 0xa4, 0x1f, 0x05, 0xfb, 0x03, 0xcf, 0x1a, 0x05, 0xae, 0x17, 0x65, 0x89, 0x70, 0x26, 0x4b, - 0xde, 0x86, 0x84, 0x65, 0xb2, 0x1c, 0xbb, 0x41, 0xe4, 0x27, 0x34, 0x0b, 0x7f, 0x7a, 0xb1, 0x24, - 0x85, 0x28, 0x9a, 0xa2, 0x27, 0x2c, 0x13, 0x7d, 0x0a, 0x22, 0x25, 0x6a, 0x92, 0x67, 0x57, 0xe0, - 0x3d, 0x6a, 0x84, 0x96, 0x41, 0x72, 0xc6, 0xb6, 0x4d, 0x13, 0x9e, 0xa4, 0xa2, 0xc4, 0x77, 0x80, - 0x4b, 0x09, 0x21, 0x9a, 0x78, 0xcf, 0x18, 0xdb, 0x41, 0x1f, 0x1f, 0x8d, 0x3c, 0x76, 0x5a, 0xe4, - 0x98, 0x4c, 0x3d, 0x1a, 0x79, 0xe8, 0x16, 0xa4, 0x0f, 0x2c, 0xd3, 0xc4, 0x0e, 0xcd, 0x26, 0x0e, - 0xc1, 0x64, 0x68, 0x0d, 0xe6, 0xc7, 0x3e, 0xf6, 0xfb, 0x3e, 0x7e, 0x36, 0x26, 0x1b, 0xd3, 0xb7, - 0x4c, 0xbf, 0x0c, 0xcb, 0xc9, 0x95, 0x42, 0x23, 0xcd, 0x0a, 0xab, 0x44, 0x14, 0xba, 0x6c, 0x5c, - 0x33, 0x29, 0x0b, 0x0f, 0xdc, 0xe1, 0x68, 0x1c, 0xe0, 0x70, 0xd2, 0x5c, 0x38, 0x29, 0x93, 0x91, - 0x49, 0x37, 0x44, 0x49, 0x92, 0xb3, 0x1b, 0xa2, 0x94, 0x95, 0x61, 0x43, 0x94, 0x32, 0xb2, 0x54, - 0xfd, 0x26, 0x01, 0x37, 0x42, 0x37, 0xd7, 0x8d, 0xa1, 0x65, 0x1f, 0xbf, 0x6a, 0x94, 0x43, 0x14, - 0x16, 0x65, 0xba, 0x22, 0x82, 0xdd, 0x27, 0x66, 0x7e, 0x39, 0x19, 0x9e, 0x0b, 0xa1, 0xac, 0x4d, - 0x44, 0xe8, 0x63, 0x00, 0xa6, 0x42, 0x3c, 0x14, 0xa9, 0x87, 0x37, 0x4f, 0x5e, 0x2c, 0x65, 0xf9, - 0x76, 0xf9, 0x53, 0x7b, 0x97, 0x0d, 0x95, 0x89, 0xbb, 0x1d, 0x98, 0xe7, 0x31, 0x8e, 0x10, 0x68, - 0xa0, 0x0b, 0x8d, 0x37, 0xd9, 0x9a, 0x4a, 0x4a, 0xa8, 0xc0, 0xcd, 0xa7, 0xa0, 0x4a, 0xe6, 0xd4, - 0xa0, 0x59, 0xfd, 0x4d, 0x02, 0x16, 0x34, 0x27, 0xc0, 0x9e, 0x8d, 0x8d, 0x43, 0x1c, 0x0b, 0xc4, - 0xe7, 0x90, 0x35, 0x9c, 0x01, 0xf6, 0x03, 0xd7, 0xf3, 0xcb, 0x02, 0x3d, 0x29, 0x3f, 0xba, 0x20, - 0x63, 0xce, 0xb3, 0xaf, 0xd5, 0x99, 0x31, 0x6f, 0x3d, 0x22, 0xb0, 0xca, 0xef, 0x04, 0x90, 0xf8, - 0x28, 0xba, 0x0b, 0x12, 0xe5, 0x4a, 0xe2, 0x47, 0xc8, 0xa3, 0xd7, 0x99, 0x1f, 0x99, 0x1e, 0x91, - 0xd3, 0xf5, 0x93, 0x9d, 0xcf, 0x50, 0x35, 0xcd, 0x44, 0xff, 0x0e, 0x12, 0xa5, 0xcd, 0x7e, 0xb4, - 0x1b, 0x15, 0x6e, 0xc1, 0x78, 0x35, 0x4e, 0xb1, 0x19, 0xaa, 0xab, 0x99, 0xa8, 0x79, 0x1e, 0xfb, - 0x25, 0xa9, 0xfd, 0x6b, 0x3c, 0x72, 0xdd, 0x69, 0xfe, 0x3b, 0x43, 0x88, 0xd5, 0xbf, 0x25, 0xe1, - 0xc6, 0x96, 0xe1, 0x05, 0x16, 0xa1, 0x06, 0xcb, 0xd9, 0x8f, 0xc5, 0xeb, 0x0e, 0xe4, 0x9c, 0xf1, - 0x90, 0xed, 0x8a, 0xcf, 0x7c, 0x09, 0x7d, 0x07, 0x67, 0x3c, 0x0c, 0x03, 0xee, 0xa3, 0x16, 0x88, - 0xb6, 0xe5, 0x07, 0xe5, 0x04, 0x8d, 0xe8, 0xda, 0x05, 0x11, 0x3d, 0x7f, 0x8e, 0x5a, 0xcb, 0xf2, - 0x03, 0x9e, 0x93, 0x04, 0x05, 0x75, 0x20, 0xe5, 0x19, 0xce, 0x3e, 0xa6, 0x49, 0x96, 0x5b, 0xbb, - 0x77, 0x35, 0x38, 0x9d, 0x98, 0x72, 0xde, 0xa3, 0x38, 0x95, 0x5f, 0x09, 0x20, 0x92, 0x59, 0x2e, - 0xa9, 0x83, 0x1b, 0x90, 0x3e, 0x34, 0xec, 0x31, 0xf6, 0xa9, 0x0f, 0x79, 0x9d, 0x7d, 0xa1, 0xff, - 0x81, 0x92, 0x3f, 0xde, 0x1d, 0xc5, 0xa6, 0x62, 0x44, 0xf3, 0xc1, 0x95, 0x56, 0x15, 0x9d, 0x45, - 0xd3, 0x58, 0x95, 0xa7, 0x90, 0xa2, 0xeb, 0xbd, 0x64, 0x65, 0xa4, 0x23, 0x73, 0xfb, 0xf8, 0x68, - 0x60, 0x8f, 0x7d, 0xeb, 0x10, 0xd3, 0xec, 0xc8, 0xeb, 0xb9, 0xc0, 0x55, 0xb9, 0x08, 0xdd, 0x81, - 0xe2, 0x9e, 0xe7, 0x0e, 0xfb, 0x96, 0xc3, 0x95, 0x92, 0x54, 0xa9, 0x40, 0xa4, 0x1a, 0x17, 0x56, - 0xff, 0x29, 0x41, 0x89, 0x66, 0xd0, 0x4c, 0xcc, 0x70, 0x27, 0xc6, 0x0c, 0xd7, 0xa7, 0x98, 0x21, - 0x4a, 0x43, 0x42, 0x0c, 0xb7, 0x20, 0x3d, 0x76, 0xac, 0x67, 0xe3, 0x70, 0xce, 0x88, 0xfc, 0x42, - 0xd9, 0x19, 0xda, 0x10, 0xcf, 0xd2, 0xc6, 0xfb, 0x80, 0x48, 0xcd, 0xe0, 0xfe, 0x94, 0x62, 0x8a, - 0x2a, 0xca, 0x74, 0xa4, 0x79, 0x21, 0xc9, 0xa4, 0xaf, 0x40, 0x32, 0x0f, 0x40, 0xc6, 0x47, 0x81, - 0x67, 0xf4, 0x63, 0xf6, 0x19, 0x6a, 0xbf, 0x78, 0xf2, 0x62, 0xa9, 0xa8, 0x92, 0xb1, 0xf3, 0x41, - 0x8a, 0x38, 0x36, 0x66, 0x92, 0x9c, 0x98, 0x67, 0x18, 0xa6, 0xe5, 0x61, 0x7a, 0xa0, 0x86, 0x6d, - 0xf7, 0xc5, 0x07, 0xf4, 0xa9, 0xb0, 0xd7, 0x14, 0x6e, 0xa8, 0xcb, 0x21, 0x54, 0x24, 0xf0, 0xd1, - 0x23, 0xc8, 0xed, 0x85, 0xe7, 0x79, 0xff, 0x29, 0x3e, 0x2e, 0x67, 0x69, 0xba, 0xbd, 0x3b, 0xfb, - 0xc9, 0xcf, 0xeb, 0x73, 0x2f, 0x1a, 0x42, 0xdb, 0x50, 0xf0, 0xf8, 0xb0, 0xd9, 0xdf, 0x3d, 0xa6, - 0xe7, 0xcf, 0xcb, 0x80, 0xe6, 0x27, 0x30, 0x8d, 0x63, 0xf4, 0x08, 0xc0, 0x8a, 0x58, 0x92, 0x1e, - 0x52, 0xb9, 0xb5, 0xf7, 0xae, 0x40, 0xa7, 0x7c, 0xa5, 0x13, 0x10, 0xf4, 0x18, 0x8a, 0x93, 0x2f, - 0xba, 0xd4, 0xfc, 0x4b, 0x2e, 0xb5, 0x10, 0xc3, 0x69, 0x1c, 0xa3, 0x1e, 0x2c, 0x90, 0xe3, 0xd3, - 0xf5, 0xad, 0x00, 0xc7, 0x53, 0xa0, 0x40, 0x53, 0xa0, 0x7a, 0xf2, 0x62, 0x09, 0x35, 0xf9, 0xf8, - 0xf9, 0x69, 0x80, 0x06, 0xa7, 0xc6, 0xc3, 0xa4, 0x9a, 0x4a, 0x5e, 0x82, 0x58, 0x9c, 0x24, 0x55, - 0x77, 0x92, 0xbe, 0x67, 0x92, 0x2a, 0x96, 0xda, 0x04, 0xe9, 0x31, 0xe4, 0xa7, 0x58, 0xa6, 0xf4, - 0xf2, 0x2c, 0x33, 0x05, 0x84, 0x54, 0xd6, 0x1f, 0xc9, 0xb4, 0x83, 0x7c, 0x6f, 0xc6, 0x04, 0x3d, - 0xdd, 0x29, 0x55, 0x17, 0x21, 0x1b, 0xe5, 0x28, 0xb9, 0x07, 0xd5, 0xbb, 0xcd, 0xb0, 0xc7, 0x53, - 0xd4, 0x6e, 0x53, 0x16, 0xaa, 0xb7, 0x41, 0xa4, 0x57, 0x9c, 0x1c, 0x64, 0xd6, 0x3b, 0xfa, 0xe3, - 0xba, 0xae, 0x84, 0x7d, 0xa5, 0xd6, 0xde, 0x51, 0xf5, 0x9e, 0xaa, 0xc8, 0x42, 0xf5, 0x7b, 0x11, - 0xd0, 0x64, 0x8a, 0xcd, 0x71, 0x60, 0x50, 0xb0, 0x3a, 0xa4, 0xc3, 0xe8, 0x51, 0x12, 0xca, 0xad, - 0xfd, 0xdb, 0xa5, 0x2d, 0xdc, 0x04, 0xe0, 0xc1, 0x9c, 0xce, 0x0c, 0xd1, 0x67, 0xf1, 0x2b, 0x49, - 0x6e, 0xed, 0xed, 0xd9, 0x9c, 0x7c, 0x30, 0xc7, 0xef, 0x2a, 0x0f, 0x21, 0xe5, 0x07, 0xa4, 0x71, - 0x4f, 0xd2, 0x20, 0xad, 0x5e, 0x60, 0x7f, 0x76, 0xf1, 0xb5, 0x2e, 0x31, 0xe3, 0xa7, 0x0d, 0xc5, - 0x40, 0x8f, 0x21, 0x1b, 0xf1, 0x02, 0xbb, 0xdf, 0xdc, 0x9b, 0x1d, 0x30, 0x0a, 0x32, 0x6f, 0x31, - 0x22, 0x2c, 0x54, 0x87, 0xdc, 0x90, 0xa9, 0x4d, 0x1a, 0xa4, 0x65, 0x46, 0xcd, 0xc0, 0x11, 0x28, - 0x45, 0xc7, 0xbe, 0x74, 0xe0, 0x46, 0x9a, 0x49, 0xfa, 0x5d, 0xcf, 0xb5, 0xed, 0x5d, 0x63, 0xf0, - 0x94, 0x5e, 0x52, 0xa2, 0x7e, 0x97, 0x4b, 0xab, 0xff, 0x0d, 0x29, 0xea, 0x13, 0xd9, 0xc8, 0xed, - 0xf6, 0xc3, 0x76, 0xe7, 0x31, 0xb9, 0x20, 0x94, 0x20, 0xa7, 0xa8, 0x2d, 0xb5, 0xa7, 0xf6, 0x3b, - 0xed, 0xd6, 0x13, 0x59, 0x40, 0x37, 0xe1, 0x3a, 0x13, 0xd4, 0xdb, 0x4a, 0xff, 0xb1, 0xae, 0xf1, - 0xa1, 0x44, 0x75, 0x25, 0x9e, 0x29, 0x93, 0x1b, 0x2f, 0xc9, 0x19, 0x45, 0x91, 0x05, 0x9a, 0x33, - 0x7a, 0x67, 0x4b, 0x4e, 0x34, 0xf2, 0x00, 0x66, 0x14, 0x81, 0x0d, 0x51, 0x4a, 0xcb, 0x99, 0xea, - 0xff, 0xbd, 0x0e, 0x25, 0xda, 0x23, 0xcd, 0x74, 0x48, 0x2d, 0xd3, 0x43, 0x2a, 0x6c, 0x78, 0xe4, - 0xa9, 0x43, 0x2a, 0xc1, 0xce, 0xa7, 0x7b, 0x90, 0x1d, 0x19, 0x1e, 0x76, 0x02, 0x12, 0x32, 0x71, - 0xaa, 0xcf, 0x95, 0xb6, 0xe8, 0x40, 0xa4, 0x2e, 0x85, 0x8a, 0x1a, 0x31, 0xca, 0x1c, 0x62, 0x8f, - 0xbe, 0x34, 0x85, 0x51, 0xbe, 0xc9, 0x2e, 0xb9, 0xf3, 0x93, 0x55, 0xed, 0x84, 0x0a, 0x3a, 0xd7, - 0x44, 0x5b, 0x30, 0x3f, 0x74, 0x4d, 0x6b, 0xcf, 0x1a, 0x84, 0x5b, 0x14, 0x58, 0xc3, 0xf0, 0x26, - 0x98, 0x5b, 0x7b, 0x23, 0xb6, 0xff, 0xe3, 0xc0, 0xb2, 0x6b, 0x07, 0xf6, 0xa0, 0xd6, 0xe3, 0x2f, - 0x73, 0xcc, 0x23, 0x39, 0x6e, 0x4d, 0x06, 0xd1, 0x7d, 0xc8, 0xf0, 0xce, 0x2b, 0x7c, 0xd5, 0x99, - 0xb5, 0x34, 0x18, 0x22, 0xb7, 0x46, 0xeb, 0x50, 0x74, 0xf0, 0x51, 0xbc, 0xbb, 0xce, 0x4e, 0x25, - 0x4f, 0xbe, 0x8d, 0x8f, 0xce, 0x6f, 0xad, 0xf3, 0xce, 0x64, 0xc4, 0x44, 0x8f, 0xa0, 0x30, 0xf2, - 0xac, 0xa1, 0xe1, 0x1d, 0xf7, 0xc3, 0x7a, 0x83, 0xab, 0xd4, 0x5b, 0x44, 0x4f, 0x21, 0x04, 0x1d, - 0x45, 0xeb, 0x10, 0x36, 0xb3, 0xd8, 0x2f, 0xe7, 0xa8, 0x8f, 0x57, 0x03, 0xe3, 0xc6, 0xa8, 0x01, - 0x05, 0xea, 0x62, 0xd4, 0x45, 0xe7, 0xa9, 0x87, 0x8b, 0xcc, 0xc3, 0x1c, 0xf1, 0xf0, 0x9c, 0x4e, - 0x3a, 0xe7, 0x44, 0x72, 0x13, 0x6d, 0x00, 0x44, 0x2f, 0xa2, 0xe4, 0x64, 0xb8, 0xec, 0xe0, 0xdd, - 0xe2, 0x8a, 0x93, 0x25, 0xe9, 0x31, 0x6b, 0xb4, 0x09, 0x59, 0x5e, 0x77, 0xe1, 0x91, 0x90, 0xbb, - 0xf0, 0x95, 0xe3, 0x2c, 0x0b, 0xf0, 0xda, 0x8f, 0x10, 0x50, 0x1b, 0x52, 0x36, 0x36, 0x7c, 0xcc, - 0xce, 0x85, 0x8f, 0x2f, 0x80, 0x3a, 0x55, 0x39, 0xb5, 0xee, 0xe0, 0x00, 0x0f, 0x8d, 0xe6, 0x01, - 0xe9, 0x31, 0x5b, 0xc4, 0x5e, 0x0f, 0x61, 0x50, 0x1b, 0x64, 0x1a, 0xae, 0x38, 0xa1, 0xc8, 0x34, - 0x62, 0x6f, 0xb1, 0x88, 0x15, 0x49, 0xc4, 0x2e, 0x24, 0x15, 0x9a, 0x4f, 0x9b, 0x13, 0x62, 0xf9, - 0x2f, 0x28, 0xee, 0xb9, 0xde, 0xd0, 0x08, 0xfa, 0xbc, 0x70, 0xe6, 0x27, 0x9d, 0xe3, 0x4f, 0x2f, - 0x96, 0x0a, 0xeb, 0x74, 0x94, 0x17, 0x4d, 0x61, 0x2f, 0xfe, 0x89, 0x1e, 0x70, 0xfe, 0xbd, 0x46, - 0xe9, 0xf2, 0xfd, 0x59, 0xbd, 0x3b, 0x4b, 0xbe, 0x6d, 0x48, 0x0f, 0x0e, 0xf0, 0xe0, 0xa9, 0x5f, - 0x5e, 0xa0, 0x31, 0xff, 0x8f, 0x19, 0xa1, 0x9a, 0xc4, 0x68, 0xf2, 0xdc, 0xa4, 0x33, 0x14, 0xf4, - 0x25, 0x14, 0x4d, 0x22, 0xb1, 0x9c, 0x7d, 0xd6, 0x99, 0x5e, 0xa7, 0xb8, 0xab, 0x33, 0xe2, 0x92, - 0xae, 0x55, 0x73, 0xf6, 0x5c, 0xde, 0x94, 0x70, 0xb0, 0xb0, 0x9b, 0xed, 0x80, 0xb4, 0x47, 0x6e, - 0xd9, 0x16, 0xf6, 0xcb, 0x37, 0x28, 0xee, 0xe5, 0x0f, 0xcd, 0xa7, 0x2f, 0xf6, 0x9c, 0xbd, 0x39, - 0x48, 0x54, 0xe8, 0x54, 0x70, 0x4c, 0x36, 0xf5, 0xb5, 0xb3, 0x85, 0xce, 0x2f, 0xf6, 0x53, 0x97, - 0x7c, 0x5a, 0xe8, 0xec, 0xcb, 0x44, 0x6f, 0x02, 0x1c, 0x5a, 0xf8, 0xeb, 0xfe, 0xb3, 0x31, 0xf6, - 0x8e, 0xcb, 0xe5, 0x18, 0xef, 0x66, 0x89, 0xfc, 0x11, 0x11, 0xa3, 0x0f, 0x21, 0x6b, 0xe2, 0x11, - 0x76, 0x4c, 0xbf, 0xe3, 0x94, 0x6f, 0xd2, 0xae, 0xe7, 0x1a, 0x69, 0xc5, 0x15, 0x2e, 0x64, 0xbc, - 0x3a, 0xd1, 0x42, 0x5f, 0x41, 0x3e, 0xfc, 0xc0, 0x66, 0xc7, 0x69, 0x1c, 0x97, 0x2b, 0xd4, 0xe9, - 0xbb, 0x33, 0x06, 0x73, 0xd2, 0xe2, 0x2d, 0x70, 0x7f, 0x94, 0x18, 0x9a, 0x3e, 0x85, 0x8d, 0xbe, - 0x84, 0x3c, 0xcf, 0xee, 0x0d, 0x77, 0xd7, 0x2f, 0xbf, 0x7e, 0xe9, 0xe5, 0xf4, 0xf4, 0x5c, 0x9b, - 0x13, 0x53, 0xce, 0x5b, 0x71, 0x34, 0xf4, 0x39, 0x14, 0xa2, 0x17, 0x1d, 0x77, 0x14, 0xf8, 0xe5, - 0x5b, 0xb4, 0x30, 0xef, 0xcd, 0x9a, 0xba, 0xcc, 0xb6, 0x33, 0x0a, 0x7c, 0x3d, 0xef, 0xc7, 0xbe, - 0xd0, 0x6d, 0xc8, 0x9a, 0x9e, 0x3b, 0x0a, 0xcf, 0x8f, 0x37, 0x96, 0x85, 0x95, 0x24, 0xdf, 0x66, - 0x22, 0xa6, 0x07, 0x43, 0x1f, 0x8a, 0x1e, 0x1e, 0xd9, 0xc6, 0x00, 0x0f, 0xc9, 0xc9, 0xe6, 0xee, - 0x95, 0x17, 0xe9, 0xec, 0x6b, 0x33, 0x07, 0x32, 0x32, 0xe6, 0x89, 0x19, 0xc3, 0xeb, 0xec, 0xa1, - 0x6d, 0x00, 0x63, 0x6c, 0x5a, 0x41, 0x7f, 0xe8, 0x9a, 0xb8, 0xbc, 0x74, 0xe9, 0xe3, 0xe3, 0x69, - 0xf0, 0x3a, 0x31, 0xdc, 0x74, 0x4d, 0x1c, 0x3d, 0x92, 0x70, 0x01, 0xfa, 0x10, 0x72, 0xd4, 0xb5, - 0xaf, 0xdc, 0x5d, 0x92, 0x9b, 0xcb, 0xd4, 0xb9, 0x79, 0xb6, 0x97, 0x59, 0xc5, 0x73, 0x47, 0x1b, - 0xee, 0x2e, 0xcd, 0x18, 0xf6, 0xd3, 0x44, 0x3e, 0xe4, 0xf7, 0x07, 0xfd, 0x09, 0x95, 0xde, 0xa6, - 0xbb, 0xf8, 0xe9, 0x8c, 0x6b, 0xb9, 0xdf, 0x3c, 0x87, 0x5c, 0xaf, 0xf1, 0x33, 0xe1, 0x7e, 0x93, - 0xcb, 0x7c, 0x3d, 0xb7, 0x3f, 0x88, 0x3e, 0x2a, 0xdf, 0x0b, 0x30, 0x7f, 0x86, 0x3a, 0xd1, 0xff, - 0x42, 0xc6, 0x71, 0xcd, 0xd8, 0xa3, 0x8e, 0xca, 0x80, 0xd2, 0x6d, 0xd7, 0x0c, 0xdf, 0x74, 0xee, - 0xed, 0x5b, 0xc1, 0xc1, 0x78, 0xb7, 0x36, 0x70, 0x87, 0xab, 0xd1, 0x0a, 0xcd, 0xdd, 0xc9, 0xef, - 0xd5, 0xd1, 0xd3, 0xfd, 0x55, 0xfa, 0x6b, 0xb4, 0x5b, 0x0b, 0xcd, 0xf4, 0x34, 0x41, 0xd5, 0x4c, - 0xf4, 0x01, 0x94, 0xf0, 0xd1, 0xc8, 0xf2, 0x62, 0xed, 0x43, 0x22, 0xb6, 0xfd, 0xc5, 0xc9, 0x20, - 0x49, 0x82, 0xca, 0x8f, 0x02, 0x94, 0x4e, 0xd1, 0x16, 0xe9, 0x94, 0xe8, 0x83, 0xe1, 0x54, 0xa7, - 0x44, 0x24, 0x51, 0x0f, 0x95, 0xb8, 0xf4, 0x39, 0x3e, 0xf9, 0xaa, 0xcf, 0xf1, 0xd3, 0xf7, 0xf3, - 0xd4, 0xec, 0xf7, 0xf3, 0x0d, 0x51, 0x12, 0xe5, 0x54, 0xe5, 0x09, 0x48, 0x9c, 0x32, 0xa7, 0x5b, - 0x37, 0x61, 0xc6, 0xd6, 0xed, 0x42, 0x3f, 0x2b, 0xdf, 0x0a, 0x90, 0x8d, 0xff, 0xcf, 0x91, 0x88, - 0x50, 0xcf, 0xef, 0x1c, 0x5f, 0xf2, 0x49, 0x6e, 0x3a, 0x02, 0xc9, 0xd9, 0x23, 0x50, 0x39, 0x84, - 0x5c, 0x8c, 0x75, 0x4e, 0xb7, 0xfb, 0xc2, 0x4b, 0xb4, 0xfb, 0x6f, 0x41, 0x9a, 0x95, 0x5a, 0x98, - 0x48, 0x05, 0x66, 0x9d, 0x0a, 0xcb, 0x2c, 0xf5, 0x15, 0x29, 0xb1, 0xca, 0x6f, 0x05, 0xc8, 0xc7, - 0xf9, 0x08, 0x55, 0x21, 0x6b, 0x39, 0x03, 0x8f, 0x92, 0x01, 0x9d, 0x97, 0xa7, 0xe0, 0x44, 0x4c, - 0x58, 0x6a, 0x68, 0x39, 0x7d, 0xfa, 0x4c, 0x36, 0x95, 0xa6, 0xd2, 0xd0, 0x72, 0x76, 0x88, 0x94, - 0xaa, 0x18, 0x47, 0x4c, 0x25, 0x39, 0xa5, 0x62, 0x1c, 0x85, 0x2a, 0x15, 0x7a, 0xf0, 0x7b, 0x01, - 0xed, 0xcc, 0x93, 0xb1, 0xa3, 0xdc, 0x0b, 0xd0, 0x22, 0x64, 0x0e, 0x2d, 0x2f, 0x18, 0x1b, 0x36, - 0x6d, 0xc2, 0xf9, 0x55, 0x85, 0x0b, 0x2b, 0x07, 0x90, 0x8b, 0xf1, 0xd8, 0x0c, 0x1b, 0xfa, 0x9f, - 0x20, 0x46, 0x45, 0x35, 0x63, 0x4f, 0x4e, 0x0d, 0x2a, 0xbf, 0x14, 0x60, 0xe1, 0x3c, 0x26, 0x99, - 0x4a, 0x91, 0x30, 0x4e, 0x33, 0xa5, 0xc8, 0x14, 0xc3, 0x27, 0xce, 0x65, 0xf8, 0xc9, 0xce, 0x25, - 0x2f, 0xde, 0xb9, 0xea, 0xdb, 0xfc, 0xb2, 0x06, 0x90, 0xde, 0xda, 0x6e, 0xb4, 0xb4, 0xe6, 0xb9, - 0x17, 0x2d, 0x72, 0x25, 0x8b, 0x58, 0x99, 0x5c, 0xca, 0x15, 0xad, 0x5b, 0x6f, 0xb4, 0x54, 0x72, - 0x45, 0x2f, 0x40, 0x56, 0x57, 0xeb, 0x0a, 0xbd, 0xc1, 0xc9, 0xc2, 0x27, 0xe2, 0x37, 0xdf, 0x2d, - 0x09, 0xe1, 0x55, 0x6c, 0x43, 0x94, 0x90, 0x7c, 0xad, 0xfa, 0xbd, 0x00, 0x48, 0x31, 0x02, 0x83, - 0x30, 0xc0, 0x15, 0xee, 0x64, 0x89, 0x4b, 0x36, 0x62, 0xba, 0xcf, 0x4e, 0xbe, 0x4a, 0x9f, 0x1d, - 0x2e, 0xb8, 0xfa, 0xad, 0x00, 0x10, 0x5b, 0xdc, 0x67, 0xf1, 0x3f, 0x31, 0x2f, 0xbe, 0x52, 0x9c, - 0x3a, 0x2d, 0x1e, 0xcc, 0xf1, 0xbf, 0x38, 0xef, 0x83, 0x64, 0x32, 0x97, 0x59, 0xb6, 0x5c, 0xd8, - 0xbb, 0x9f, 0x89, 0xcc, 0x03, 0xb2, 0x8d, 0x4c, 0xda, 0xc8, 0x40, 0x6a, 0xec, 0x58, 0xae, 0xf3, - 0xee, 0x47, 0x80, 0xce, 0xb2, 0x27, 0x09, 0x3e, 0xfd, 0x6d, 0x04, 0xd8, 0x0c, 0x6f, 0xd9, 0xdb, - 0xce, 0x61, 0x24, 0x10, 0x1a, 0xb7, 0x9f, 0xff, 0x65, 0x71, 0xee, 0xf9, 0xc9, 0xa2, 0xf0, 0x87, - 0x93, 0x45, 0xe1, 0x8f, 0x27, 0x8b, 0xc2, 0x9f, 0x4f, 0x16, 0x85, 0xff, 0xff, 0xeb, 0xe2, 0xdc, - 0x17, 0x19, 0xb6, 0x80, 0x7f, 0x05, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x1f, 0x69, 0xb2, 0x1f, 0x22, - 0x00, 0x00, + proto.RegisterFile("sql/sqlbase/structured.proto", fileDescriptor_structured_1343287f2a3f2062) +} + +var fileDescriptor_structured_1343287f2a3f2062 = []byte{ + // 3198 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x59, 0xdd, 0x6f, 0x1b, 0xc7, + 0xb5, 0xd7, 0x92, 0xcb, 0xaf, 0xb3, 0xfc, 0x58, 0x8d, 0x65, 0x87, 0x66, 0x1c, 0x49, 0x66, 0xe2, + 0x5c, 0xe5, 0x8b, 0x72, 0xe4, 0xfb, 0x11, 0x24, 0x17, 0xc1, 0x25, 0xb9, 0x2b, 0x7b, 0x65, 0x8a, + 0x94, 0x97, 0x94, 0x1c, 0x07, 0xb9, 0x97, 0x58, 0x71, 0x47, 0xd2, 0xc6, 0xcb, 0x5d, 0x7a, 0x77, + 0xa9, 0x48, 0xff, 0x41, 0x9e, 0x2e, 0x8a, 0x3e, 0xb4, 0x6f, 0x41, 0x10, 0xf4, 0x21, 0x40, 0x5f, + 0xfb, 0xd0, 0x3f, 0xc1, 0x7d, 0x2b, 0xf2, 0xd4, 0x97, 0x1a, 0xad, 0x8a, 0x02, 0x7d, 0x2b, 0xd0, + 0xc7, 0x00, 0x05, 0x8a, 0x99, 0x9d, 0x59, 0x2e, 0xf5, 0x15, 0xca, 0x7e, 0xe3, 0x9e, 0x99, 0xf3, + 0x9b, 0x39, 0x67, 0xce, 0xf9, 0xcd, 0x39, 0x43, 0xb8, 0xe5, 0x3f, 0xb3, 0x57, 0xfd, 0x67, 0xf6, + 0xae, 0xe1, 0xe3, 0x55, 0x3f, 0xf0, 0xc6, 0x83, 0x60, 0xec, 0x61, 0xb3, 0x36, 0xf2, 0xdc, 0xc0, + 0x45, 0xd7, 0x07, 0xee, 0xe0, 0xa9, 0xe7, 0x1a, 0x83, 0x83, 0x9a, 0xff, 0xcc, 0xae, 0xb1, 0x79, + 0x95, 0xf2, 0x38, 0xb0, 0xec, 0xd5, 0x03, 0x7b, 0xb0, 0x1a, 0x58, 0x43, 0xec, 0x07, 0xc6, 0x70, + 0x14, 0x2a, 0x54, 0x5e, 0x8f, 0xc3, 0x8d, 0x3c, 0xeb, 0xd0, 0xb2, 0xf1, 0x3e, 0x66, 0x83, 0x0b, + 0xfb, 0xee, 0xbe, 0x4b, 0x7f, 0xae, 0x92, 0x5f, 0xa1, 0xb4, 0xfa, 0x43, 0x06, 0xa0, 0xe9, 0xda, + 0xe3, 0xa1, 0xd3, 0x3b, 0x1e, 0x61, 0xf4, 0x04, 0x0a, 0x3e, 0x1e, 0x1a, 0x4e, 0x60, 0x0d, 0xfa, + 0xc1, 0xf1, 0x08, 0x97, 0x85, 0x65, 0x61, 0xa5, 0xb8, 0x56, 0xab, 0x9d, 0xbb, 0x95, 0xda, 0x44, + 0xb3, 0xd6, 0x65, 0x6a, 0xe4, 0xa3, 0x21, 0x3e, 0x7f, 0xb1, 0x34, 0xa7, 0xe7, 0xfd, 0x98, 0x0c, + 0x55, 0x20, 0xf5, 0x95, 0x65, 0x06, 0x07, 0xe5, 0xc4, 0xb2, 0xb0, 0x92, 0x62, 0x53, 0x42, 0x11, + 0xaa, 0x42, 0x6e, 0xe4, 0xe1, 0x81, 0xe5, 0x5b, 0xae, 0x53, 0x4e, 0xc6, 0xc6, 0x27, 0x62, 0xf4, + 0x0e, 0xc8, 0x86, 0xe7, 0x19, 0xc7, 0x7d, 0xd3, 0x1a, 0x62, 0x87, 0x88, 0xfc, 0xb2, 0xb8, 0x9c, + 0x5c, 0x49, 0xe9, 0x25, 0x2a, 0x57, 0x22, 0x31, 0xba, 0x01, 0x69, 0xdb, 0x1d, 0x18, 0x36, 0x2e, + 0xa7, 0x96, 0x85, 0x95, 0x9c, 0xce, 0xbe, 0xd0, 0x0e, 0xe4, 0x0f, 0x2d, 0xdf, 0xda, 0xb5, 0x71, + 0x68, 0x5c, 0x9a, 0x1a, 0xf7, 0xc1, 0x4f, 0x1b, 0xb7, 0x13, 0x6a, 0xc5, 0x6c, 0x93, 0x0e, 0x27, + 0x22, 0xb4, 0x0d, 0xc5, 0x70, 0x6b, 0x03, 0xd7, 0x09, 0xb0, 0x13, 0xf8, 0xe5, 0xcc, 0xcb, 0xb8, + 0x4d, 0x2f, 0x50, 0x94, 0x26, 0x03, 0x41, 0x6d, 0x28, 0x06, 0xe3, 0x91, 0x8d, 0x27, 0xb0, 0xd9, + 0xe5, 0xe4, 0x8a, 0xb4, 0x76, 0xfb, 0x27, 0x61, 0xd9, 0x26, 0x0b, 0x54, 0x3d, 0xc2, 0xbb, 0x0d, + 0xf9, 0x10, 0xcf, 0x36, 0x76, 0xb1, 0xed, 0x97, 0x73, 0xcb, 0xc9, 0x95, 0x9c, 0x2e, 0x51, 0x59, + 0x8b, 0x8a, 0xaa, 0xdf, 0x27, 0x20, 0x1f, 0xdf, 0x12, 0xca, 0x82, 0xd8, 0xe8, 0x74, 0x5a, 0xf2, + 0x1c, 0xca, 0x40, 0x52, 0x6b, 0xf7, 0x64, 0x01, 0xe5, 0x20, 0xb5, 0xde, 0xea, 0xd4, 0x7b, 0x72, + 0x02, 0x49, 0x90, 0x51, 0xd4, 0xa6, 0xb6, 0x59, 0x6f, 0xc9, 0x49, 0x32, 0x55, 0xa9, 0xf7, 0x54, + 0x59, 0x44, 0x05, 0xc8, 0xf5, 0xb4, 0x4d, 0xb5, 0xdb, 0xab, 0x6f, 0x6e, 0xc9, 0x29, 0x94, 0x87, + 0xac, 0xd6, 0xee, 0xa9, 0xfa, 0x4e, 0xbd, 0x25, 0xa7, 0x11, 0x40, 0xba, 0xdb, 0xd3, 0xb5, 0xf6, + 0x7d, 0x39, 0x43, 0xa0, 0x1a, 0x4f, 0x7a, 0x6a, 0x57, 0xce, 0xa2, 0x12, 0x48, 0x91, 0x4e, 0xef, + 0x73, 0x39, 0x87, 0x10, 0x14, 0x9b, 0x9d, 0x56, 0xab, 0xde, 0x53, 0x15, 0x36, 0x1f, 0xc8, 0x12, + 0xed, 0xfa, 0xa6, 0x2a, 0x4b, 0x64, 0x37, 0x1d, 0x4d, 0x91, 0xf3, 0x54, 0xb4, 0xdd, 0x6a, 0xc9, + 0x05, 0xf2, 0x6b, 0x7b, 0x5b, 0x53, 0xe4, 0x22, 0x81, 0xad, 0xeb, 0x7a, 0xfd, 0x89, 0x5c, 0x22, + 0x42, 0xad, 0xad, 0xf6, 0x64, 0x99, 0xfc, 0x22, 0x0b, 0xc8, 0xf3, 0x64, 0x78, 0xa3, 0xdb, 0x69, + 0x37, 0x64, 0x44, 0x7e, 0xf6, 0xb6, 0xb7, 0x5a, 0xaa, 0xbc, 0x40, 0x10, 0x1b, 0x5a, 0x4f, 0xbe, + 0x8e, 0x4a, 0x00, 0x5a, 0xbb, 0xb7, 0xb6, 0xa3, 0x36, 0x7b, 0x1d, 0x5d, 0x7e, 0x2e, 0xa0, 0x22, + 0xe4, 0x3a, 0x9a, 0xc2, 0xbe, 0x7f, 0x27, 0x54, 0xc5, 0xec, 0x35, 0xf9, 0x5a, 0xf5, 0xe7, 0x02, + 0x48, 0xb1, 0xb8, 0xa0, 0x1b, 0xe9, 0xb4, 0x55, 0x79, 0x8e, 0x78, 0x85, 0xd8, 0x7b, 0x5f, 0xd5, + 0x65, 0x81, 0x18, 0xdf, 0xdd, 0xac, 0xb7, 0x5a, 0xc4, 0x77, 0x09, 0x62, 0x7c, 0x43, 0xbb, 0x4f, + 0x7e, 0x53, 0x7f, 0xe9, 0x6a, 0xbd, 0x25, 0xa7, 0xd0, 0x02, 0xc8, 0x4a, 0x67, 0xbb, 0xd1, 0x52, + 0xfb, 0x5b, 0xba, 0xda, 0xd4, 0xba, 0x5a, 0xa7, 0x2d, 0xa7, 0x09, 0xcc, 0x4e, 0x5d, 0x6f, 0x3e, + 0xa8, 0xeb, 0x72, 0x86, 0x4c, 0xa6, 0xbf, 0xb2, 0x64, 0xcb, 0x8f, 0xe8, 0xcf, 0x1c, 0x41, 0xdb, + 0xa9, 0xeb, 0x64, 0xd7, 0x50, 0x15, 0xb3, 0xa2, 0x2c, 0x7e, 0x2c, 0xfe, 0xed, 0xdb, 0x25, 0xa1, + 0xfa, 0x77, 0x11, 0xae, 0xad, 0xbb, 0x1e, 0xb6, 0xf6, 0x9d, 0x87, 0xf8, 0x58, 0xc7, 0x7b, 0xd8, + 0xc3, 0xce, 0x00, 0xa3, 0x65, 0x48, 0x05, 0xc6, 0xae, 0x1d, 0x66, 0x75, 0xa1, 0x01, 0x24, 0x48, + 0x7e, 0x7c, 0xb1, 0x94, 0xd0, 0x14, 0x3d, 0x1c, 0x40, 0x77, 0x20, 0x65, 0x39, 0x26, 0x3e, 0xa2, + 0x49, 0x5a, 0x68, 0x94, 0xd8, 0x8c, 0x8c, 0x46, 0x84, 0x64, 0x1a, 0x1d, 0x45, 0x65, 0x10, 0x1d, + 0x63, 0x88, 0x69, 0xaa, 0xe6, 0x58, 0xb0, 0x51, 0x09, 0x7a, 0x08, 0xd9, 0x43, 0xc3, 0xb6, 0x4c, + 0x2b, 0x38, 0x2e, 0x8b, 0x34, 0x09, 0xde, 0xb9, 0x30, 0x5a, 0x1d, 0x3f, 0xf0, 0x0c, 0xcb, 0x09, + 0x76, 0x98, 0x02, 0x03, 0x8a, 0x00, 0xd0, 0x5d, 0x98, 0xf7, 0x0f, 0x0c, 0x0f, 0x9b, 0xfd, 0x91, + 0x87, 0xf7, 0xac, 0xa3, 0xbe, 0x8d, 0x1d, 0x9a, 0xd2, 0x9c, 0x1e, 0x4a, 0xe1, 0xf0, 0x16, 0x1d, + 0x6d, 0x61, 0x07, 0xf5, 0x20, 0xe7, 0x3a, 0x7d, 0x13, 0xdb, 0x38, 0xe0, 0xe9, 0xfd, 0xe1, 0x05, + 0xeb, 0x9f, 0xe3, 0xa0, 0x5a, 0x7d, 0x10, 0x58, 0xae, 0xc3, 0xf7, 0xe1, 0x3a, 0x0a, 0x05, 0x62, + 0xa8, 0xe3, 0x91, 0x69, 0x04, 0x98, 0xa5, 0xf6, 0xab, 0xa0, 0x6e, 0x53, 0x20, 0xd4, 0x82, 0xd4, + 0xd0, 0x08, 0x06, 0x07, 0xe5, 0x2c, 0x45, 0xbc, 0x7b, 0x05, 0xc4, 0x4d, 0xa2, 0xc7, 0x29, 0x94, + 0x82, 0x54, 0x1f, 0x43, 0x3a, 0x5c, 0x87, 0x64, 0x5f, 0xbb, 0xd3, 0xaf, 0x37, 0x7b, 0x24, 0x8c, + 0xe6, 0x48, 0x00, 0xea, 0x2a, 0xc9, 0xa0, 0x66, 0x8f, 0x85, 0xa3, 0xda, 0xeb, 0xd3, 0x94, 0x49, + 0x90, 0xa4, 0x23, 0x5f, 0x8a, 0xba, 0x5e, 0xdf, 0x6e, 0x91, 0x98, 0x94, 0x20, 0xd3, 0xac, 0x77, + 0x9b, 0x75, 0x45, 0x95, 0xc5, 0x8a, 0xf8, 0xfd, 0xaf, 0x16, 0xe7, 0xaa, 0x6f, 0x42, 0x8a, 0x2e, + 0x47, 0x13, 0x57, 0xdb, 0x24, 0xc9, 0x32, 0x47, 0xc2, 0x71, 0x9d, 0x40, 0x08, 0x6c, 0xd2, 0x1f, + 0x13, 0x20, 0x87, 0xf4, 0xa3, 0x60, 0x7f, 0xe0, 0x59, 0xa3, 0xc0, 0xf5, 0xa2, 0x28, 0x11, 0xce, + 0x44, 0xc9, 0xdb, 0x90, 0xb0, 0x4c, 0x16, 0x63, 0x37, 0x88, 0xfc, 0x84, 0x46, 0xe1, 0x8f, 0x2f, + 0x96, 0xb2, 0x21, 0x8a, 0xa6, 0xe8, 0x09, 0xcb, 0x44, 0x9f, 0x80, 0x48, 0x89, 0x9a, 0xc4, 0xd9, + 0x15, 0x78, 0x8f, 0x2a, 0xa1, 0x65, 0xc8, 0x3a, 0x63, 0xdb, 0xa6, 0x01, 0x4f, 0x42, 0x31, 0xcb, + 0x4f, 0x80, 0x4b, 0x09, 0x21, 0x9a, 0x78, 0xcf, 0x18, 0xdb, 0x41, 0x1f, 0x1f, 0x8d, 0x3c, 0x76, + 0x5b, 0x48, 0x4c, 0xa6, 0x1e, 0x8d, 0x3c, 0x74, 0x0b, 0xd2, 0x07, 0x96, 0x69, 0x62, 0x87, 0x46, + 0x13, 0x87, 0x60, 0x32, 0xb4, 0x06, 0xf3, 0x63, 0x1f, 0xfb, 0x7d, 0x1f, 0x3f, 0x1b, 0x93, 0x83, + 0xe9, 0x5b, 0xa6, 0x5f, 0x86, 0xe5, 0xe4, 0x4a, 0xa1, 0x91, 0x66, 0x89, 0x55, 0x22, 0x13, 0xba, + 0x6c, 0x5c, 0x33, 0x29, 0x0b, 0x0f, 0xdc, 0xe1, 0x68, 0x1c, 0xe0, 0x70, 0x51, 0x29, 0x5c, 0x94, + 0xc9, 0xc8, 0xa2, 0x1b, 0x62, 0x36, 0x2b, 0xe7, 0x36, 0xc4, 0x6c, 0x4e, 0x86, 0x0d, 0x31, 0x9b, + 0x91, 0xb3, 0xd5, 0xaf, 0x13, 0x70, 0x23, 0x34, 0x73, 0xdd, 0x18, 0x5a, 0xf6, 0xf1, 0xab, 0x7a, + 0x39, 0x44, 0x61, 0x5e, 0xa6, 0x3b, 0x22, 0xd8, 0x7d, 0xa2, 0xe6, 0x97, 0x93, 0xe1, 0xbd, 0x10, + 0xca, 0xda, 0x44, 0x84, 0x3e, 0x02, 0x60, 0x53, 0x88, 0x85, 0x22, 0xb5, 0xf0, 0xe6, 0xc9, 0x8b, + 0xa5, 0x1c, 0x3f, 0x2e, 0x7f, 0xea, 0xec, 0x72, 0xe1, 0x64, 0x62, 0x6e, 0x07, 0xe6, 0xb9, 0x8f, + 0x23, 0x04, 0xea, 0xe8, 0x42, 0xe3, 0x4d, 0xb6, 0xa7, 0x92, 0x12, 0x4e, 0xe0, 0xea, 0x53, 0x50, + 0x25, 0x73, 0x6a, 0xd0, 0xac, 0xfe, 0x3a, 0x01, 0x0b, 0x9a, 0x13, 0x60, 0xcf, 0xc6, 0xc6, 0x21, + 0x8e, 0x39, 0xe2, 0x33, 0xc8, 0x19, 0xce, 0x00, 0xfb, 0x81, 0xeb, 0xf9, 0x65, 0x81, 0xde, 0x94, + 0xff, 0x7e, 0x41, 0xc4, 0x9c, 0xa7, 0x5f, 0xab, 0x33, 0x65, 0x5e, 0x7a, 0x44, 0x60, 0x95, 0xdf, + 0x0a, 0x90, 0xe5, 0xa3, 0xe8, 0x2e, 0x64, 0x29, 0x57, 0x12, 0x3b, 0x42, 0x1e, 0xbd, 0xce, 0xec, + 0xc8, 0xf4, 0x88, 0x9c, 0xee, 0x9f, 0x9c, 0x7c, 0x86, 0x4e, 0xd3, 0x4c, 0xf4, 0x1f, 0x90, 0xa5, + 0xb4, 0xd9, 0x8f, 0x4e, 0xa3, 0xc2, 0x35, 0x18, 0xaf, 0xc6, 0x29, 0x36, 0x43, 0xe7, 0x6a, 0x26, + 0x6a, 0x9e, 0xc7, 0x7e, 0x49, 0xaa, 0xff, 0x1a, 0xf7, 0x5c, 0x77, 0x9a, 0xff, 0xce, 0x10, 0x62, + 0xf5, 0xaf, 0x49, 0xb8, 0xb1, 0x65, 0x78, 0x81, 0x45, 0xa8, 0xc1, 0x72, 0xf6, 0x63, 0xfe, 0xba, + 0x03, 0x92, 0x33, 0x1e, 0xb2, 0x53, 0xf1, 0x99, 0x2d, 0xa1, 0xed, 0xe0, 0x8c, 0x87, 0xa1, 0xc3, + 0x7d, 0xd4, 0x02, 0xd1, 0xb6, 0xfc, 0xa0, 0x9c, 0xa0, 0x1e, 0x5d, 0xbb, 0xc0, 0xa3, 0xe7, 0xaf, + 0x51, 0x6b, 0x59, 0x7e, 0xc0, 0x63, 0x92, 0xa0, 0xa0, 0x0e, 0xa4, 0x3c, 0xc3, 0xd9, 0xc7, 0x34, + 0xc8, 0xa4, 0xb5, 0x7b, 0x57, 0x83, 0xd3, 0x89, 0x2a, 0xe7, 0x3d, 0x8a, 0x53, 0xf9, 0xa5, 0x00, + 0x22, 0x59, 0xe5, 0x92, 0x3c, 0xb8, 0x01, 0xe9, 0x43, 0xc3, 0x1e, 0x63, 0x9f, 0xda, 0x90, 0xd7, + 0xd9, 0x17, 0xfa, 0x5f, 0x28, 0xf9, 0xe3, 0xdd, 0x51, 0x6c, 0x29, 0x46, 0x34, 0x1f, 0x5c, 0x69, + 0x57, 0xd1, 0x5d, 0x34, 0x8d, 0x55, 0x79, 0x0a, 0x29, 0xba, 0xdf, 0x4b, 0x76, 0x46, 0x2a, 0x32, + 0xb7, 0x8f, 0x8f, 0x06, 0xf6, 0xd8, 0xb7, 0x0e, 0x31, 0x8d, 0x8e, 0xbc, 0x2e, 0x05, 0xae, 0xca, + 0x45, 0xe8, 0x0e, 0x14, 0xf7, 0x3c, 0x77, 0xd8, 0xb7, 0x1c, 0x3e, 0x29, 0x49, 0x27, 0x15, 0x88, + 0x54, 0xe3, 0xc2, 0xea, 0x3f, 0xb3, 0x50, 0xa2, 0x11, 0x34, 0x13, 0x33, 0xdc, 0x89, 0x31, 0xc3, + 0xf5, 0x29, 0x66, 0x88, 0xc2, 0x90, 0x10, 0xc3, 0x2d, 0x48, 0x8f, 0x1d, 0xeb, 0xd9, 0x38, 0x5c, + 0x33, 0x22, 0xbf, 0x50, 0x76, 0x86, 0x36, 0xc4, 0xb3, 0xb4, 0xf1, 0x3e, 0x20, 0x92, 0x33, 0xb8, + 0x3f, 0x35, 0x31, 0x45, 0x27, 0xca, 0x74, 0xa4, 0x79, 0x21, 0xc9, 0xa4, 0xaf, 0x40, 0x32, 0x0f, + 0x40, 0xc6, 0x47, 0x81, 0x67, 0xf4, 0x63, 0xfa, 0x19, 0xaa, 0xbf, 0x78, 0xf2, 0x62, 0xa9, 0xa8, + 0x92, 0xb1, 0xf3, 0x41, 0x8a, 0x38, 0x36, 0x66, 0x92, 0x98, 0x98, 0x67, 0x18, 0xa6, 0xe5, 0x61, + 0x7a, 0xa1, 0x86, 0x65, 0xf7, 0xc5, 0x17, 0xf4, 0x29, 0xb7, 0xd7, 0x14, 0xae, 0xa8, 0xcb, 0x21, + 0x54, 0x24, 0xf0, 0xd1, 0x23, 0x90, 0xf6, 0xc2, 0xfb, 0xbc, 0xff, 0x14, 0x1f, 0x97, 0x73, 0x34, + 0xdc, 0xde, 0x9d, 0xfd, 0xe6, 0xe7, 0xf9, 0xb9, 0x17, 0x0d, 0xa1, 0x6d, 0x28, 0x78, 0x7c, 0xd8, + 0xec, 0xef, 0x1e, 0xd3, 0xfb, 0xe7, 0x65, 0x40, 0xf3, 0x13, 0x98, 0xc6, 0x31, 0x7a, 0x04, 0x60, + 0x45, 0x2c, 0x49, 0x2f, 0x29, 0x69, 0xed, 0xbd, 0x2b, 0xd0, 0x29, 0xdf, 0xe9, 0x04, 0x04, 0x3d, + 0x86, 0xe2, 0xe4, 0x8b, 0x6e, 0x35, 0xff, 0x92, 0x5b, 0x2d, 0xc4, 0x70, 0x1a, 0xc7, 0xa8, 0x07, + 0x0b, 0xe4, 0xfa, 0x74, 0x7d, 0x2b, 0xc0, 0xf1, 0x10, 0x28, 0xd0, 0x10, 0xa8, 0x9e, 0xbc, 0x58, + 0x42, 0x4d, 0x3e, 0x7e, 0x7e, 0x18, 0xa0, 0xc1, 0xa9, 0xf1, 0x30, 0xa8, 0xa6, 0x82, 0x97, 0x20, + 0x16, 0x27, 0x41, 0xd5, 0x9d, 0x84, 0xef, 0x99, 0xa0, 0x8a, 0x85, 0x36, 0x41, 0x7a, 0x0c, 0xf9, + 0x29, 0x96, 0x29, 0xbd, 0x3c, 0xcb, 0x4c, 0x01, 0x21, 0x95, 0xd5, 0x47, 0x32, 0xad, 0x20, 0xdf, + 0x9b, 0x31, 0x40, 0x4f, 0x57, 0x4a, 0xd5, 0x45, 0xc8, 0x45, 0x31, 0x4a, 0xfa, 0xa0, 0x7a, 0xb7, + 0x19, 0xd6, 0x78, 0x8a, 0xda, 0x6d, 0xca, 0x42, 0xf5, 0x36, 0x88, 0xb4, 0xc5, 0x91, 0x20, 0xb3, + 0xde, 0xd1, 0x1f, 0xd7, 0x75, 0x25, 0xac, 0x2b, 0xb5, 0xf6, 0x8e, 0xaa, 0xf7, 0x54, 0x45, 0x16, + 0xaa, 0xff, 0x10, 0x01, 0x4d, 0x96, 0xd8, 0x1c, 0x07, 0x06, 0x05, 0xab, 0x43, 0x3a, 0xf4, 0x1e, + 0x25, 0x21, 0x69, 0xed, 0xdf, 0x2e, 0x2d, 0xe1, 0x26, 0x00, 0x0f, 0xe6, 0x74, 0xa6, 0x88, 0x3e, + 0x8d, 0xb7, 0x24, 0xd2, 0xda, 0xdb, 0xb3, 0x19, 0xf9, 0x60, 0x8e, 0xf7, 0x2a, 0x0f, 0x21, 0xe5, + 0x07, 0xa4, 0x70, 0x4f, 0x52, 0x27, 0xad, 0x5e, 0xa0, 0x7f, 0x76, 0xf3, 0xb5, 0x2e, 0x51, 0xe3, + 0xb7, 0x0d, 0xc5, 0x40, 0x8f, 0x21, 0x17, 0xf1, 0x02, 0xeb, 0x6f, 0xee, 0xcd, 0x0e, 0x18, 0x39, + 0x99, 0x97, 0x18, 0x11, 0x16, 0xaa, 0x83, 0x34, 0x64, 0xd3, 0x26, 0x05, 0xd2, 0x32, 0xa3, 0x66, + 0xe0, 0x08, 0x94, 0xa2, 0x63, 0x5f, 0x3a, 0x70, 0x25, 0xcd, 0x24, 0xf5, 0xae, 0xe7, 0xda, 0xf6, + 0xae, 0x31, 0x78, 0x4a, 0x9b, 0x94, 0xa8, 0xde, 0xe5, 0x52, 0xd4, 0x86, 0xd4, 0xe0, 0x00, 0x0f, + 0x9e, 0xd2, 0x8e, 0x43, 0x5a, 0xfb, 0xcf, 0x0b, 0x76, 0x4e, 0xcb, 0x98, 0x58, 0xbc, 0x34, 0x89, + 0xce, 0xa4, 0x5d, 0x23, 0xae, 0xa5, 0x30, 0xd5, 0xff, 0x81, 0x14, 0xf5, 0x11, 0x09, 0x8c, 0xed, + 0xf6, 0xc3, 0x76, 0xe7, 0x31, 0x69, 0x38, 0x4a, 0x20, 0x29, 0x6a, 0x4b, 0xed, 0xa9, 0xfd, 0x4e, + 0xbb, 0xf5, 0x44, 0x16, 0xd0, 0x4d, 0xb8, 0xce, 0x04, 0xf5, 0xb6, 0xd2, 0x7f, 0xac, 0x6b, 0x7c, + 0x28, 0x51, 0x5d, 0x89, 0x47, 0xde, 0xa4, 0x83, 0x26, 0x31, 0xa8, 0x28, 0xb2, 0x40, 0x63, 0x50, + 0xef, 0x6c, 0xc9, 0x89, 0x46, 0x1e, 0xc0, 0x8c, 0xb6, 0xb4, 0x21, 0x66, 0xd3, 0x72, 0xa6, 0xfa, + 0xff, 0xaf, 0x43, 0xe9, 0xd4, 0x66, 0x2f, 0xb9, 0xf4, 0x96, 0xe9, 0xa5, 0x17, 0x16, 0x50, 0xf2, + 0xd4, 0xa5, 0x97, 0x60, 0xf7, 0xdd, 0x3d, 0xc8, 0x8d, 0x0c, 0x0f, 0x3b, 0x01, 0x39, 0x02, 0x71, + 0xaa, 0x6e, 0xce, 0x6e, 0xd1, 0x81, 0x68, 0x7a, 0x36, 0x9c, 0xa8, 0x11, 0xa5, 0xcc, 0x21, 0xf6, + 0xe8, 0xcb, 0x55, 0x78, 0x6a, 0x37, 0x59, 0xd3, 0x3c, 0x3f, 0xd9, 0xd5, 0x4e, 0x38, 0x41, 0xe7, + 0x33, 0xd1, 0x16, 0xcc, 0x0f, 0x5d, 0xd3, 0xda, 0xb3, 0x06, 0xe1, 0x91, 0x07, 0xd6, 0x30, 0xec, + 0x2c, 0xa5, 0xb5, 0x37, 0x62, 0xa7, 0x32, 0x0e, 0x2c, 0xbb, 0x76, 0x60, 0x0f, 0x6a, 0x3d, 0xfe, + 0xd2, 0xc7, 0x2c, 0x92, 0xe3, 0xda, 0x64, 0x10, 0xdd, 0x87, 0x0c, 0xaf, 0xe4, 0xc2, 0x57, 0xa2, + 0x59, 0x53, 0x8d, 0x21, 0x72, 0x6d, 0xb4, 0x0e, 0x45, 0x07, 0x1f, 0xc5, 0xab, 0xf5, 0xdc, 0x54, + 0x30, 0xe6, 0xdb, 0xf8, 0xe8, 0xfc, 0x52, 0x3d, 0xef, 0x4c, 0x46, 0x4c, 0xf4, 0x08, 0x0a, 0x23, + 0xcf, 0x1a, 0x1a, 0xde, 0x71, 0x3f, 0xcc, 0x5f, 0xb8, 0x4a, 0xfe, 0x46, 0x74, 0x17, 0x42, 0xd0, + 0x51, 0xb4, 0x0e, 0x61, 0x71, 0x8c, 0xfd, 0xb2, 0x44, 0x6d, 0xbc, 0x1a, 0x18, 0x57, 0x46, 0x0d, + 0x28, 0x50, 0x13, 0xa3, 0xaa, 0x3c, 0x4f, 0x2d, 0x5c, 0x64, 0x16, 0x4a, 0xc4, 0xc2, 0x73, 0x2a, + 0x73, 0xc9, 0x89, 0xe4, 0x26, 0xda, 0x00, 0x88, 0x5e, 0x58, 0xc9, 0x4d, 0x73, 0xd9, 0x45, 0xbe, + 0xc5, 0x27, 0x4e, 0xb6, 0xa4, 0xc7, 0xb4, 0xd1, 0x26, 0xe4, 0x78, 0x1e, 0x87, 0x57, 0x8c, 0x74, + 0xe1, 0xab, 0xc9, 0x59, 0x56, 0xe1, 0x5c, 0x12, 0x21, 0x90, 0x34, 0xb7, 0xb1, 0xe1, 0x63, 0x76, + 0xcf, 0x7c, 0x34, 0x63, 0x9a, 0x77, 0x07, 0x07, 0x78, 0x68, 0x34, 0x0f, 0x48, 0xcd, 0xda, 0x22, + 0xfa, 0x7a, 0x08, 0x83, 0xda, 0x20, 0x53, 0x77, 0xc5, 0x09, 0x4a, 0xa6, 0x1e, 0x7b, 0x8b, 0x79, + 0xac, 0x48, 0x3c, 0x76, 0x21, 0x49, 0xd1, 0x78, 0xda, 0x9c, 0x10, 0xd5, 0x7f, 0x43, 0x71, 0xcf, + 0xf5, 0x86, 0x46, 0xd0, 0xe7, 0x89, 0x33, 0x3f, 0xa9, 0x44, 0x7f, 0x7c, 0xb1, 0x54, 0x58, 0xa7, + 0xa3, 0x3c, 0x69, 0x0a, 0x7b, 0xf1, 0x4f, 0xf4, 0x80, 0xf3, 0xf9, 0x35, 0x4a, 0xbf, 0xef, 0xcf, + 0x6a, 0xdd, 0x59, 0x32, 0x6f, 0x43, 0x9a, 0xf2, 0x98, 0x5f, 0x5e, 0xa0, 0x3e, 0x7f, 0x49, 0x3e, + 0xd4, 0x19, 0x0a, 0xfa, 0x02, 0x8a, 0x26, 0x91, 0x58, 0xce, 0x3e, 0xab, 0x74, 0xaf, 0x53, 0xdc, + 0xd5, 0x19, 0x71, 0x49, 0x15, 0xac, 0x39, 0x7b, 0x2e, 0x2f, 0x72, 0x38, 0x58, 0x58, 0x1d, 0x77, + 0x20, 0xbb, 0x47, 0xba, 0x76, 0x0b, 0xfb, 0xe5, 0x1b, 0x14, 0xf7, 0xf2, 0x87, 0xeb, 0xd3, 0x0f, + 0x05, 0xfc, 0x36, 0xe0, 0x20, 0x51, 0xa2, 0x53, 0xc1, 0x31, 0x39, 0xd4, 0xd7, 0xce, 0x26, 0x3a, + 0x7f, 0x28, 0x98, 0x7a, 0x34, 0xa0, 0x89, 0xce, 0xbe, 0x4c, 0xf4, 0x26, 0xc0, 0xa1, 0x85, 0xbf, + 0xea, 0x3f, 0x1b, 0x63, 0xef, 0xb8, 0x5c, 0x8e, 0xf1, 0x6e, 0x8e, 0xc8, 0x1f, 0x11, 0x31, 0xfa, + 0x10, 0x72, 0x26, 0x1e, 0x61, 0xc7, 0xf4, 0x3b, 0x4e, 0xf9, 0x26, 0xad, 0xa2, 0xae, 0x91, 0xd2, + 0x5e, 0xe1, 0x42, 0xc6, 0xab, 0x93, 0x59, 0xe8, 0x4b, 0xc8, 0x87, 0x1f, 0xd8, 0xec, 0x38, 0x8d, + 0xe3, 0x72, 0x85, 0x1a, 0x7d, 0x77, 0x46, 0x67, 0x4e, 0x4a, 0xc6, 0x05, 0x6e, 0x8f, 0x12, 0x43, + 0xd3, 0xa7, 0xb0, 0xd1, 0x17, 0x90, 0xe7, 0xd1, 0xbd, 0xe1, 0xee, 0xfa, 0xe5, 0xd7, 0x2f, 0x6d, + 0x76, 0x4f, 0xaf, 0xb5, 0x39, 0x51, 0xe5, 0xbc, 0x15, 0x47, 0x43, 0x9f, 0x41, 0x21, 0x7a, 0x21, + 0x72, 0x47, 0x81, 0x5f, 0xbe, 0x45, 0x13, 0xf3, 0xde, 0xac, 0xa1, 0xcb, 0x74, 0x3b, 0xa3, 0xc0, + 0xd7, 0xf3, 0x7e, 0xec, 0x0b, 0xdd, 0x86, 0x9c, 0xe9, 0xb9, 0xa3, 0xf0, 0xfe, 0x78, 0x63, 0x59, + 0x58, 0x49, 0xf2, 0x63, 0x26, 0x62, 0x7a, 0x31, 0xf4, 0xa1, 0xe8, 0xe1, 0x91, 0x6d, 0x0c, 0xf0, + 0x90, 0xdc, 0x6c, 0xee, 0x5e, 0x79, 0x91, 0xae, 0xbe, 0x36, 0xb3, 0x23, 0x23, 0x65, 0x1e, 0x98, + 0x31, 0xbc, 0xce, 0x1e, 0xda, 0x06, 0x30, 0xc6, 0xa6, 0x15, 0xf4, 0x87, 0xae, 0x89, 0xcb, 0x4b, + 0x97, 0x3e, 0x66, 0x9e, 0x06, 0xaf, 0x13, 0xc5, 0x4d, 0xd7, 0xc4, 0xd1, 0xa3, 0x0b, 0x17, 0xa0, + 0x0f, 0x41, 0xa2, 0xa6, 0x7d, 0xe9, 0xee, 0x92, 0xd8, 0x5c, 0xa6, 0xc6, 0xcd, 0xb3, 0xb3, 0xcc, + 0x29, 0x9e, 0x3b, 0xda, 0x70, 0x77, 0x69, 0xc4, 0xb0, 0x9f, 0x26, 0xf2, 0x21, 0xbf, 0x3f, 0xe8, + 0x4f, 0xa8, 0xf4, 0x36, 0x3d, 0xc5, 0x4f, 0x66, 0xdc, 0xcb, 0xfd, 0xe6, 0x39, 0xe4, 0x7a, 0x8d, + 0xdf, 0x09, 0xf7, 0x9b, 0x5c, 0xe6, 0xeb, 0xd2, 0xfe, 0x20, 0xfa, 0xa8, 0x7c, 0x27, 0xc0, 0xfc, + 0x19, 0xea, 0x44, 0xff, 0x07, 0x19, 0xc7, 0x35, 0x63, 0x8f, 0x44, 0x2a, 0x03, 0x4a, 0xb7, 0x5d, + 0x33, 0x7c, 0x23, 0xba, 0xb7, 0x6f, 0x05, 0x07, 0xe3, 0xdd, 0xda, 0xc0, 0x1d, 0xae, 0x46, 0x3b, + 0x34, 0x77, 0x27, 0xbf, 0x57, 0x47, 0x4f, 0xf7, 0x57, 0xe9, 0xaf, 0xd1, 0x6e, 0x2d, 0x54, 0xd3, + 0xd3, 0x04, 0x55, 0x33, 0xd1, 0x07, 0x50, 0xc2, 0x47, 0x23, 0xcb, 0x8b, 0x95, 0x0f, 0x89, 0xd8, + 0xf1, 0x17, 0x27, 0x83, 0x24, 0x08, 0x2a, 0x3f, 0x08, 0x50, 0x3a, 0x45, 0x5b, 0xa4, 0x52, 0xa2, + 0x0f, 0x90, 0x53, 0x95, 0x12, 0x91, 0x44, 0x35, 0x54, 0xe2, 0xd2, 0xe7, 0xfd, 0xe4, 0xab, 0x3e, + 0xef, 0x4f, 0xf7, 0xfb, 0xa9, 0xd9, 0xfb, 0xfd, 0x0d, 0x31, 0x2b, 0xca, 0xa9, 0xca, 0x13, 0xc8, + 0x72, 0xca, 0x9c, 0x2e, 0xdd, 0x84, 0x19, 0x4b, 0xb7, 0x0b, 0xed, 0xac, 0x7c, 0x23, 0x40, 0x2e, + 0xfe, 0xbf, 0x49, 0x22, 0x42, 0x3d, 0xbf, 0x72, 0x7c, 0xc9, 0x27, 0xbe, 0x69, 0x0f, 0x24, 0x67, + 0xf7, 0x40, 0xe5, 0x10, 0xa4, 0x18, 0xeb, 0x9c, 0x6e, 0x1f, 0x84, 0x97, 0x68, 0x1f, 0xde, 0x82, + 0x34, 0x4b, 0xb5, 0x30, 0x90, 0x0a, 0x4c, 0x3b, 0x15, 0xa6, 0x59, 0xea, 0x4b, 0x92, 0x62, 0x95, + 0xdf, 0x08, 0x90, 0x8f, 0xf3, 0x11, 0xaa, 0x42, 0xce, 0x72, 0x06, 0x1e, 0x25, 0x03, 0xba, 0x2e, + 0x0f, 0xc1, 0x89, 0x98, 0xb0, 0xd4, 0xd0, 0x72, 0xfa, 0xf4, 0xd9, 0x6d, 0x2a, 0x4c, 0xb3, 0x43, + 0xcb, 0xd9, 0x21, 0x52, 0x3a, 0xc5, 0x38, 0x62, 0x53, 0x92, 0x53, 0x53, 0x8c, 0xa3, 0x70, 0x4a, + 0x85, 0x5e, 0xfc, 0x5e, 0x40, 0x2b, 0xf3, 0x64, 0xec, 0x2a, 0xf7, 0x02, 0xb4, 0x08, 0x99, 0x43, + 0xcb, 0x0b, 0xc6, 0x86, 0x4d, 0x8b, 0x70, 0xde, 0xfa, 0x70, 0x61, 0xe5, 0x00, 0xa4, 0x18, 0x8f, + 0xcd, 0x70, 0xa0, 0xff, 0x05, 0x62, 0x94, 0x54, 0x33, 0xd6, 0xe4, 0x54, 0xa1, 0xf2, 0x0b, 0x01, + 0x16, 0xce, 0x63, 0x92, 0xa9, 0x10, 0x09, 0xfd, 0x34, 0x53, 0x88, 0x4c, 0x31, 0x7c, 0xe2, 0x5c, + 0x86, 0x9f, 0x9c, 0x5c, 0xf2, 0xe2, 0x93, 0xab, 0xbe, 0xcd, 0x9b, 0x35, 0x80, 0xf4, 0xd6, 0x76, + 0xa3, 0xa5, 0x35, 0xcf, 0x6d, 0xb4, 0x48, 0x4b, 0x16, 0xb1, 0x32, 0x69, 0xf2, 0x15, 0xad, 0x5b, + 0x6f, 0xb4, 0x54, 0xd2, 0xf2, 0x17, 0x20, 0xa7, 0xab, 0x75, 0x85, 0x76, 0x70, 0xb2, 0xf0, 0xb1, + 0xf8, 0xf5, 0xb7, 0x4b, 0x42, 0xd8, 0x8a, 0x6d, 0x88, 0x59, 0x24, 0x5f, 0xab, 0x7e, 0x27, 0x00, + 0x52, 0x8c, 0xc0, 0x20, 0x0c, 0x70, 0x85, 0x9e, 0x2c, 0x71, 0xc9, 0x41, 0x4c, 0xd7, 0xd9, 0xc9, + 0x57, 0xa9, 0xb3, 0xc3, 0x0d, 0x57, 0xbf, 0x11, 0x00, 0x62, 0x9b, 0xfb, 0x34, 0xfe, 0xa7, 0xe8, + 0xc5, 0x2d, 0xc5, 0xa9, 0xdb, 0x82, 0x34, 0xc1, 0xe1, 0x5f, 0xa6, 0xf7, 0x21, 0x6b, 0x32, 0x93, + 0x59, 0xb4, 0x5c, 0x58, 0xbb, 0x9f, 0xf1, 0xcc, 0x03, 0x72, 0x8c, 0x4c, 0xda, 0xc8, 0x40, 0x6a, + 0xec, 0x58, 0xae, 0xf3, 0xae, 0x02, 0xe8, 0x2c, 0x7b, 0x12, 0xe7, 0xd3, 0xdf, 0x46, 0x80, 0xcd, + 0xb0, 0xcb, 0xde, 0x76, 0x0e, 0x23, 0x81, 0x80, 0x8a, 0x00, 0x6c, 0xdc, 0x72, 0xf6, 0xe5, 0x44, + 0xe3, 0xf6, 0xf3, 0x3f, 0x2f, 0xce, 0x3d, 0x3f, 0x59, 0x14, 0x7e, 0x7f, 0xb2, 0x28, 0xfc, 0xe1, + 0x64, 0x51, 0xf8, 0xd3, 0xc9, 0xa2, 0xf0, 0xb3, 0xbf, 0x2c, 0xce, 0x7d, 0x9e, 0x61, 0x1b, 0xfa, + 0x57, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd7, 0xda, 0xd1, 0xc1, 0x7f, 0x22, 0x00, 0x00, } diff --git a/pkg/sql/sqlbase/structured.proto b/pkg/sql/sqlbase/structured.proto index 45f613ea549b..1c45a8c50b07 100644 --- a/pkg/sql/sqlbase/structured.proto +++ b/pkg/sql/sqlbase/structured.proto @@ -193,6 +193,7 @@ message ColumnType { enum ConstraintValidity { Validated = 0; Unvalidated = 1; + Validating = 2; } message ForeignKeyReference { @@ -497,6 +498,7 @@ message DescriptorMutation { oneof descriptor { ColumnDescriptor column = 1; IndexDescriptor index = 2; + TableDescriptor.CheckConstraint check = 8; } // A descriptor within a mutation is unavailable for reads, writes // and deletes. It is only available for implicit (internal to @@ -654,7 +656,7 @@ message TableDescriptor { reserved 4; // An ordered list of column IDs used by the check constraint. repeated uint32 column_ids = 5 [(gogoproto.customname) = "ColumnIDs", - (gogoproto.casttype) = "ColumnID"]; + (gogoproto.casttype) = "ColumnID"]; } repeated CheckConstraint checks = 20; diff --git a/pkg/sql/sqlbase/table.go b/pkg/sql/sqlbase/table.go index dbf59cd7ebf4..7e7baba013f4 100644 --- a/pkg/sql/sqlbase/table.go +++ b/pkg/sql/sqlbase/table.go @@ -347,12 +347,12 @@ func (desc *TableDescriptor) collectConstraintInfo( } } - for _, c := range desc.Checks { + for _, c := range desc.allNonDropChecks() { if _, ok := info[c.Name]; ok { return nil, errors.Errorf("duplicate constraint name: %q", c.Name) } detail := ConstraintDetail{Kind: ConstraintTypeCheck} - detail.Unvalidated = c.Validity == ConstraintValidity_Unvalidated + detail.Unvalidated = c.Validity != ConstraintValidity_Validated if tableLookup != nil { detail.Details = c.Expr detail.CheckConstraint = c