Some improvements
This commit is contained in:
parent
7eb219b368
commit
175ddbe38e
|
@ -32,33 +32,53 @@ func (statement *Statement) writeDeleteOrder(w builder.Writer) error {
|
||||||
// ErrNotImplemented not implemented
|
// ErrNotImplemented not implemented
|
||||||
var ErrNotImplemented = errors.New("Not implemented")
|
var ErrNotImplemented = errors.New("Not implemented")
|
||||||
|
|
||||||
func (statement *Statement) writeOrderCond(orderCondWriter builder.Writer, orderSQLWriter *builder.BytesWriter, tableName string) error {
|
func (statement *Statement) writeOrderCond(orderCondWriter *builder.BytesWriter, tableName string) error {
|
||||||
if orderSQLWriter.Len() > 0 {
|
orderSQLWriter := builder.NewWriter()
|
||||||
switch statement.dialect.URI().DBType {
|
if err := statement.writeDeleteOrder(orderSQLWriter); err != nil {
|
||||||
case schemas.POSTGRES:
|
return err
|
||||||
if statement.cond.IsValid() {
|
}
|
||||||
fmt.Fprintf(orderCondWriter, " AND ")
|
|
||||||
} else {
|
if orderSQLWriter.Len() == 0 {
|
||||||
fmt.Fprintf(orderCondWriter, " WHERE ")
|
return nil
|
||||||
}
|
}
|
||||||
fmt.Fprintf(orderCondWriter, "ctid IN (SELECT ctid FROM %s%s)", tableName, orderSQLWriter.String())
|
|
||||||
orderCondWriter.Append(orderSQLWriter.Args()...)
|
switch statement.dialect.URI().DBType {
|
||||||
case schemas.SQLITE:
|
case schemas.POSTGRES:
|
||||||
if statement.cond.IsValid() {
|
if statement.cond.IsValid() {
|
||||||
fmt.Fprintf(orderCondWriter, " AND ")
|
if _, err := fmt.Fprint(orderCondWriter, " AND "); err != nil {
|
||||||
} else {
|
return err
|
||||||
fmt.Fprintf(orderCondWriter, " WHERE ")
|
}
|
||||||
}
|
} else {
|
||||||
fmt.Fprintf(orderCondWriter, "rowid IN (SELECT rowid FROM %s%s)", tableName, orderSQLWriter.String())
|
if _, err := fmt.Fprint(orderCondWriter, " WHERE "); err != nil {
|
||||||
// TODO: how to handle delete limit on mssql?
|
return err
|
||||||
case schemas.MSSQL:
|
}
|
||||||
return ErrNotImplemented
|
}
|
||||||
default:
|
if _, err := fmt.Fprintf(orderCondWriter, "ctid IN (SELECT ctid FROM %s%s)", tableName, orderSQLWriter.String()); err != nil {
|
||||||
fmt.Fprint(orderCondWriter, orderSQLWriter.String())
|
return err
|
||||||
orderCondWriter.Append(orderSQLWriter.Args()...)
|
}
|
||||||
}
|
orderCondWriter.Append(orderSQLWriter.Args()...)
|
||||||
|
return nil
|
||||||
|
case schemas.SQLITE:
|
||||||
|
if statement.cond.IsValid() {
|
||||||
|
if _, err := fmt.Fprint(orderCondWriter, " AND "); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if _, err := fmt.Fprint(orderCondWriter, " WHERE "); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if _, err := fmt.Fprintf(orderCondWriter, "rowid IN (SELECT rowid FROM %s%s)", tableName, orderSQLWriter.String()); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
orderCondWriter.Append(orderSQLWriter.Args()...)
|
||||||
|
return nil
|
||||||
|
// TODO: how to handle delete limit on mssql?
|
||||||
|
case schemas.MSSQL:
|
||||||
|
return ErrNotImplemented
|
||||||
|
default:
|
||||||
|
return utils.WriteBuilder(orderCondWriter, orderSQLWriter)
|
||||||
}
|
}
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (statement *Statement) WriteDelete(realSQLWriter, deleteSQLWriter *builder.BytesWriter, nowTime func(*schemas.Column) (interface{}, time.Time, error)) error {
|
func (statement *Statement) WriteDelete(realSQLWriter, deleteSQLWriter *builder.BytesWriter, nowTime func(*schemas.Column) (interface{}, time.Time, error)) error {
|
||||||
|
@ -72,13 +92,8 @@ func (statement *Statement) WriteDelete(realSQLWriter, deleteSQLWriter *builder.
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
orderSQLWriter := builder.NewWriter()
|
|
||||||
if err := statement.writeDeleteOrder(orderSQLWriter); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
orderCondWriter := builder.NewWriter()
|
orderCondWriter := builder.NewWriter()
|
||||||
if err := statement.writeOrderCond(orderCondWriter, orderSQLWriter, tableName); err != nil {
|
if err := statement.writeOrderCond(orderCondWriter, tableName); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ func (statement *Statement) ResetOrderBy() {
|
||||||
// WriteOrderBy write order by to writer
|
// WriteOrderBy write order by to writer
|
||||||
func (statement *Statement) WriteOrderBy(w builder.Writer) error {
|
func (statement *Statement) WriteOrderBy(w builder.Writer) error {
|
||||||
if len(statement.orderStr) > 0 {
|
if len(statement.orderStr) > 0 {
|
||||||
if _, err := fmt.Fprintf(w, " ORDER BY %s", statement.orderStr); err != nil {
|
if _, err := fmt.Fprint(w, " ORDER BY ", statement.orderStr); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
w.Append(statement.orderArgs...)
|
w.Append(statement.orderArgs...)
|
||||||
|
|
Loading…
Reference in New Issue