Cast text[] to integer[] for version comparison

This commit is contained in:
Michael Snoyman 2019-06-20 10:12:54 +03:00
parent 98d0d61958
commit 07f3ef293f
No known key found for this signature in database
GPG Key ID: A048E8C057E86876

View File

@ -570,14 +570,17 @@ selectApplyMaybe f = fmap (fmap f . listToMaybe) . select
-- | Convert a string representation of a version to an array so it can be used for sorting.
versionArray :: SqlExpr (Entity Version) -> SqlExpr (Value [Int64])
versionArray v = stringToArray (v ^. VersionVersion) (val ("." :: String))
versionArray v = stringsToInts (stringToArray (v ^. VersionVersion) (val ("." :: String)))
stringsToInts :: SqlExpr (Value [String]) -> SqlExpr (Value [Int64])
stringsToInts = unsafeSqlCastAs "INTEGER[]"
-- | Define postgresql native function in Haskell with Esqueleto
stringToArray ::
(SqlString s1, SqlString s2)
=> SqlExpr (Value s1)
-> SqlExpr (Value s2)
-> SqlExpr (Value [Int64])
-> SqlExpr (Value [String])
stringToArray s1 s2 = unsafeSqlFunction "string_to_array" (s1, s2)
getSnapshotsForPackage