diff --git a/exec/select.go b/exec/select.go index d4dc374..f226e40 100644 --- a/exec/select.go +++ b/exec/select.go @@ -86,6 +86,15 @@ func (s *Select[T]) execute(conn *simpleorm.DBConnection, tx *sql.Tx) error { dml += " WHERE " + s.whereStmt } + if len(s.ordering) > 0 { + orderBy, err := s.target.GetOrderByDML(s.ordering...) + if err != nil { + log.LogError("Failed to create ORDER BY part: %s", err) + } else { + dml += orderBy + } + } + var effectiveArgs []any = s.args if s.limit != -1 { dml += " LIMIT ?" @@ -97,15 +106,6 @@ func (s *Select[T]) execute(conn *simpleorm.DBConnection, tx *sql.Tx) error { effectiveArgs = append(effectiveArgs, s.offset) } - if len(s.ordering) > 0 { - orderBy, err := s.target.GetOrderByDML(s.ordering...) - if err != nil { - log.LogError("Failed to create ORDER BY part: %s", err) - } else { - dml += orderBy - } - } - log.LogInfo("Preparing sql: %s", dml) log.LogDebug("Preparing sql: %s, with args: %s", dml, effectiveArgs) diff --git a/test/select_test.go b/test/select_test.go index 858bcac..052c5bd 100644 --- a/test/select_test.go +++ b/test/select_test.go @@ -358,6 +358,46 @@ func TestSelectOrderByAsc(t *testing.T) { } } +func TestSelectOrderByAscWithLimitAndOffset(t *testing.T) { + // GIVEN + orm, conn := testSetup() + defer cleanUp("test.db", conn) + + err := orderBySetup(conn, orm) + if err != nil { + log.LogError("TestSelectOrderByAsc setup failed: %s", err) + t.Fail() + return + } + + // WHEN + selectExec, err := exec.CreateSelect[Test](orm) + if err != nil { + log.LogError("TestSelectOrderByAsc failed: %s", err) + t.Fail() + return + } + selectExec.OrderBy(schema.OrderBy{Field: "StringField", Direction: "ASC"}).Limit(3).Offset(0) + + err = selectExec.Execute(conn) + if err != nil { + log.LogError("TestSelectOrderByAsc failed: %s", err) + t.Fail() + return + } + + // THEN + var resultStr string + for _, obj := range selectExec.Results() { + resultStr += obj.StringField + } + + if resultStr != "ABC" { + log.LogError("TestSelectOrderByAsc failed, epxected: ABC actual: %s", resultStr) + t.Fail() + } +} + func orderBySetup(conn *simpleorm.DBConnection, orm *simpleorm.ORM) error { insertExec, err := exec.NewInsert[Test](orm, Test{Int64Field: -1, IntField: 1, StringField: "C"},