Skip to content

Commit 97bbc51

Browse files
committed
Cleanup front-facing API
1 parent b31eea7 commit 97bbc51

File tree

10 files changed

+51
-89
lines changed

10 files changed

+51
-89
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ Package schema is copyright 2018-2021 by Jim Smart and released under the [BSD 3
9696

9797
## History
9898

99+
- v0.2.0: Clean up front-facing API.
99100
- v0.1.0: Added schema name to methods and results.
100101
- v0.0.8: Disabled Oracle tests on Travis.
101102
- v0.0.7: Added PrimaryKey method. TableNames and ViewNames are now sorted. Improved Oracle testing. Refactored dialect handling.

dialect.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,10 @@ import (
88
type dialect interface {
99
escapeIdent(ident string) string
1010

11+
ColumnTypes(db *sql.DB, schema, name string) ([]*sql.ColumnType, error)
1112
PrimaryKey(db *sql.DB, schema, name string) ([]string, error)
1213
TableNames(db *sql.DB) ([][2]string, error)
13-
Table(db *sql.DB, schema, name string) ([]*sql.ColumnType, error)
1414
ViewNames(db *sql.DB) ([][2]string, error)
15-
View(db *sql.DB, schema, name string) ([]*sql.ColumnType, error)
1615
}
1716

1817
// driverDialect is a registry, mapping database/sql driver names to database dialects.

dialect_mssql.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -113,25 +113,21 @@ func (mssqlDialect) escapeIdent(ident string) string {
113113
return escapeWithBrackets(ident)
114114
}
115115

116+
func (d mssqlDialect) ColumnTypes(db *sql.DB, schema, name string) ([]*sql.ColumnType, error) {
117+
return fetchColumnTypes(db, mssqlAllColumns, schema, name, d.escapeIdent)
118+
}
119+
116120
func (mssqlDialect) PrimaryKey(db *sql.DB, schema, name string) ([]string, error) {
117121
if schema == "" {
118122
return fetchNames(db, mssqlPrimaryKey, "", name)
119123
}
120124
return fetchNames(db, mssqlPrimaryKeyWithSchema, schema, name)
121125
}
122126

123-
func (d mssqlDialect) Table(db *sql.DB, schema, name string) ([]*sql.ColumnType, error) {
124-
return fetchColumnTypes(db, mssqlAllColumns, schema, name, d.escapeIdent)
125-
}
126-
127127
func (mssqlDialect) TableNames(db *sql.DB) ([][2]string, error) {
128128
return fetchNamesWithSchema(db, mssqlTableNamesWithSchema, "", "")
129129
}
130130

131-
func (d mssqlDialect) View(db *sql.DB, schema, name string) ([]*sql.ColumnType, error) {
132-
return fetchColumnTypes(db, mssqlAllColumns, schema, name, d.escapeIdent)
133-
}
134-
135131
func (mssqlDialect) ViewNames(db *sql.DB) ([][2]string, error) {
136132
return fetchNamesWithSchema(db, mssqlViewNamesWithSchema, "", "")
137133
}

dialect_mysql.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -75,25 +75,21 @@ func (mysqlDialect) escapeIdent(ident string) string {
7575
return escapeWithBackticks(ident)
7676
}
7777

78+
func (d mysqlDialect) ColumnTypes(db *sql.DB, schema, name string) ([]*sql.ColumnType, error) {
79+
return fetchColumnTypes(db, mysqlAllColumns, schema, name, d.escapeIdent)
80+
}
81+
7882
func (mysqlDialect) PrimaryKey(db *sql.DB, schema, name string) ([]string, error) {
7983
if schema == "" {
8084
return fetchNames(db, mysqlPrimaryKey, "", name)
8185
}
8286
return fetchNames(db, mysqlPrimaryKeyWithSchema, schema, name)
8387
}
8488

85-
func (d mysqlDialect) Table(db *sql.DB, schema, name string) ([]*sql.ColumnType, error) {
86-
return fetchColumnTypes(db, mysqlAllColumns, schema, name, d.escapeIdent)
87-
}
88-
8989
func (mysqlDialect) TableNames(db *sql.DB) ([][2]string, error) {
9090
return fetchNamesWithSchema(db, mysqlTableNamesWithSchema, "", "")
9191
}
9292

93-
func (d mysqlDialect) View(db *sql.DB, schema, name string) ([]*sql.ColumnType, error) {
94-
return fetchColumnTypes(db, mysqlAllColumns, schema, name, d.escapeIdent)
95-
}
96-
9793
func (mysqlDialect) ViewNames(db *sql.DB) ([][2]string, error) {
9894
return fetchNamesWithSchema(db, mysqlViewNamesWithSchema, "", "")
9995
}

dialect_oracle.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -71,25 +71,21 @@ func (oracleDialect) escapeIdent(ident string) string {
7171
return escapeWithDoubleQuotes(ident)
7272
}
7373

74+
func (d oracleDialect) ColumnTypes(db *sql.DB, schema, name string) ([]*sql.ColumnType, error) {
75+
return fetchColumnTypes(db, oracleAllColumns, schema, name, d.escapeIdent)
76+
}
77+
7478
func (oracleDialect) PrimaryKey(db *sql.DB, schema, name string) ([]string, error) {
7579
if schema == "" {
7680
return fetchNames(db, oraclePrimaryKey, "", name)
7781
}
7882
return fetchNames(db, oraclePrimaryKeyWithSchema, schema, name)
7983
}
8084

81-
func (d oracleDialect) Table(db *sql.DB, schema, name string) ([]*sql.ColumnType, error) {
82-
return fetchColumnTypes(db, oracleAllColumns, schema, name, d.escapeIdent)
83-
}
84-
8585
func (oracleDialect) TableNames(db *sql.DB) ([][2]string, error) {
8686
return fetchNamesWithSchema(db, oracleTableNamesWithSchema, "", "")
8787
}
8888

89-
func (d oracleDialect) View(db *sql.DB, schema, name string) ([]*sql.ColumnType, error) {
90-
return fetchColumnTypes(db, oracleAllColumns, schema, name, d.escapeIdent)
91-
}
92-
9389
func (oracleDialect) ViewNames(db *sql.DB) ([][2]string, error) {
9490
return fetchNamesWithSchema(db, oracleViewNamesWithSchema, "", "")
9591
}

dialect_postgres.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -79,25 +79,21 @@ func (postgresDialect) escapeIdent(ident string) string {
7979
return escapeWithDoubleQuotes(ident)
8080
}
8181

82+
func (d postgresDialect) ColumnTypes(db *sql.DB, schema, name string) ([]*sql.ColumnType, error) {
83+
return fetchColumnTypes(db, postgresAllColumns, schema, name, d.escapeIdent)
84+
}
85+
8286
func (postgresDialect) PrimaryKey(db *sql.DB, schema, name string) ([]string, error) {
8387
if schema == "" {
8488
return fetchNames(db, postgresPrimaryKey, "", name)
8589
}
8690
return fetchNames(db, postgresPrimaryKeyWithSchema, schema, name)
8791
}
8892

89-
func (d postgresDialect) Table(db *sql.DB, schema, name string) ([]*sql.ColumnType, error) {
90-
return fetchColumnTypes(db, postgresAllColumns, schema, name, d.escapeIdent)
91-
}
92-
9393
func (postgresDialect) TableNames(db *sql.DB) ([][2]string, error) {
9494
return fetchNamesWithSchema(db, postgresTableNamesWithSchema, "", "")
9595
}
9696

97-
func (d postgresDialect) View(db *sql.DB, schema, name string) ([]*sql.ColumnType, error) {
98-
return fetchColumnTypes(db, postgresAllColumns, schema, name, d.escapeIdent)
99-
}
100-
10197
func (postgresDialect) ViewNames(db *sql.DB) ([][2]string, error) {
10298
return fetchNamesWithSchema(db, postgresViewNamesWithSchema, "", "")
10399
}

dialect_sqlite.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,25 +48,21 @@ func (sqliteDialect) escapeIdent(ident string) string {
4848
return escapeWithDoubleQuotes(ident)
4949
}
5050

51+
func (d sqliteDialect) ColumnTypes(db *sql.DB, schema, name string) ([]*sql.ColumnType, error) {
52+
return fetchColumnTypes(db, sqliteAllColumns, schema, name, d.escapeIdent)
53+
}
54+
5155
func (sqliteDialect) PrimaryKey(db *sql.DB, schema, name string) ([]string, error) {
5256
// if schema == "" {
5357
// return fetchNames(db, sqlitePrimaryKey, "", name)
5458
// }
5559
return fetchNames(db, sqlitePrimaryKey, "", name)
5660
}
5761

58-
func (d sqliteDialect) Table(db *sql.DB, schema, name string) ([]*sql.ColumnType, error) {
59-
return fetchColumnTypes(db, sqliteAllColumns, schema, name, d.escapeIdent)
60-
}
61-
6262
func (sqliteDialect) TableNames(db *sql.DB) ([][2]string, error) {
6363
return fetchNamesWithSchema(db, sqliteTableNamesWithSchema, "", "")
6464
}
6565

66-
func (d sqliteDialect) View(db *sql.DB, schema, name string) ([]*sql.ColumnType, error) {
67-
return fetchColumnTypes(db, sqliteAllColumns, schema, name, d.escapeIdent)
68-
}
69-
7066
func (sqliteDialect) ViewNames(db *sql.DB) ([][2]string, error) {
7167
return fetchNamesWithSchema(db, sqliteViewNamesWithSchema, "", "")
7268
}

doc.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@
2121
//
2222
// Both user permissions and current database/schema effect table visibility.
2323
//
24-
// Use schema.Table() to query column type metadata for a single table:
24+
// Use schema.ColumnTypes() to query column type metadata for a single table:
2525
//
2626
// // Fetch column metadata for given table
27-
// tcols, err := schema.Table(db, "", "employee_tbl")
27+
// tcols, err := schema.ColumnTypes(db, "", "employee_tbl")
2828
// ...
2929
// // tcols is []*sql.ColumnType
3030
// for i := range tcols {
@@ -51,7 +51,7 @@
5151
// vnames, err := schema.ViewNames(db)
5252
// ...
5353
// // Fetch column metadata for given view
54-
// vcols, err := schema.View(db, "", "monthly_sales_view")
54+
// vcols, err := schema.ColumnTypes(db, "", "monthly_sales_view")
5555
// ...
5656
// // Fetch column metadata for all views
5757
// views, err := schema.Views(db)

schema.go

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func Tables(db *sql.DB) (map[[2]string][]*sql.ColumnType, error) {
5555
}
5656
m := make(map[[2]string][]*sql.ColumnType, len(names))
5757
for _, n := range names {
58-
ct, err := d.Table(db, n[0], n[1])
58+
ct, err := d.ColumnTypes(db, n[0], n[1])
5959
if err != nil {
6060
return nil, err
6161
}
@@ -81,7 +81,7 @@ func Views(db *sql.DB) (map[[2]string][]*sql.ColumnType, error) {
8181
}
8282
m := make(map[[2]string][]*sql.ColumnType, len(names))
8383
for _, n := range names {
84-
ct, err := d.View(db, n[0], n[1])
84+
ct, err := d.ColumnTypes(db, n[0], n[1])
8585
if err != nil {
8686
return nil, err
8787
}
@@ -112,26 +112,15 @@ func ViewNames(db *sql.DB) ([][2]string, error) {
112112
return d.ViewNames(db)
113113
}
114114

115-
// Table returns the column type metadata for the given table in the given schema.
115+
// ColumnTypes returns the column type metadata for the given object (table or view) in the given schema.
116116
//
117117
// Setting schema to an empty string results in the current schema being used.
118-
func Table(db *sql.DB, schema, table string) ([]*sql.ColumnType, error) {
118+
func ColumnTypes(db *sql.DB, schema, obj string) ([]*sql.ColumnType, error) {
119119
d, err := getDialect(db)
120120
if err != nil {
121121
return nil, err
122122
}
123-
return d.Table(db, schema, table)
124-
}
125-
126-
// View returns the column type metadata for the given view in the given schema.
127-
//
128-
// Setting schema to an empty string results in the current schema being used.
129-
func View(db *sql.DB, schema, view string) ([]*sql.ColumnType, error) {
130-
d, err := getDialect(db)
131-
if err != nil {
132-
return nil, err
133-
}
134-
return d.View(db, schema, view)
123+
return d.ColumnTypes(db, schema, obj)
135124
}
136125

137126
// PrimaryKey returns a list of column names making up the primary

schema_test.go

Lines changed: 21 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,11 @@ func SchemaTestRunner(params *testParams) {
6565
return db, doneFn
6666
}
6767

68-
Describe("Table", func() {
68+
Describe("ColumnTypes", func() {
6969
It("should return the column type info for an existing table", func() {
7070
db, done := setup()
7171
defer done()
72-
ci, err := schema.Table(db, params.TableNamesExpRes[1][0], params.TableNamesExpRes[1][1])
72+
ci, err := schema.ColumnTypes(db, params.TableNamesExpRes[1][0], params.TableNamesExpRes[1][1])
7373
Expect(err).To(BeNil())
7474
var list []string
7575
for _, c := range ci {
@@ -81,9 +81,21 @@ func SchemaTestRunner(params *testParams) {
8181
It("should return an error for a non-existing table", func() {
8282
db, done := setup()
8383
defer done()
84-
_, err := schema.Table(db, "", "XXX-NO-SUCH-TABLE-XXX")
84+
_, err := schema.ColumnTypes(db, "", "XXX-NO-SUCH-TABLE-XXX")
8585
Expect(err).ToNot(BeNil())
8686
})
87+
It("should return the column type info for the view", func() {
88+
db, done := setup()
89+
defer done()
90+
ci, err := schema.ColumnTypes(db, params.ViewNamesExpRes[0][0], params.ViewNamesExpRes[0][1])
91+
Expect(err).To(BeNil())
92+
var list []string
93+
for _, c := range ci {
94+
list = append(list, c.Name())
95+
}
96+
Expect(list).To(Equal(params.ViewExpRes))
97+
})
98+
// TODO(js) check with empty schema param
8799
})
88100

89101
Describe("TableNames", func() {
@@ -111,21 +123,6 @@ func SchemaTestRunner(params *testParams) {
111123
})
112124
})
113125

114-
Describe("View", func() {
115-
It("should return the column type info for the view", func() {
116-
db, done := setup()
117-
defer done()
118-
ci, err := schema.View(db, params.ViewNamesExpRes[0][0], params.ViewNamesExpRes[0][1])
119-
Expect(err).To(BeNil())
120-
var list []string
121-
for _, c := range ci {
122-
list = append(list, c.Name())
123-
}
124-
Expect(list).To(Equal(params.ViewExpRes))
125-
})
126-
// TODO(js) check with empty schema param
127-
})
128-
129126
Describe("ViewNames", func() {
130127
It("should return the view names", func() {
131128
db, done := setup()
@@ -171,29 +168,25 @@ var _ = Describe("schema", func() {
171168

172169
var unknownDriverErr = schema.UnknownDriverError{Driver: "schema_test.FakeDb"}
173170

174-
ci, err := schema.Table(db, "", "web_resource")
171+
ci, err := schema.ColumnTypes(db, "", "web_resource")
175172
Expect(ci).To(BeNil())
176173
Expect(err).To(MatchError(unknownDriverErr))
177174

178175
tn, err := schema.TableNames(db)
179176
Expect(tn).To(BeNil())
180177
Expect(err).To(MatchError(unknownDriverErr))
181178

182-
// ta, err := schema.Tables(db)
183-
// Expect(ta).To(BeNil())
184-
// Expect(err).To(MatchError(unknownDriverErr))
185-
186-
ci, err = schema.View(db, "", "web_resource")
187-
Expect(ci).To(BeNil())
179+
ta, err := schema.Tables(db)
180+
Expect(ta).To(BeNil())
188181
Expect(err).To(MatchError(unknownDriverErr))
189182

190183
vn, err := schema.ViewNames(db)
191184
Expect(vn).To(BeNil())
192185
Expect(err).To(MatchError(unknownDriverErr))
193186

194-
// vw, err := schema.Views(db)
195-
// Expect(vw).To(BeNil())
196-
// Expect(err).To(MatchError(unknownDriverErr))
187+
vw, err := schema.Views(db)
188+
Expect(vw).To(BeNil())
189+
Expect(err).To(MatchError(unknownDriverErr))
197190
})
198191
})
199192
})

0 commit comments

Comments
 (0)