From: Justin B. <jgb...@gm...> - 2008-04-04 20:21:03
|
I just spent most of the day creating some TH functions that generate DirectDB style table and field definitions. It allows me to create a module that exports a table like so: module My_Table where $(mkDBDirectTable "my_table" [("event_dtl_id", [t|Int|]) , ("event_hdr_id", [t|Int|]) , ("foo", [t|Int|]) , ("bar", [t|Int|])]) The above is a table name and a list of fields with types. TH generates appropriate haskell source so the definition looks just something DBDirect would produce: module My_Table where type My_table = (RecCons Pts_dlvry_carrier_flight_id (Expr Int) (RecCons Pts_dlvry_carrier_id (Expr Int) ...)) my_table :: Table My_table my_table = baseTable "my_table" $ hdbMakeEntry Event_dtl_id # ... data Event_dtl_id = Event_dtl_id instance FieldTag Event_dtl_id where fieldName _ = "event_dtl_id" event_dtl_id :: Attr Event_dtl_id event_dtl_id = mkAttr Event_dtl_id .... I also have a function that creates a field using TH, which is very useful when you need "fake" fields in a projection: $(mkDBDirectField "filtered" [t|Bool|]) which produces something like: data Filtered = Filtered instance FieldTag Filtered where fieldName _ = "filtered" filtered :: Attr Filtered filtered = mkAttr Filtered Is there a place in the haskelldb source for TH utilities like this? Justin |