From 84347806090eaadfc42d777c3d18eb450cd09149 Mon Sep 17 00:00:00 2001 From: James Cor Date: Tue, 7 Mar 2023 16:54:25 -0800 Subject: [PATCH] keyless duplicate update --- .../sqle/writer/prolly_index_writer_keyless.go | 8 +++++--- .../doltcore/sqle/writer/prolly_table_writer.go | 12 ++++++------ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/go/libraries/doltcore/sqle/writer/prolly_index_writer_keyless.go b/go/libraries/doltcore/sqle/writer/prolly_index_writer_keyless.go index 32dea02870..c1716d99ae 100644 --- a/go/libraries/doltcore/sqle/writer/prolly_index_writer_keyless.go +++ b/go/libraries/doltcore/sqle/writer/prolly_index_writer_keyless.go @@ -160,14 +160,16 @@ func (k prollyKeylessWriter) uniqueKeyError(ctx context.Context, keyStr string, vd := k.valBld.Desc for from := range k.valMap { to := k.valMap.MapOrdinal(from) - if existing[to], err = index.GetField(ctx, vd, from, value, k.mut.NodeStore()); err != nil { - return err - } + // always skip first field of keyless, as it's the count? + if existing[to], err = index.GetField(ctx, vd, from+1, value, k.mut.NodeStore()); err != nil { + return err + } } return }) return sql.NewUniqueKeyErr(keyStr, isPk, existing) + // TODO: skip over the ordinals that are the unique column } type secondaryUniqueKeyError struct { diff --git a/go/libraries/doltcore/sqle/writer/prolly_table_writer.go b/go/libraries/doltcore/sqle/writer/prolly_table_writer.go index 11fbe84f44..5df5308dd7 100755 --- a/go/libraries/doltcore/sqle/writer/prolly_table_writer.go +++ b/go/libraries/doltcore/sqle/writer/prolly_table_writer.go @@ -133,27 +133,27 @@ func getSecondaryKeylessProllyWriters(ctx context.Context, t *doltdb.Table, sqlS // Insert implements TableWriter. func (w *prollyTableWriter) Insert(ctx *sql.Context, sqlRow sql.Row) (err error) { - if err := w.primary.ValidateKeyViolations(ctx, sqlRow); err != nil { + if err = w.primary.ValidateKeyViolations(ctx, sqlRow); err != nil { return err } for _, wr := range w.secondary { - if err := wr.ValidateKeyViolations(ctx, sqlRow); err != nil { + if err = wr.ValidateKeyViolations(ctx, sqlRow); err != nil { if uke, ok := err.(secondaryUniqueKeyError); ok { return w.primary.(primaryIndexErrBuilder).errForSecondaryUniqueKeyError(ctx, uke) } } } - if err := w.primary.Insert(ctx, sqlRow); err != nil { - return err - } for _, wr := range w.secondary { - if err := wr.Insert(ctx, sqlRow); err != nil { + if err = wr.Insert(ctx, sqlRow); err != nil { if uke, ok := err.(secondaryUniqueKeyError); ok { return w.primary.(primaryIndexErrBuilder).errForSecondaryUniqueKeyError(ctx, uke) } return err } } + if err = w.primary.Insert(ctx, sqlRow); err != nil { + return err + } return nil }