本文整理汇总了Golang中gnd/la/orm/driver/sql.DB类的典型用法代码示例。如果您正苦于以下问题:Golang DB类的具体用法?Golang DB怎么用?Golang DB使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了DB类的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: Inspect
func (b *Backend) Inspect(db *sql.DB, m driver.Model) (*sql.Table, error) {
var database string
if err := db.QueryRow("SELECT DATABASE() FROM DUAL").Scan(&database); err != nil {
return nil, err
}
return b.SqlBackend.Inspect(db, m, database)
}
示例2: HasIndex
func (b *Backend) HasIndex(db *sql.DB, m driver.Model, idx *index.Index, name string) (bool, error) {
var exists int
err := db.QueryRow("SELECT 1 FROM pg_class WHERE relname = $1 AND relkind = 'i'", name).Scan(&exists)
if err == sql.ErrNoRows {
err = nil
}
return exists != 0, err
}
示例3: Insert
func (b *Backend) Insert(db *sql.DB, m driver.Model, query string, args ...interface{}) (driver.Result, error) {
fields := m.Fields()
if fields.AutoincrementPk {
q := query + " RETURNING " + fields.MNames[fields.PrimaryKey]
var id int64
err := db.QueryRow(q, args...).Scan(&id)
// We need to perform a "real" insert to find the real error, so
// just let the code fall to the Exec at the end of the function
// if there's an error.
if err == nil {
return insertResult(id), nil
}
}
return db.Exec(query, args...)
}
示例4: AlterField
func (b *Backend) AlterField(db *sql.DB, m driver.Model, table *sql.Table, oldField *sql.Field, newField *sql.Field) error {
fsql, cons, err := newField.SQL(db, m, table)
if err != nil {
return err
}
tableName := db.QuoteIdentifier(m.Table())
if _, err = db.Exec(fmt.Sprintf("ALTER TABLE %s CHANGE COLUMN %s %s", tableName, db.QuoteIdentifier(oldField.Name), fsql)); err != nil {
return err
}
for _, c := range cons {
if _, err = db.Exec(fmt.Sprintf("ALTER TABLE %s ADD CONSTRAINT %s", tableName, c)); err != nil {
return err
}
}
return err
}
示例5: DefineField
func (b *Backend) DefineField(db *sql.DB, m driver.Model, table *sql.Table, field *sql.Field) (string, []string, error) {
def, cons, err := b.SqlBackend.DefineField(db, m, table, field)
if err != nil {
return "", nil, err
}
if ref := field.Constraint(sql.ConstraintForeignKey); ref != nil {
if pos := strings.Index(def, " REFERENCES"); pos >= 0 {
def = def[:pos]
}
refTable := ref.References.Table()
refField := ref.References.Field()
fkName := db.QuoteIdentifier(fmt.Sprintf("%s_%s_%s_%s", m.Table(), field.Name, refTable, refField))
cons = append(cons, fmt.Sprintf("FOREIGN KEY %s(%s) REFERENCES %s(%s)", fkName, db.QuoteIdentifier(field.Name),
db.QuoteIdentifier(refTable), db.QuoteIdentifier(refField)))
}
return strings.Replace(def, "AUTOINCREMENT", "AUTO_INCREMENT", -1), cons, nil
}
示例6: AddFields
func (b *Backend) AddFields(db *sql.DB, m driver.Model, prevTable *sql.Table, newTable *sql.Table, fields []*sql.Field) error {
rewrite := false
for _, v := range fields {
if !b.canAddField(v) {
rewrite = true
break
}
}
if rewrite {
name := db.QuoteIdentifier(m.Table())
tmpName := fmt.Sprintf("%s_%s", m.Table(), stringutil.Random(8))
quotedTmpName := db.QuoteIdentifier(tmpName)
createSql, err := newTable.SQL(db, b, m, tmpName)
if err != nil {
return err
}
if _, err := db.Exec(createSql); err != nil {
return err
}
fieldNames := generic.Map(prevTable.Fields, func(f *sql.Field) string { return f.Name }).([]string)
// The previous table might have fields that we're not part
// of the new table.
fieldSet := make(map[string]bool)
for _, v := range newTable.Fields {
fieldSet[v.Name] = true
}
fieldNames = generic.Filter(fieldNames, func(n string) bool { return fieldSet[n] }).([]string)
sqlFields := strings.Join(generic.Map(fieldNames, db.QuoteIdentifier).([]string), ", ")
copySql := fmt.Sprintf("INSERT INTO %s (%s) SELECT %s FROM %s", quotedTmpName, sqlFields, sqlFields, name)
if _, err := db.Exec(copySql); err != nil {
return err
}
if _, err := db.Exec(fmt.Sprintf("DROP TABLE %s", name)); err != nil {
return err
}
if _, err := db.Exec(fmt.Sprintf("ALTER TABLE %s RENAME TO %s", quotedTmpName, name)); err != nil {
return err
}
return nil
}
return b.SqlBackend.AddFields(db, m, prevTable, newTable, fields)
}