func (b *Backend) HasIndex(db *sql.DB, m driver.Model, idx *index.Index, name string) (bool, error) { rows, err := db.Query("SHOW INDEX FROM ? WHERE Key_name = ?", m.Table(), name) if err != nil { return false, err } has := rows.Next() rows.Close() return has, nil }
func (b *Backend) HasIndex(db *sql.DB, m driver.Model, idx *index.Index, name string) (bool, error) { rows, err := db.Query(fmt.Sprintf("PRAGMA index_info(%s)", name)) if err != nil { return false, err } has := rows.Next() rows.Close() return has, nil }
func (b *Backend) Inspect(db *sql.DB, m driver.Model) (*sql.Table, error) { name := db.QuoteString(m.Table()) rows, err := db.Query(fmt.Sprintf("PRAGMA table_info(%s)", name)) if err != nil { return nil, err } defer rows.Close() fieldsByName := make(map[string]*sql.Field) var fields []*sql.Field for rows.Next() { var cid int var f sql.Field var notnull int var def *string var pk int if err := rows.Scan(&cid, &f.Name, &f.Type, ¬null, &def, &pk); err != nil { return nil, err } f.Type = strings.ToUpper(f.Type) if notnull != 0 { f.AddConstraint(sql.ConstraintNotNull) } if def != nil { f.Default = *def } if pk != 0 { f.AddConstraint(sql.ConstraintPrimaryKey) } fields = append(fields, &f) fieldsByName[f.Name] = &f } if err := rows.Err(); err != nil { return nil, err } rows, err = db.Query(fmt.Sprintf("PRAGMA foreign_key_list(%s)", name)) if err != nil { return nil, err } defer rows.Close() for rows.Next() { var id, seq int var table, from, to, onUpdate, onDelete, match string if err := rows.Scan(&id, &seq, &table, &from, &to, &onUpdate, &onDelete, &match); err != nil { return nil, err } field := fieldsByName[from] field.Constraints = append(field.Constraints, &sql.Constraint{Type: sql.ConstraintForeignKey, References: sql.MakeReference(table, to)}) } if err := rows.Err(); err != nil { return nil, err } if len(fields) > 0 { return &sql.Table{Fields: fields}, nil } return nil, nil }