package bob import ( "errors" "github.com/lann/builder" ) // ErrEmptyTable is a common database/sql error if a table is empty or no rows is returned by the query. var ErrEmptyTable = errors.New("sql: no rows in result set") // ErrEmptyTable is a common pgx error if a table is empty or no rows is returned by the query. var ErrEmptyTablePgx = errors.New("no rows in result set") // ErrDialectNotSupported tells you whether the dialect is supported or not. var ErrDialectNotSupported = errors.New("provided database dialect is not supported") const ( Mysql int = iota Postgresql Sqlite MSSql ) // BobBuilderType is the type for BobBuilder type BobBuilderType builder.Builder // BobBuilder interface wraps the ToSql method type BobBuilder interface { ToSql() (string, []interface{}, error) } // CreateTable creates a table with CreateBuilder interface func (b BobBuilderType) CreateTable(table string) CreateBuilder { return CreateBuilder(b).name(table) } // CreateTableIfNotExists creates a table with CreateBuilder interface, if the table doesn't exists. func (b BobBuilderType) CreateTableIfNotExists(table string) CreateBuilder { return CreateBuilder(b).name(table).ifNotExists() } // HasTable checks if a table exists with HasBuilder interface func (b BobBuilderType) HasTable(table string) HasBuilder { return HasBuilder(b).HasTable(table) } // HasColumn checks if a column exists with HasBuilder interface func (b BobBuilderType) HasColumn(column string) HasBuilder { return HasBuilder(b).HasColumn(column) } // DropTable drops (delete contents & remove) a table from the database. func (b BobBuilderType) DropTable(table string) DropBuilder { return DropBuilder(b).dropTable(table) } // DropTable drops (delete contents & remove) a table from the database if the table exists. func (b BobBuilderType) DropTableIfExists(table string) DropBuilder { return DropBuilder(b).dropTable(table).ifExists() } // RenameTable simply renames an exisisting table. func (b BobBuilderType) RenameTable(from, to string) RenameBuilder { return RenameBuilder(b).from(from).to(to) } // Truncate performs TRUNCATE function. It deletes all contents from a table but not deleting the table. func (b BobBuilderType) Truncate(table string) TruncateBuilder { return TruncateBuilder(b).truncate(table) } func (b BobBuilderType) Upsert(table string, dialect int) UpsertBuilder { return UpsertBuilder(b).dialect(dialect).Into(table) } // BobStmtBuilder is the parent builder for BobBuilderType var BobStmtBuilder = BobBuilderType(builder.EmptyBuilder) // CreateTable creates a table with CreateBuilder interface. func CreateTable(table string) CreateBuilder { return BobStmtBuilder.CreateTable(table) } // CreateTableIfNotExists creates a table with CreateBuilder interface, if the table doesn't exists. func CreateTableIfNotExists(table string) CreateBuilder { return BobStmtBuilder.CreateTableIfNotExists(table) } // HasTable checks if a table exists with HasBuilder interface. func HasTable(table string) HasBuilder { return BobStmtBuilder.HasTable(table) } // HasColumn checks if a column exists with HasBuilder interface. func HasColumn(col string) HasBuilder { return BobStmtBuilder.HasColumn(col) } // DropTable drops (delete contents & remove) a table from the database. func DropTable(table string) DropBuilder { return BobStmtBuilder.DropTable(table) } // DropTable drops (delete contents & remove) a table from the database if the table exists. func DropTableIfExists(table string) DropBuilder { return BobStmtBuilder.DropTableIfExists(table) } // RenameTable simply renames an exisisting table. func RenameTable(from, to string) RenameBuilder { return BobStmtBuilder.RenameTable(from, to) } // Truncate performs TRUNCATE function. It deletes all contents from a table but not deleting the table. func Truncate(table string) TruncateBuilder { return BobStmtBuilder.Truncate(table) } // Upsert performs a UPSERT query with specified database dialect. // Supported database includes MySQL, PostgreSQL, SQLite and MSSQL. func Upsert(table string, dialect int) UpsertBuilder { return BobStmtBuilder.Upsert(table, dialect) }