2017-01-03 11:20:28 +03:00
// Copyright 2016 The Xorm Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
2016-11-04 01:16:01 +03:00
package builder
import "fmt"
2017-01-03 11:20:28 +03:00
// Not defines NOT condition
2016-11-04 01:16:01 +03:00
type Not [ 1 ] Cond
var _ Cond = Not { }
2017-01-03 11:20:28 +03:00
// WriteTo writes SQL to Writer
2016-11-04 01:16:01 +03:00
func ( not Not ) WriteTo ( w Writer ) error {
if _ , err := fmt . Fprint ( w , "NOT " ) ; err != nil {
return err
}
switch not [ 0 ] . ( type ) {
case condAnd , condOr :
if _ , err := fmt . Fprint ( w , "(" ) ; err != nil {
return err
}
2018-07-20 05:10:17 +03:00
case Eq :
if len ( not [ 0 ] . ( Eq ) ) > 1 {
if _ , err := fmt . Fprint ( w , "(" ) ; err != nil {
return err
}
}
case Neq :
if len ( not [ 0 ] . ( Neq ) ) > 1 {
if _ , err := fmt . Fprint ( w , "(" ) ; err != nil {
return err
}
}
2016-11-04 01:16:01 +03:00
}
if err := not [ 0 ] . WriteTo ( w ) ; err != nil {
return err
}
switch not [ 0 ] . ( type ) {
case condAnd , condOr :
if _ , err := fmt . Fprint ( w , ")" ) ; err != nil {
return err
}
2018-07-20 05:10:17 +03:00
case Eq :
if len ( not [ 0 ] . ( Eq ) ) > 1 {
if _ , err := fmt . Fprint ( w , ")" ) ; err != nil {
return err
}
}
case Neq :
if len ( not [ 0 ] . ( Neq ) ) > 1 {
if _ , err := fmt . Fprint ( w , ")" ) ; err != nil {
return err
}
}
2016-11-04 01:16:01 +03:00
}
return nil
}
2017-01-03 11:20:28 +03:00
// And implements And with other conditions
2016-11-04 01:16:01 +03:00
func ( not Not ) And ( conds ... Cond ) Cond {
return And ( not , And ( conds ... ) )
}
2017-01-03 11:20:28 +03:00
// Or implements Or with other conditions
2016-11-04 01:16:01 +03:00
func ( not Not ) Or ( conds ... Cond ) Cond {
return Or ( not , Or ( conds ... ) )
}
2017-01-03 11:20:28 +03:00
// IsValid tests if this condition is valid
2016-11-04 01:16:01 +03:00
func ( not Not ) IsValid ( ) bool {
return not [ 0 ] != nil && not [ 0 ] . IsValid ( )
}