ShowCreateDatabase constructs the create database SQL for a specified database returns (createDatabaseSQL, error)
(tctx *tcontext.Context, db *BaseConn, database string)
| 62 | // ShowCreateDatabase constructs the create database SQL for a specified database |
| 63 | // returns (createDatabaseSQL, error) |
| 64 | func ShowCreateDatabase(tctx *tcontext.Context, db *BaseConn, database string) (string, error) { |
| 65 | var oneRow [2]string |
| 66 | handleOneRow := func(rows *sql.Rows) error { |
| 67 | return rows.Scan(&oneRow[0], &oneRow[1]) |
| 68 | } |
| 69 | query := fmt.Sprintf("SHOW CREATE DATABASE `%s`", escapeString(database)) |
| 70 | err := db.QuerySQL(tctx, handleOneRow, func() { |
| 71 | oneRow[0], oneRow[1] = "", "" |
| 72 | }, query) |
| 73 | if multiErrs := multierr.Errors(err); len(multiErrs) > 0 { |
| 74 | for _, multiErr := range multiErrs { |
| 75 | if mysqlErr, ok := errors.Cause(multiErr).(*mysql.MySQLError); ok { |
| 76 | // Falling back to simple create statement for MemSQL/SingleStore, because of this: |
| 77 | // ERROR 1706 (HY000): Feature 'SHOW CREATE DATABASE' is not supported by MemSQL. |
| 78 | if strings.Contains(mysqlErr.Error(), "SHOW CREATE DATABASE") { |
| 79 | return fmt.Sprintf("CREATE DATABASE `%s`", escapeString(database)), nil |
| 80 | } |
| 81 | } |
| 82 | } |
| 83 | } |
| 84 | return oneRow[1], err |
| 85 | } |
| 86 | |
| 87 | // ShowCreateTable constructs the create table SQL for a specified table |
| 88 | // returns (createTableSQL, error) |
no test coverage detected