func dumpTable(tx *sql.Tx, table, schema string) (string, error) {
	statements := []string{schema}

	// Query all rows.
	rows, err := tx.Query(fmt.Sprintf("SELECT * FROM %s ORDER BY rowid", table))
	if err != nil {
		return "", errors.Wrap(err, "failed to fetch rows")
	}
	defer rows.Close()

	// Figure column names
	columns, err := rows.Columns()
	if err != nil {
		return "", errors.Wrap(err, "failed to get columns")
	}

	// Generate an INSERT statement for each row.
	for i := 0; rows.Next(); i++ {
		raw := make([]interface{}, len(columns)) // Raw column values
		row := make([]interface{}, len(columns))
		for i := range raw {
			row[i] = &raw[i]
		}
		err := rows.Scan(row...)
		if err != nil {
			return "", errors.Wrapf(err, "failed to scan row %d", i)
		}
		values := make([]string, len(columns))
		for j, v := range raw {
			switch v := v.(type) {
			case int64:
				values[j] = strconv.FormatInt(v, 10)
			case string:
				values[j] = fmt.Sprintf("'%s'", v)
			case []byte:
				values[j] = fmt.Sprintf("'%s'", string(v))
			case time.Time:
				values[j] = strconv.FormatInt(v.Unix(), 10)
			default:
				if v != nil {
					return "", fmt.Errorf("bad type in column %s of row %d", columns[j], i)
				}
				values[j] = "NULL"
			}
		}
		statement := fmt.Sprintf("INSERT INTO %s VALUES(%s);", table, strings.Join(values, ","))
		statements = append(statements, statement)
	}
	return strings.Join(statements, "\n") + "\n", nil
}
func dumpTable(tx *sql.Tx, table, schema string) (string, error) {
	statements := []string{schema}

	
	rows, err := tx.Query(fmt.Sprintf("SELECT * FROM %s ORDER BY rowid", table))
	if err != nil {
		return "", errors.Wrap(err, "failed to fetch rows")
	}
	defer rows.Close()

	
	columns, err := rows.Columns()
	if err != nil {
		return "", errors.Wrap(err, "failed to get columns")
	}

	
	for i := 0; rows.Next(); i++ {
		raw := make([]interface{}, len(columns)) 
		row := make([]interface{}, len(columns))
		for i := range raw {
			row[i] = &raw[i]
		}
		err := rows.Scan(row...)
		if err != nil {
			return "", errors.Wrapf(err, "failed to scan row %d", i)
		}
		values := make([]string, len(columns))
		for j, v := range raw {
			switch v := v.(type) {
			case int64:
				values[j] = strconv.FormatInt(v, 10)
			case string:
				values[j] = fmt.Sprintf("'%s'", v)
			case []byte:
				values[j] = fmt.Sprintf("'%s'", string(v))
			case time.Time:
				values[j] = strconv.FormatInt(v.Unix(), 10)
			default:
				if v != nil {
					return "", fmt.Errorf("bad type in column %s of row %d", columns[j], i)
				}
				values[j] = "NULL"
			}
		}
		statement := fmt.Sprintf("INSERT INTO %s VALUES(%s);", table, strings.Join(values, ","))
		statements = append(statements, statement)
	}
	return strings.Join(statements, "\n") + "\n", nil
}
func dumpTable ( tx * sql . Tx , table , schema string ) ( string , error ) { statements := [ ] string { schema } // Query all rows. rows , err := tx . Query ( fmt . Sprintf ( " " , table ) ) if err != nil { return " " , errors . Wrap ( err , " " ) } defer rows . Close ( ) // Figure column names columns , err := rows . Columns ( ) if err != nil { return " " , errors . Wrap ( err , " " ) } // Generate an INSERT statement for each row. for i := 0 ; rows . Next ( ) ; i ++ { raw := make ( [ ] interface { } , len ( columns ) ) // Raw column values row := make ( [ ] interface { } , len ( columns ) ) for i := range raw { row [ i ] = & raw [ i ] } err := rows . Scan ( row ... ) if err != nil { return " " , errors . Wrapf ( err , " " , i ) } values := make ( [ ] string , len ( columns ) ) for j , v := range raw { switch v := v . ( type ) { case int64 : values [ j ] = strconv . FormatInt ( v , 10 ) case string : values [ j ] = fmt . Sprintf ( " " , v ) case [ ] byte : values [ j ] = fmt . Sprintf ( " " , string ( v ) ) case time . Time : values [ j ] = strconv . FormatInt ( v . Unix ( ) , 10 ) default : if v != nil { return " " , fmt . Errorf ( " " , columns [ j ] , i ) } values [ j ] = " " } } statement := fmt . Sprintf ( " " , table , strings . Join ( values , " " ) ) statements = append ( statements , statement ) } return strings . Join ( statements , " \n " ) + " \n " , nil }
// Dump a single table, returning a SQL text containing statements for its
// schema and data.
Dump a single table returning a SQL text containing statements for its schema and data .