MCPcopy Create free account
hub / github.com/bytebase/bytebase / getTables

Function getTables

backend/plugin/db/starrocks/dump.go:283–350  ·  view source on GitHub ↗

getTables gets all tables of a database using the provided database instance.

(db *sql.DB, dbName string, dbType storepb.Engine)

Source from the content-addressed store, hash-verified

281
282// getTables gets all tables of a database using the provided database instance.
283func getTables(db *sql.DB, dbName string, dbType storepb.Engine) ([]*TableSchema, error) {
284 var tables []*TableSchema
285 query := "SELECT TABLE_NAME, TABLE_TYPE FROM information_schema.TABLES WHERE TABLE_SCHEMA = ?"
286 rows, err := db.Query(query, dbName)
287 if err != nil {
288 return nil, err
289 }
290 defer rows.Close()
291
292 columns, err := rows.Columns()
293 if err != nil {
294 return nil, err
295 }
296 for rows.Next() {
297 var tbl TableSchema
298 // StorageFormat is the third but unused column for Doris.
299 var unusedStorageFormat string
300 if len(columns) == 3 {
301 // Doris.
302 if err := rows.Scan(&tbl.Name, &tbl.TableType, &unusedStorageFormat); err != nil {
303 return nil, err
304 }
305 } else {
306 if err := rows.Scan(&tbl.Name, &tbl.TableType); err != nil {
307 return nil, err
308 }
309 }
310 tables = append(tables, &tbl)
311 }
312 if err := rows.Err(); err != nil {
313 return nil, err
314 }
315
316 // Materialized views need a separate catalog lookup and re-tagging so the dump emits
317 // SHOW CREATE MATERIALIZED VIEW for them (Doris reports them as BASE TABLE, StarRocks as VIEW).
318 materializedViewNames, err := getMaterializedViewNames(db, dbName, dbType)
319 if err != nil {
320 return nil, err
321 }
322 markMaterializedViews(tables, materializedViewNames)
323
324 var result []*TableSchema
325 for _, tbl := range tables {
326 stmt, err := getTableStmt(db, dbName, tbl.Name, tbl.TableType)
327 if err != nil {
328 // Skip tables that were dropped between listing and fetching CREATE statement.
329 var mysqlErr *mysql.MySQLError
330 if errors.As(err, &mysqlErr) && mysqlErr.Number == errUnknownTable {
331 slog.Debug("table was dropped during dump, skipping",
332 slog.String("database", dbName),
333 slog.String("table", tbl.Name))
334 continue
335 }
336 return nil, errors.Wrapf(err, "failed to call getTableStmt(%q, %q, %q)", dbName, tbl.Name, tbl.TableType)
337 }
338 tbl.Statement = stmt
339 if tbl.TableType == viewTableType || tbl.TableType == materializedViewType {
340 viewColumns, err := getViewColumns(db, dbName, tbl.Name)

Callers 1

DumpMethod · 0.70

Calls 12

getMaterializedViewNamesFunction · 0.85
markMaterializedViewsFunction · 0.85
getTableStmtFunction · 0.85
getViewColumnsFunction · 0.85
ColumnsMethod · 0.80
ScanMethod · 0.80
DebugMethod · 0.80
QueryMethod · 0.65
CloseMethod · 0.65
StringMethod · 0.65
NextMethod · 0.45
ErrorMethod · 0.45

Tested by

no test coverage detected