Skip to content

Commit 3168e4e

Browse files
committed
Support multiple schema for the rest of the system tables with for doltgres
1 parent de1a434 commit 3168e4e

File tree

8 files changed

+129
-103
lines changed

8 files changed

+129
-103
lines changed

go/libraries/doltcore/sqle/database.go

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,14 @@ func (db Database) getTableInsensitive(ctx *sql.Context, head *doltdb.Commit, ds
321321
// at runtime
322322
switch {
323323
case strings.HasPrefix(lwrName, doltdb.DoltDiffTablePrefix):
324+
if resolve.UseSearchPath && db.schemaName == "" {
325+
schemaName, err := resolve.FirstExistingSchemaOnSearchPath(ctx, root)
326+
if err != nil {
327+
return nil, false, err
328+
}
329+
db.schemaName = schemaName
330+
}
331+
324332
if head == nil {
325333
var err error
326334
head, err = ds.GetHeadCommit(ctx, db.RevisionQualifiedName())
@@ -331,19 +339,27 @@ func (db Database) getTableInsensitive(ctx *sql.Context, head *doltdb.Commit, ds
331339
}
332340

333341
tableName := tblName[len(doltdb.DoltDiffTablePrefix):]
334-
dt, err := dtables.NewDiffTable(ctx, db.Name(), tableName, db.ddb, root, head)
342+
dt, err := dtables.NewDiffTable(ctx, db.Name(), doltdb.TableName{Name: tableName, Schema: db.schemaName}, db.ddb, root, head)
335343
if err != nil {
336344
return nil, false, err
337345
}
338346
return dt, true, nil
339347

340348
case strings.HasPrefix(lwrName, doltdb.DoltCommitDiffTablePrefix):
349+
if resolve.UseSearchPath && db.schemaName == "" {
350+
schemaName, err := resolve.FirstExistingSchemaOnSearchPath(ctx, root)
351+
if err != nil {
352+
return nil, false, err
353+
}
354+
db.schemaName = schemaName
355+
}
356+
341357
suffix := tblName[len(doltdb.DoltCommitDiffTablePrefix):]
342358
ws, err := ds.WorkingSet(ctx, db.RevisionQualifiedName())
343359
if err != nil {
344360
return nil, false, err
345361
}
346-
dt, err := dtables.NewCommitDiffTable(ctx, db.Name(), suffix, db.ddb, root, ws.StagedRoot())
362+
dt, err := dtables.NewCommitDiffTable(ctx, db.Name(), doltdb.TableName{Name: suffix, Schema: db.schemaName}, db.ddb, root, ws.StagedRoot())
347363
if err != nil {
348364
return nil, false, err
349365
}
@@ -385,27 +401,50 @@ func (db Database) getTableInsensitive(ctx *sql.Context, head *doltdb.Commit, ds
385401
}
386402

387403
case strings.HasPrefix(lwrName, doltdb.DoltConfTablePrefix):
404+
if resolve.UseSearchPath && db.schemaName == "" {
405+
schemaName, err := resolve.FirstExistingSchemaOnSearchPath(ctx, root)
406+
if err != nil {
407+
return nil, false, err
408+
}
409+
db.schemaName = schemaName
410+
}
411+
388412
suffix := tblName[len(doltdb.DoltConfTablePrefix):]
389413
srcTable, ok, err := db.getTableInsensitive(ctx, head, ds, root, suffix, asOf)
390414
if err != nil {
391415
return nil, false, err
392416
} else if !ok {
393417
return nil, false, nil
394418
}
395-
dt, err := dtables.NewConflictsTable(ctx, suffix, srcTable, root, dtables.RootSetter(db))
419+
dt, err := dtables.NewConflictsTable(ctx, doltdb.TableName{Name: suffix, Schema: db.schemaName}, srcTable, root, dtables.RootSetter(db))
396420
if err != nil {
397421
return nil, false, err
398422
}
399423
return dt, true, nil
400424

401425
case strings.HasPrefix(lwrName, doltdb.DoltConstViolTablePrefix):
426+
if resolve.UseSearchPath && db.schemaName == "" {
427+
schemaName, err := resolve.FirstExistingSchemaOnSearchPath(ctx, root)
428+
if err != nil {
429+
return nil, false, err
430+
}
431+
db.schemaName = schemaName
432+
}
433+
402434
suffix := tblName[len(doltdb.DoltConstViolTablePrefix):]
403-
dt, err := dtables.NewConstraintViolationsTable(ctx, suffix, root, dtables.RootSetter(db))
435+
dt, err := dtables.NewConstraintViolationsTable(ctx, doltdb.TableName{Name: suffix, Schema: db.schemaName}, root, dtables.RootSetter(db))
404436
if err != nil {
405437
return nil, false, err
406438
}
407439
return dt, true, nil
408440
case strings.HasPrefix(lwrName, doltdb.DoltWorkspaceTablePrefix):
441+
if resolve.UseSearchPath && db.schemaName == "" {
442+
schemaName, err := resolve.FirstExistingSchemaOnSearchPath(ctx, root)
443+
if err != nil {
444+
return nil, false, err
445+
}
446+
db.schemaName = schemaName
447+
}
409448
sess := dsess.DSessFromSess(ctx.Session)
410449

411450
ws, err := sess.WorkingSet(ctx, db.RevisionQualifiedName())
@@ -418,7 +457,7 @@ func (db Database) getTableInsensitive(ctx *sql.Context, head *doltdb.Commit, ds
418457

419458
userTable := tblName[len(doltdb.DoltWorkspaceTablePrefix):]
420459

421-
dt, err := dtables.NewWorkspaceTable(ctx, tblName, userTable, head, ws)
460+
dt, err := dtables.NewWorkspaceTable(ctx, tblName, doltdb.TableName{Name: userTable, Schema: db.schemaName}, head, ws)
422461
if err != nil {
423462
return nil, false, err
424463
}
@@ -1627,7 +1666,7 @@ func (db Database) GetViewDefinition(ctx *sql.Context, viewName string) (sql.Vie
16271666
case strings.HasPrefix(lwrViewName, doltdb.DoltBlameViewPrefix):
16281667
tableName := lwrViewName[len(doltdb.DoltBlameViewPrefix):]
16291668

1630-
blameViewTextDef, err := dtables.NewBlameView(ctx, tableName, root)
1669+
blameViewTextDef, err := dtables.NewBlameView(ctx, doltdb.TableName{Name: tableName, Schema: db.schemaName}, root)
16311670
if err != nil {
16321671
return sql.ViewDefinition{}, false, err
16331672
}

go/libraries/doltcore/sqle/dtables/blame_view.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ const (
6767
// NewBlameView returns a view expression for the DOLT_BLAME system view for the specified table.
6868
// The DOLT_BLAME system view is a view on the DOLT_DIFF system table that shows the latest commit
6969
// for each primary key in the specified table.
70-
func NewBlameView(ctx *sql.Context, tableName string, root doltdb.RootValue) (string, error) {
71-
table, _, ok, err := doltdb.GetTableInsensitive(ctx, root, doltdb.TableName{Name: tableName})
70+
func NewBlameView(ctx *sql.Context, tableName doltdb.TableName, root doltdb.RootValue) (string, error) {
71+
table, _, ok, err := doltdb.GetTableInsensitive(ctx, root, tableName)
7272
if err != nil {
7373
return "", err
7474
}
@@ -81,7 +81,7 @@ func NewBlameView(ctx *sql.Context, tableName string, root doltdb.RootValue) (st
8181
return "", nil
8282
}
8383

84-
blameViewExpression, err := createDoltBlameViewExpression(tableName, sch.GetPKCols().GetColumns())
84+
blameViewExpression, err := createDoltBlameViewExpression(tableName.Name, sch.GetPKCols().GetColumns())
8585
if err != nil {
8686
return "", err
8787
}

go/libraries/doltcore/sqle/dtables/commit_diff_table.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
"github.com/dolthub/dolt/go/libraries/doltcore/rowconv"
2828
"github.com/dolthub/dolt/go/libraries/doltcore/schema"
2929
"github.com/dolthub/dolt/go/libraries/doltcore/sqle/index"
30-
"github.com/dolthub/dolt/go/libraries/doltcore/sqle/resolve"
3130
"github.com/dolthub/dolt/go/libraries/doltcore/sqle/sqlutil"
3231
"github.com/dolthub/dolt/go/store/types"
3332
)
@@ -39,7 +38,7 @@ var ErrExactlyOneFromCommit = errors.New("dolt_commit_diff_* tables must be filt
3938
var ErrInvalidCommitDiffTableArgs = errors.New("commit_diff_<table> requires one 'to_commit' and one 'from_commit'")
4039

4140
type CommitDiffTable struct {
42-
name string
41+
tableName doltdb.TableName
4342
dbName string
4443
ddb *doltdb.DoltDB
4544
joiner *rowconv.Joiner
@@ -58,10 +57,10 @@ var _ sql.Table = (*CommitDiffTable)(nil)
5857
var _ sql.IndexAddressable = (*CommitDiffTable)(nil)
5958
var _ sql.StatisticsTable = (*CommitDiffTable)(nil)
6059

61-
func NewCommitDiffTable(ctx *sql.Context, dbName, tblName string, ddb *doltdb.DoltDB, wRoot, sRoot doltdb.RootValue) (sql.Table, error) {
62-
diffTblName := doltdb.DoltCommitDiffTablePrefix + tblName
60+
func NewCommitDiffTable(ctx *sql.Context, dbName string, tblName doltdb.TableName, ddb *doltdb.DoltDB, wRoot, sRoot doltdb.RootValue) (sql.Table, error) {
61+
diffTblName := doltdb.DoltCommitDiffTablePrefix + tblName.Name
6362

64-
_, table, tableExists, err := resolve.Table(ctx, wRoot, tblName)
63+
table, tableExists, err := wRoot.GetTable(ctx, tblName)
6564
if err != nil {
6665
return nil, err
6766
}
@@ -86,7 +85,7 @@ func NewCommitDiffTable(ctx *sql.Context, dbName, tblName string, ddb *doltdb.Do
8685

8786
return &CommitDiffTable{
8887
dbName: dbName,
89-
name: tblName,
88+
tableName: tblName,
9089
ddb: ddb,
9190
workingRoot: wRoot,
9291
stagedRoot: sRoot,
@@ -110,11 +109,11 @@ func (dt *CommitDiffTable) RowCount(_ *sql.Context) (uint64, bool, error) {
110109
}
111110

112111
func (dt *CommitDiffTable) Name() string {
113-
return doltdb.DoltCommitDiffTablePrefix + dt.name
112+
return doltdb.DoltCommitDiffTablePrefix + dt.tableName.Name
114113
}
115114

116115
func (dt *CommitDiffTable) String() string {
117-
return doltdb.DoltCommitDiffTablePrefix + dt.name
116+
return doltdb.DoltCommitDiffTablePrefix + dt.tableName.Name
118117
}
119118

120119
func (dt *CommitDiffTable) Schema() sql.Schema {
@@ -128,7 +127,7 @@ func (dt *CommitDiffTable) Collation() sql.CollationID {
128127

129128
// GetIndexes implements sql.IndexAddressable
130129
func (dt *CommitDiffTable) GetIndexes(ctx *sql.Context) ([]sql.Index, error) {
131-
return []sql.Index{index.DoltToFromCommitIndex(dt.name)}, nil
130+
return []sql.Index{index.DoltToFromCommitIndex(dt.tableName.Name)}, nil
132131
}
133132

134133
// IndexedAccess implements sql.IndexAddressable
@@ -197,12 +196,12 @@ func (dt *CommitDiffTable) LookupPartitions(ctx *sql.Context, i sql.IndexLookup)
197196
return nil, err
198197
}
199198

200-
toTable, _, _, err := doltdb.GetTableInsensitive(ctx, toRoot, doltdb.TableName{Name: dt.name})
199+
toTable, _, _, err := doltdb.GetTableInsensitive(ctx, toRoot, dt.tableName)
201200
if err != nil {
202201
return nil, err
203202
}
204203

205-
fromTable, _, _, err := doltdb.GetTableInsensitive(ctx, fromRoot, doltdb.TableName{Name: dt.name})
204+
fromTable, _, _, err := doltdb.GetTableInsensitive(ctx, fromRoot, dt.tableName)
206205
if err != nil {
207206
return nil, err
208207
}

go/libraries/doltcore/sqle/dtables/conflicts_tables.go

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,13 @@ import (
2323
"github.com/dolthub/dolt/go/libraries/doltcore/doltdb"
2424
"github.com/dolthub/dolt/go/libraries/doltcore/merge"
2525
"github.com/dolthub/dolt/go/libraries/doltcore/sqle/index"
26-
"github.com/dolthub/dolt/go/libraries/doltcore/sqle/resolve"
2726
"github.com/dolthub/dolt/go/libraries/doltcore/sqle/sqlutil"
2827
"github.com/dolthub/dolt/go/store/types"
2928
)
3029

3130
// NewConflictsTable returns a new ConflictsTable instance
32-
func NewConflictsTable(ctx *sql.Context, tblName string, srcTbl sql.Table, root doltdb.RootValue, rs RootSetter) (sql.Table, error) {
33-
resolvedTableName, tbl, ok, err := resolve.Table(ctx, root, tblName)
31+
func NewConflictsTable(ctx *sql.Context, tblName doltdb.TableName, srcTbl sql.Table, root doltdb.RootValue, rs RootSetter) (sql.Table, error) {
32+
tbl, ok, err := root.GetTable(ctx, tblName)
3433
if err != nil {
3534
return nil, err
3635
} else if !ok {
@@ -42,20 +41,20 @@ func NewConflictsTable(ctx *sql.Context, tblName string, srcTbl sql.Table, root
4241
if !ok {
4342
return nil, fmt.Errorf("%s can not have conflicts because it is not updateable", tblName)
4443
}
45-
return newProllyConflictsTable(ctx, tbl, upd, resolvedTableName, root, rs)
44+
return newProllyConflictsTable(ctx, tbl, upd, tblName, root, rs)
4645
}
4746

48-
return newNomsConflictsTable(ctx, tbl, resolvedTableName.Name, root, rs)
47+
return newNomsConflictsTable(ctx, tbl, tblName, root, rs)
4948
}
5049

51-
func newNomsConflictsTable(ctx *sql.Context, tbl *doltdb.Table, tblName string, root doltdb.RootValue, rs RootSetter) (sql.Table, error) {
52-
rd, err := merge.NewConflictReader(ctx, tbl, doltdb.TableName{Name: tblName})
50+
func newNomsConflictsTable(ctx *sql.Context, tbl *doltdb.Table, tblName doltdb.TableName, root doltdb.RootValue, rs RootSetter) (sql.Table, error) {
51+
rd, err := merge.NewConflictReader(ctx, tbl, tblName)
5352
if err != nil {
5453
return nil, err
5554
}
5655
confSch := rd.GetSchema()
5756

58-
sqlSch, err := sqlutil.FromDoltSchema("", doltdb.DoltConfTablePrefix+tblName, confSch)
57+
sqlSch, err := sqlutil.FromDoltSchema("", doltdb.DoltConfTablePrefix+tblName.Name, confSch)
5958
if err != nil {
6059
return nil, err
6160
}
@@ -75,7 +74,7 @@ var _ sql.DeletableTable = ConflictsTable{}
7574

7675
// ConflictsTable is a sql.Table implementation that provides access to the conflicts that exist for a user table
7776
type ConflictsTable struct {
78-
tblName string
77+
tblName doltdb.TableName
7978
sqlSch sql.PrimaryKeySchema
8079
root doltdb.RootValue
8180
tbl *doltdb.Table
@@ -89,12 +88,12 @@ type RootSetter interface {
8988

9089
// Name returns the name of the table
9190
func (ct ConflictsTable) Name() string {
92-
return doltdb.DoltConfTablePrefix + ct.tblName
91+
return doltdb.DoltConfTablePrefix + ct.tblName.Name
9392
}
9493

9594
// String returns a string identifying the table
9695
func (ct ConflictsTable) String() string {
97-
return doltdb.DoltConfTablePrefix + ct.tblName
96+
return doltdb.DoltConfTablePrefix + ct.tblName.Name
9897
}
9998

10099
// Schema returns the sql.Schema of the table
@@ -115,8 +114,7 @@ func (ct ConflictsTable) Partitions(ctx *sql.Context) (sql.PartitionIter, error)
115114
// PartitionRows returns a RowIter for the given partition
116115
func (ct ConflictsTable) PartitionRows(ctx *sql.Context, part sql.Partition) (sql.RowIter, error) {
117116
// conflict reader must be reset each time partitionRows is called.
118-
// TODO: schema name
119-
rd, err := merge.NewConflictReader(ctx, ct.tbl, doltdb.TableName{Name: ct.tblName})
117+
rd, err := merge.NewConflictReader(ctx, ct.tbl, ct.tblName)
120118
if err != nil {
121119
return nil, err
122120
}
@@ -205,7 +203,7 @@ func (cd *conflictDeleter) Close(ctx *sql.Context) error {
205203
return err
206204
}
207205

208-
updatedRoot, err := cd.ct.root.PutTable(ctx, doltdb.TableName{Name: cd.ct.tblName}, updatedTbl)
206+
updatedRoot, err := cd.ct.root.PutTable(ctx, cd.ct.tblName, updatedTbl)
209207

210208
if err != nil {
211209
return err

go/libraries/doltcore/sqle/dtables/constraint_violations.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,16 @@ import (
2727
)
2828

2929
// NewConstraintViolationsTable returns a sql.Table that lists constraint violations.
30-
func NewConstraintViolationsTable(ctx *sql.Context, tblName string, root doltdb.RootValue, rs RootSetter) (sql.Table, error) {
30+
func NewConstraintViolationsTable(ctx *sql.Context, tblName doltdb.TableName, root doltdb.RootValue, rs RootSetter) (sql.Table, error) {
3131
if root.VRW().Format() == types.Format_DOLT {
3232
return newProllyCVTable(ctx, tblName, root, rs)
3333
}
3434

3535
return newNomsCVTable(ctx, tblName, root, rs)
3636
}
3737

38-
func newNomsCVTable(ctx *sql.Context, tblName string, root doltdb.RootValue, rs RootSetter) (sql.Table, error) {
39-
tbl, tblName, ok, err := doltdb.GetTableInsensitive(ctx, root, doltdb.TableName{Name: tblName})
38+
func newNomsCVTable(ctx *sql.Context, tblName doltdb.TableName, root doltdb.RootValue, rs RootSetter) (sql.Table, error) {
39+
tbl, _, ok, err := doltdb.GetTableInsensitive(ctx, root, tblName)
4040
if err != nil {
4141
return nil, err
4242
} else if !ok {
@@ -46,7 +46,7 @@ func newNomsCVTable(ctx *sql.Context, tblName string, root doltdb.RootValue, rs
4646
if err != nil {
4747
return nil, err
4848
}
49-
sqlSch, err := sqlutil.FromDoltSchema("", doltdb.DoltConstViolTablePrefix+tblName, cvSch)
49+
sqlSch, err := sqlutil.FromDoltSchema("", doltdb.DoltConstViolTablePrefix+tblName.Name, cvSch)
5050
if err != nil {
5151
return nil, err
5252
}
@@ -64,7 +64,7 @@ func newNomsCVTable(ctx *sql.Context, tblName string, root doltdb.RootValue, rs
6464
// constraintViolationsTable is a sql.Table implementation that provides access to the constraint violations that exist
6565
// for a user table for the old format.
6666
type constraintViolationsTable struct {
67-
tblName string
67+
tblName doltdb.TableName
6868
root doltdb.RootValue
6969
cvSch schema.Schema
7070
sqlSch sql.PrimaryKeySchema
@@ -77,12 +77,12 @@ var _ sql.DeletableTable = (*constraintViolationsTable)(nil)
7777

7878
// Name implements the interface sql.Table.
7979
func (cvt *constraintViolationsTable) Name() string {
80-
return doltdb.DoltConstViolTablePrefix + cvt.tblName
80+
return doltdb.DoltConstViolTablePrefix + cvt.tblName.Name
8181
}
8282

8383
// String implements the interface sql.Table.
8484
func (cvt *constraintViolationsTable) String() string {
85-
return doltdb.DoltConstViolTablePrefix + cvt.tblName
85+
return doltdb.DoltConstViolTablePrefix + cvt.tblName.Name
8686
}
8787

8888
// Schema implements the interface sql.Table.
@@ -193,7 +193,7 @@ func (cvd *constraintViolationsDeleter) Close(ctx *sql.Context) error {
193193
if err != nil {
194194
return err
195195
}
196-
updatedRoot, err := cvd.cvt.root.PutTable(ctx, doltdb.TableName{Name: cvd.cvt.tblName}, updatedTbl)
196+
updatedRoot, err := cvd.cvt.root.PutTable(ctx, cvd.cvt.tblName, updatedTbl)
197197
if err != nil {
198198
return err
199199
}

go/libraries/doltcore/sqle/dtables/constraint_violations_prolly.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import (
2424
"github.com/dolthub/dolt/go/libraries/doltcore/merge"
2525
"github.com/dolthub/dolt/go/libraries/doltcore/schema"
2626
"github.com/dolthub/dolt/go/libraries/doltcore/sqle/index"
27-
"github.com/dolthub/dolt/go/libraries/doltcore/sqle/resolve"
2827
"github.com/dolthub/dolt/go/libraries/doltcore/sqle/sqlutil"
2928
"github.com/dolthub/dolt/go/store/hash"
3029
"github.com/dolthub/dolt/go/store/pool"
@@ -33,8 +32,8 @@ import (
3332
"github.com/dolthub/dolt/go/store/val"
3433
)
3534

36-
func newProllyCVTable(ctx *sql.Context, tblName string, root doltdb.RootValue, rs RootSetter) (sql.Table, error) {
37-
resolvedName, tbl, ok, err := resolve.Table(ctx, root, tblName)
35+
func newProllyCVTable(ctx *sql.Context, tblName doltdb.TableName, root doltdb.RootValue, rs RootSetter) (sql.Table, error) {
36+
tbl, ok, err := root.GetTable(ctx, tblName)
3837
if err != nil {
3938
return nil, err
4039
} else if !ok {
@@ -44,7 +43,7 @@ func newProllyCVTable(ctx *sql.Context, tblName string, root doltdb.RootValue, r
4443
if err != nil {
4544
return nil, err
4645
}
47-
sqlSch, err := sqlutil.FromDoltSchema("", doltdb.DoltConstViolTablePrefix+resolvedName.Name, cvSch)
46+
sqlSch, err := sqlutil.FromDoltSchema("", doltdb.DoltConstViolTablePrefix+tblName.Name, cvSch)
4847
if err != nil {
4948
return nil, err
5049
}
@@ -55,7 +54,7 @@ func newProllyCVTable(ctx *sql.Context, tblName string, root doltdb.RootValue, r
5554
}
5655
m := durable.ProllyMapFromArtifactIndex(arts)
5756
return &prollyConstraintViolationsTable{
58-
tblName: resolvedName,
57+
tblName: tblName,
5958
root: root,
6059
sqlSch: sqlSch,
6160
tbl: tbl,

0 commit comments

Comments
 (0)