diff --git a/internal/sqladapter/result.go b/internal/sqladapter/result.go
index 3ad00023f095222f8ae0fcd56d7897d6a2f73fc0..69d7e623a2ac3724dea27ec4e3d0a8a458fdb0b7 100644
--- a/internal/sqladapter/result.go
+++ b/internal/sqladapter/result.go
@@ -63,9 +63,11 @@ func (r *Result) setErr(err error) error {
 	r.errMu.Lock()
 	defer r.errMu.Unlock()
 
-	if err != nil {
-		r.err = err
+	if err == nil {
+		return nil
 	}
+
+	r.err = err
 	return err
 }
 
diff --git a/lib/sqlbuilder/builder.go b/lib/sqlbuilder/builder.go
index b2fa6caeb606005bd58198e722c795f0485fa6d6..7509024361ab3246eb4b7d28ab6feaea685a4bd0 100644
--- a/lib/sqlbuilder/builder.go
+++ b/lib/sqlbuilder/builder.go
@@ -313,39 +313,37 @@ func (s *stringer) compileAndReplacePlaceholders(stmt *exql.Statement) (query st
 }
 
 func (iter *iterator) Scan(dst ...interface{}) error {
-	if iter.err != nil {
-		return iter.err
+	if err := iter.Err(); err != nil {
+		return err
 	}
 	return iter.cursor.Scan(dst...)
 }
 
+func (iter *iterator) setErr(err error) error {
+	iter.err = err
+	return iter.err
+}
+
 func (iter *iterator) One(dst interface{}) error {
-	if iter.err != nil {
-		return iter.err
+	if err := iter.Err(); err != nil {
+		return err
 	}
-
 	defer iter.Close()
-
-	if !iter.Next(dst) {
-		return iter.Err()
-	}
-
-	return nil
+	return iter.setErr(iter.next(dst))
 }
 
 func (iter *iterator) All(dst interface{}) error {
-	var err error
-
-	if iter.err != nil {
-		return iter.err
+	if err := iter.Err(); err != nil {
+		return err
 	}
-
 	defer iter.Close()
 
 	// Fetching all results within the cursor.
-	err = fetchRows(iter.cursor, dst)
+	if err := fetchRows(iter.cursor, dst); err != nil {
+		return iter.setErr(err)
+	}
 
-	return err
+	return nil
 }
 
 func (iter *iterator) Err() (err error) {
@@ -353,31 +351,44 @@ func (iter *iterator) Err() (err error) {
 }
 
 func (iter *iterator) Next(dst ...interface{}) bool {
-	var err error
 
-	if iter.err != nil {
+	if err := iter.Err(); err != nil {
+		return false
+	}
+
+	if err := iter.next(dst...); err != nil {
+		// ignore db.ErrNoMoreRows, just break.
+		if err != db.ErrNoMoreRows {
+			iter.setErr(err)
+		}
 		return false
 	}
 
+	return true
+}
+
+func (iter *iterator) next(dst ...interface{}) error {
+
 	switch len(dst) {
 	case 0:
 		if ok := iter.cursor.Next(); !ok {
-			iter.err = iter.cursor.Err()
-			iter.Close()
-			return false
+			defer iter.Close()
+			err := iter.cursor.Err()
+			if err == nil {
+				err = db.ErrNoMoreRows
+			}
+			return err
 		}
-		return true
+		return nil
 	case 1:
-		if err = fetchRow(iter.cursor, dst[0]); err != nil {
-			iter.err = err
-			iter.Close()
-			return false
+		if err := fetchRow(iter.cursor, dst[0]); err != nil {
+			defer iter.Close()
+			return err
 		}
-		return true
+		return nil
 	}
 
-	iter.err = errors.New("Next does not currently supports more than one parameters")
-	return false
+	return errors.New("Next does not currently supports more than one parameters")
 }
 
 func (iter *iterator) Close() (err error) {
diff --git a/lib/sqlbuilder/convert.go b/lib/sqlbuilder/convert.go
index 0e1f3d94c09e1e5e6dba6269d5ca2de7e64ec280..47d8c3ce3568ca9748f272c7f82b809f2b4970d2 100644
--- a/lib/sqlbuilder/convert.go
+++ b/lib/sqlbuilder/convert.go
@@ -83,6 +83,9 @@ func (tu *templateWithUtils) ToWhereWithArguments(term interface{}) (where exql.
 			where.Conditions = append(where.Conditions, w.Conditions...)
 		}
 		return
+	case db.RawValue:
+		where.Conditions = []exql.Fragment{exql.RawValue(t.String())}
+		return
 	case db.Constraints:
 		for _, c := range t.Constraints() {
 			w, v := tu.ToWhereWithArguments(c)