hasqlator-mysql 0.0.9 → 0.1.0
raw patch · 2 files changed
+42/−7 lines, 2 filesdep ~optics-corePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: optics-core
API changes (from Hackage documentation)
+ Database.MySQL.Hasqlator.Typed.Schema: [updatorNameModifier] :: Properties -> TableInfo -> String
+ Database.MySQL.Hasqlator.Typed.Schema: makeUpdators :: Properties -> Name -> [TableInfo] -> Q [Dec]
- Database.MySQL.Hasqlator.Typed.Schema: Properties :: (ColumnInfo -> String) -> (TableInfo -> String) -> (String -> String) -> Bool -> (TableInfo -> String) -> (TableInfo -> String) -> (TableInfo -> String) -> String -> (ColumnInfo -> String) -> Properties
+ Database.MySQL.Hasqlator.Typed.Schema: Properties :: (ColumnInfo -> String) -> (TableInfo -> String) -> (String -> String) -> Bool -> (TableInfo -> String) -> (TableInfo -> String) -> (TableInfo -> String) -> (TableInfo -> String) -> String -> (ColumnInfo -> String) -> Properties
Files
hasqlator-mysql.cabal view
@@ -1,5 +1,5 @@ Name: hasqlator-mysql-Version: 0.0.9+Version: 0.1.0 Synopsis: composable SQL generation Category: Database Copyright: Kristof Bastiaensen (2020)@@ -44,7 +44,7 @@ template-haskell, aeson, pretty-simple,- optics-core >= 0.4 && < 0.5+ optics-core >= 0.3 && < 0.5 hs-source-dirs: src Exposed-Modules:
src/Database/MySQL/Hasqlator/Typed/Schema.hs view
@@ -9,7 +9,7 @@ (TableInfo(..), ColumnInfo(..), fetchTableInfo, Sign(..), ColumnType(..), pprTableInfo, Properties(..), defaultProperties, makeFields, smartUpcase, smartDowncase,- makeRecords, makeSelectors, makeInsertors) where+ makeRecords, makeSelectors, makeInsertors, makeUpdators) where import Database.MySQL.Hasqlator import qualified Database.MySQL.Hasqlator.Typed as T import Database.MySQL.Base(MySQLConn)@@ -247,6 +247,7 @@ , includeSchema :: Bool , insertorTypeModifier :: TableInfo -> String , insertorNameModifier :: TableInfo -> String+ , updatorNameModifier :: TableInfo -> String , selectorNameModifier :: TableInfo -> String , fieldsQualifier :: String , insertorFieldModifier :: ColumnInfo -> String@@ -283,12 +284,15 @@ (if smartDowncase n `elem` reserved then "_" else mempty) <> "_tbl" , classNameModifier = \n -> "Has_" <> n <> "_field" , includeSchema = True+ , insertorNameModifier = \TableInfo{tableName} ->+ let n = Text.unpack tableName+ in smartDowncase (removeUnderscore n) <> "Insertor" , insertorTypeModifier = \TableInfo{tableName} -> let n = Text.unpack tableName in removeUnderscore (smartUpcase n) <> "Fields"- , insertorNameModifier = \TableInfo{tableName} ->+ , updatorNameModifier = \TableInfo{tableName} -> let n = Text.unpack tableName- in smartDowncase (removeUnderscore n) <> "Insertor"+ in smartDowncase (removeUnderscore n) <> "Updator" , selectorNameModifier = \TableInfo{tableName} -> let n = Text.unpack tableName in n <> "_sel"@@ -298,7 +302,7 @@ in smartDowncase n <> "_field" } where reserved :: [String]- reserved = ["id", "class", "data", "type", "foreign", "import",+ reserved = ["class", "data", "type", "foreign", "import", "default", "case"] getColumnTableName :: Properties -> ColumnInfo -> String@@ -421,7 +425,7 @@ |] , valD (varP insertorName) (normalB $ foldr1 (\x y -> [| $(x) <> $(y) |]) $- map insertorField $ tableColumns ti)+ map insertorField $ filter (not . autoIncrement) $ tableColumns ti) [] ] where @@ -441,6 +445,33 @@ fieldsQualifier props <> fieldNameModifier props ci) |] +updator :: Properties -> Name -> TableInfo -> Q [Dec]+updator props dbName ti =+ sequence [ sigD+ updatorName+ [t| T.Alias $(table) $(database) 'T.InnerJoined+ -> T.Alias $(table) $(database) 'T.InnerJoined+ -> [T.Updator $(table) $(database)]+ |]+ , funD updatorName+ [ do old <- newName "old"+ new <- newName "new"+ clause [ conP 'T.Alias [varP old]+ , conP 'T.Alias [varP new]]+ (normalB $ listE $ map (updatorField new) $+ filter (not . autoIncrement) $ tableColumns ti)+ []+ ]+ ]+ where+ table = litT $ strTyLit $ getTableName props ti+ database = conT dbName+ updatorName = mkName $ updatorNameModifier props ti+ updatorField :: Name -> ColumnInfo -> Q Exp+ updatorField new ci = [e| $(fieldName) T.:= $(varE new) $(fieldName) |]+ where fieldName = varE $ mkName $+ fieldsQualifier props <> fieldNameModifier props ci+ makeSelector :: Properties -> Name -> TableInfo -> Q [Dec] makeSelector props dbName ti = sequence [ sigD@@ -510,6 +541,10 @@ makeInsertors :: Properties -> Name -> [TableInfo] -> Q [Dec] makeInsertors props dbName tis = concat <$> traverse (insertor props dbName) tis++makeUpdators :: Properties -> Name -> [TableInfo] -> Q [Dec]+makeUpdators props dbName tis =+ concat <$> traverse (updator props dbName) tis makeSelectors :: Properties -> Name -> [TableInfo] -> Q [Dec] makeSelectors props dbName tis =