[      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None%&59;<=DIQR<TODO: replace with safe coercions when that hits platform-1.<TODO: replace with safe coercions when that hits platform-1.fNormalized append of two inductive tuples. Note that this will flatten any nested inductive tuples. AAn inductively defined "tuple", or heterogeneous, non-empty list. Name of a database table. Name of a database column.Add a suffix to a column name.1Convert a column name into a string, with quotes.0Convert a table name into a string, with quotes.Create a column name.Create a column name.*Escape double quotes in an SQL identifier. ,Get the first element of an inductive tuple.-Get the second element of an inductive tuple.,Get the third element of an inductive tuple.-Get the fourth element of an inductive tuple.,Get the fifth element of an inductive tuple.,Get the sixth element of an inductive tuple..Get the seventh element of an inductive tuple.-Get the eighth element of an inductive tuple.,Get the ninth element of an inductive tuple.,Get the tenth element of an inductive tuple.-  #     1 1Safe%&9;T(Some value that is representable in SQL.An SQL literal.'6Any datatype representable in (Selda's subset of) SQL.(VFormat string used to represent date and time when talking to the database backend.)MFormat string used to represent date when talking to the database backend.*TFormat string used to represent time of day when talking to the database backend.8Constructor tag for all literals. Used for Ord instance.4Compare two literals of different type for equality.& !"#$%&'()* !"#$%&'()*  !"#$%&'()*None 9;<=DQRT+1An inductive tuple forming a table specification.,@An inductive tuple where each element is a column specification.-Column attributes such as nullability, auto increment, etc. When adding elements, make sure that they are added in the order required by SQL syntax, as this list is only sorted before being pretty-printed.2#Any SQL type which is NOT nullable.3Is the given type nullable?4Used by 3 to indicate a nullable type.5Used by 3 to indicate a nullable type.6A table column specification.7A database table. Tables are parameterized over their column types. For instance, a table containing one string and one integer, in that order, would have the type Table (Text :*: Int)L, and a table containing only a single string column would have the type  Table Text.8Table and column names may contain any character except NUL=, and be non-empty. Column names must be unique per table.9Name of the table. NOT guaranteed to be a valid SQL name.%All table columns. Invariant: the = list of each column is sorted and contains no duplicates.8*A non-nullable column with the given name.9&A nullable column with the given name.:Marks the given column as the table's primary key. A table may only have one primary key; marking more than one key as primary will result in a run-time error.;]Automatically increment the given attribute if not specified during insert. Also adds the  PRIMARY KEY attribute on the column.9Add an attribute to a column. Not for public consumption.<(A table with the given name and columns.Remove duplicate attributes..Sort a list and remove all duplicates from it./Sort a list, then group all identical elements.@Ensure that there are no duplicate column names or primary keys.&+,-./0123456    7 89:;<#+,-./0123456    7 89:;<+,-./0123456    7 89:;<None %&+9;DQR DUnderlying column expression type, not tied to any particular query.=A database column. A column is often a literal column table, but can also be an expression over such a column or a constant expression.JA type-erased column, which may also be renamed. Only for internal use.>Any column tuple.?<Convert a tuple of Haskell types to a tuple of column types.@A literal expression.AA unary operation. Note that the provided function name is spliced directly into the resulting SQL query. Thus, this function should ONLY be used to implement well-defined functions that are missing from Selda's standard library, and NOT in an ad hoc manner during queries.BLike A, but with two arguments.-Get all column names in the given expression.7 !"#$%&'()*+,-./01=2345>67?@AB89:;<=>?@AB. !"#%)$&'(,*+./-01=2345>67?@AB89  !"#$%&'()*+,-./01=2345>67?@AB89:;<=>?@AB None 09:;DQRCOne or more aggregate columns.DtThe results of a join are always nullable, as there is no guarantee that all joined columns will be non-null.  JoinCols a where av is an extensible tuple is that same tuple, but in the outer query and with all elements nullable. For instance: b JoinCols (Col (Inner s) Int :*: Col (Inner s) Text) = Col s (Maybe Int) :*: Col s (Maybe Text)ENConvert one or more inner column to equivalent columns in the outer query. GOuterCols (Aggr (Inner s) a :*: Aggr (Inner s) b) = Col s a :*: Col s b, for instance.FDenotes an inner query. For aggregation, treating sequencing as the cartesian product of queries does not work well. Instead, we treat the sequencing of  aggregate{ with other queries as the cartesian product of the aggregated result of the query, a small but important difference.However, for this to work, the aggregate query must not depend on any columns in the outer product. Therefore, we let the aggregate query be parameterized over Inner s+ if the parent query is parameterized over s , to enforce this separation.GnA single aggregate column. Aggregate columns may not be used to restrict queries. When returned from an  aggregateK subquery, an aggregate column is converted into a non-aggregate column.H+Create a named aggregate function. Like As, this function is generally unsafe and should ONLY be used to implement missing backend-specific functionality. CCDEFGDEHFG CCDEFGDEHCCDEFGDEHFG None %&9;QRTI1An inductive tuple of Haskell-level values (i.e. Int :*: Maybe Text() which can be inserted into a table.HeException indicating the use of a default value. If any values throwing this during evaluation of param xs, will be replaced by their default value.J(A parameter to a prepared SQL statement.L'The order in which to sort result rows.IAST for SQL queries.JA source for an SQL query.IKHLJKLMNIMNOPQRSJTUVWXYZ[\]^IKHLJKLMNIMNOPQRSJUTVWX IKHLJKLMNIMNOPQRSJTUVWXYZ[\]^ NoneI_SQL generation internal state. Contains the subqueries and static (i.e. not dependent on any subqueries) restrictions of the query currently being built, as well as a name supply for column renaming.O An SQL query.`.Run a query computation from an initial state.aJRun a query computation in isolation, but reusing the current name supply.b.Initial state: no subqueries, no restrictions.c,Generate a unique name for the given column.d#Get a guaranteed unique identifier.e$Get a guaranteed unique column name._fghijOkl`abcde_fjghiOkl`abcde_fghijOkl`abcde NoneS Compile a  CREATE TABLE query from a table definition.mCompile a table column.T Compile a  DROP TABLE query.n Compile an  INSERT INTO query inserting m rows with n cols each. Note that backends expect insertions to NOT have a semicolon at the end. In addition to the compiled query, this function also returns the list of parameters to be passed to the backend.UCompile a column attribute.PQRSmTnUPQRSmTnUPQRSmTnU None%& oYSQL pretty-printer. The state is the list of SQL parameters to the prepared statement.pO(n log n) equivalent of  nub . sortqRun a pretty-printer.r2Compile an SQL AST into a parameterized SQL query.s#Compile a single column expression.t Compile an UPATE statement.u Compile a DELETE statement.vbPretty-print a literal as a named parameter and save the name-value binding in the environment.w&Generate a unique name for a subquery.xPretty-print an SQL AST.yz{|}~opqrstuvwxyz{|}~opqrstuvwxyz{|}~opqrstuvwxNone%&9:;<=DOQRTV1Any table type that can have selectors generated.W5The inductive tuple of selectors for a table of type a.XBA column selector. Column selectors can be used together with the [ and !=5 operators to get and set values on inductive tuples.Y!A selector-value assignment pair.[@Get the value at the given index from the given inductive tuple.\For each selector-value pair in the given list, on the given tuple, update the field pointed out by the selector with the corresponding value.]Generate selector functions for the given table. Selectors can be used to access the fields of a query result tuple, avoiding the need to pattern match on the entire tuple. tbl :: Table (Int :*: Text) tbl = table "foo" $ required "bar" :*: required "baz" (tblBar :*: tblBaz) = selectors tbl q :: Query s Text q = tblBaz <$> select tbl^[A pair of the table with the given name and columns, and all its selectors. For example: tbl :: Table (Int :*: Text) (tbl, tblBar :*: tblBaz) = tableWithSelectors "foo" $ required "bar" :*: required "baz" q :: Query s Text q = tblBaz <$> select tblVWXYZ[\]^ VWXYZ[\]^ VWXYZ[\]^Z2NoneRemove all dead columns recursively, assuming that the given list of column names contains all names present in the final result.^Return the names of all columns in the given top-level query. Subqueries are not traversed.)Return the names of all non-output (i.e. NH) columns in the given top-level query. Subqueries are not traversed.RGet all column names appearing in the given list of (possibly complex) columns._Remove all columns but the given, named ones and aggregates, from a query's list of outputs. If we want to refer to a column in an outer query, it must have a name. If it doesn't, then it's either not referred to by an outer query, or the outer query duplicates the expression, thereby referring directly to the names of its components.iBuild the outermost query from the SQL generation state. Groups are ignored, as they are only used by  aggregate./Get all output columns from a list of SQL ASTs.None %&9:;DQRT _OAn acceptable query result type; one or more columns stitched together with :*:.Converts the given list of SqlValue1s into an tuple of well-typed results. See  querySQLiteb for example usage. The given list must contain exactly as many elements as dictated by the Res r. If the result is  a :*: b :*: cC, then the list must contain exactly three values, for instance.4Produce a list of all columns present in the result.a3Compile a query into a parameterised SQL statement.hCompile a query into a parameterised SQL statement. Also returns all tables depended on by the query.b Compile an INSERT query, given the keyword representing default values in the target SQL dialect, a table and a list of items corresponding to the table.c Compile an UPDATE query. Compile a  DELETE FROM query.OCompile a query to an SQL AST. Groups are ignored, as they are only used by  aggregate. _`abcThe table to update.Update function.!Predicate: update only when true. _`abc _`abcNone:dIQuery the given table. Result is returned as an inductive tuple, i.e. 0first :*: second :*: third <- query tableOfThree.eQuery an ad hoc table of type aK. Each element in the given list represents one row in the ad hoc table.f2Restrict the query somehow. Roughly equivalent to WHERE.giExecute a query, returning an aggregation of its results. The query must return an inductive tuple of  Aggregate columns. When  aggregatez returns, those columns are converted into non-aggregate columns, which may then be used to further restrict the query.Note that aggregate queries must not depend on outer queries, nor must they return any non-aggregate columns. Attempting to do either results in a type error.The SQL HAVING) keyword can be implemented by combining  aggregate and f: -- Find the number of people living on every address, for all addresses -- with more than one tenant: -- SELECT COUNT(name) AS c, address FROM housing GROUP BY name HAVING c > 1 numPpl = do num_tenants :*: address <- aggregate $ do _ :*: address <- select housing groupBy address return (count address :*: some address) restrict (num_tenants .> 1) return (num_tenants :*: address)h Perform a  LEFT JOIN with the current result set (i.e. the outer query) as the left hand side, and the given query as the right hand side. Like with gL, the inner (or right) query must not depend on the outer (or right) one.The given predicate over the values returned by the inner query determines for each row whether to join or not. This predicate may depend on any values from the outer query.6For instance, the following will list everyone in the peopled table together with their address if they have one; if they don't, the address field will be NULL. getAddresses :: Query s (Col s Text :*: Col s (Maybe Text)) getAddresses = do name :*: _ <- select people _ :*: address <- leftJoin (\(n :*: _) -> n .== name) (select addresses) return (name :*: address)i#Group an aggregate query by a column. Attempting to group a non-aggregate query is a type error. An aggregate representing the grouped-by column is returned, which can be returned from the aggregate query. For instance, if you want to find out how many people have a pet at home: taggregate $ do name :*: pet_name <- select people name' <- groupBy name return (name' :*: count(pet_name) > 0)jDrop the first m rows, then get at most n2 of the remaining rows from the given subquery.kGSort the result rows in ascending or descending order on the given row.defghGPredicate determining which lines to join. | Right-hand query to join.ijkdefghijkdefghijkNonelsCast a column to another type, using whichever coercion semantics are used by the underlying SQL implementation.lABHlABHllNone%&T Query to result mapping.UTable to query mapping, for keeping track of which queries depend on which tables.Items currently in cache.Max number of items in cache.Next cache prio to use.9Cache the given value, with the given table dependencies.5Get the cached value for the given key, if it exists.=Invalidate all items in cache that depend on the given table.5Set the maximum number of items allowed in the cache.NoneI m(The simplest form of Selda computation; n specialized to .n0Monad transformer adding Selda SQL capabilities.q(Some monad with Selda SQL capabilitites.r*Get the backend in use by the computation.s4A collection of functions making up a Selda backend.uExecute an SQL statement.vExecute an SQL statement and return the last inserted primary key, where the primary key is auto-incrementing. Backends must take special care to make this thread-safe.wcGenerate a custom column type for the column having the given Selda type and list of attributes.xTThe keyword that represents the default value for auto-incrementing primary keys.yA function which executes a query and gives back a list of extensible tuples; one tuple per result row, and one tuple element per column.zHRun a Selda transformer. Backends should use this to implement their withX functions.mnopqrstuvwxyz{+ !"#$%&()*-./01JKUmnopqrstwxuvyz+ystuvwxqrnopmJK !"#$%&-./01U()*zmnopqrstuvwxyz{None:T?Run a query within a Selda monad. In practice, this is often a ne transformer on top of some other monad. Selda transformers are entered using backend-specific withX functions, such as  withSQLite from the SQLite backend.Insert the given values into the given table. All columns of the table must be present. If your table has an auto-incrementing primary key, use the special value defl for that column to get the auto-incrementing behavior. Returns the number of rows that were inserted.KTo insert a list of tuples into a table with auto-incrementing primary key: Tpeople :: Table (Int :*: Text :*: Int :*: Maybe Text) people = table "ppl" $ autoPrimary "id" required "name" required "age" optional "pet" main = withSQLite "my_database.sqlite" $ do insert_ people [ def :*: "Link" :*: 125 :*: Just "horse" , def :*: "Zelda" :*: 119 :*: Nothing , ... ]Like i, but does not return anything. Use this when you really don't care about how many rows were inserted.Like , but returns the primary key of the last inserted row. Attempting to run this operation on a table without an auto-incrementing primary key is a type error.Update the given table using the given update function, for all rows matching the given predicate. Returns the number of updated rows.Like 0, but doesn't return the number of updated rows.jFrom the given table, delete all rows matching the given predicate. Returns the number of deleted rows.Like 1, but does not return the number of deleted rows.%Create a table from the given schema.?Create a table from the given schema, unless it already exists.Drop the given table.#Drop the given table, if it exists.Perform the given computation atomically. If an exception is raised during its execution, the enture transaction will be rolled back, and the exception re-thrown.$Set the maximum local cache size to nr. A cache size of zero disables local cache altogether. Changing the cache size will also flush all entries.(By default, local caching is turned off.WARNING: local caching is guaranteed to be consistent with the underlying database, ONLY under the assumption that no other process will modify it. Also note that the cache is shared between ALL Selda computations running within the same process.5Build the final result from a list of result columns.HGenerate the final result of a query from a list of untyped result rows.hRun the given computation over a table after invalidating all cached results depending on that table.%Execute a statement without a result.The table to update. Predicate.Update function._`nqrNone9;*Any column type that can be used with the  and  functions.Is the given column null? Ordering for k. Ordering for k.|The default value for a column during insertion. For an auto-incrementing primary key, the default value is the next key.Using defQ in any other context than insertion results in a runtime error. Likewise, if defV is given for a column that does not have a default value, the insertion will fail.gLift a non-nullable column to a nullable one. Useful for creating expressions over optional columns: people :: Table (Text :*: Int :*: Maybe Text) people = table "people" $ required "name" required "age" optional "pet" peopleWithCats = do name :*: _ :*: pet <- select people restrict (pet .== just "cat") return nameSQL NULL, at any type you like.Specialization of @ for integers.Specialization of @ for doubles.Specialization of @ for text. True and false boolean literals. True and false boolean literals.The SQL LIKE operator; matches strings with % wildcards. For instance: "%gon" `like` "dragon" .== true2The number of non-null values in the given column..The average of all values in the given column.EThe greatest value in the given column. Texts are compared lexically.EThe smallest value in the given column. Texts are compared lexically.#Sum all values in the given column.4Round a value to the nearest integer. Equivalent to  roundTo 0.6Round a column to the given number of decimals places.(Calculate the length of a string column.Boolean negation.-Convert a boolean column to any numeric type..Convert an integer column to any numeric type.Convert any column to a string.$ '+,23456789:;<=>?@CDEFGILMNOPQRSTVWXYZ[\]^_`abcdefghijkmnqqnm7O=_`X[YZ\'?>LMN defjk@GCEDFhgiI+,6 2354WV<^]89:;PQRaSTbc $ 444444324None%&*9:;<=DQRTIConvert a value to a Haskell type from the type's corresponding relation.FConvert a value from its Haskell type into the corresponding relation.7Compute all columns needed to represent the given type.6Create a dummy value where all fields are replaced by  unsafeCoerce'd ints. See  and  for more information.-The relation corresponding to the given type.YA dummy of some type. Encapsulated to avoid improper use, since all of its fields are d ints.1Some attribute that may be set on a table column.UA generic column attribute. Essentially a pair or a record selector over the type a and a column attribute.The relation corresponding to the given Haskell type. This relation simply corresponds to the fields in the data type, from left to right. For instance: 1data Foo = Foo { bar :: Int , baz :: Text }In this example,  Relation Foo is (Int :*: Text), as the first field of Foo has type Int, and the second has type Text.,A generic table. Needs to be unpacked using gen before use with d, , etc.:Any type which has a corresponding relation. To make a  Relational' instance for some type, simply derive .dNote that only types which have a single data constructor, and where all fields are instances of  can be used with this module. Attempting to use functions in this module with any type which doesn't obey those constraints will result in a very confusing type error.QGenerate a table from the given table name and list of column attributes. All MaybeT fields in the table's type will be represented by nullable columns, and all non-MaybeC fields fill be represented by required columns. For example: data Person = Person { id :: Int , name :: Text , age :: Int , pet :: Maybe Text } deriving Generic people :: GenTable Person people = genTable "people" [(name, autoPrimaryGen)]:This example will create a table with the column types #Int :*: Text :*: Int :*: Maybe Text?, where the first field is an auto-incrementing primary key.Convert a generic type into the corresponding database relation. A type's corresponding relation is simply the inductive tuple consisting of all of the type's fields. data Person = Person { id :: Int , name :: Text , age :: Int , pet :: Maybe Text } deriving Generic somePerson = Person 0 "Velvet" 19 Nothing (theId :*: theName :*: theAge :*: thePet) = toRel somePerson?This is mainly useful when inserting values into a table using ! and the other functions from Database.Selda.Convenient synonym for  map toRel.Re-assemble a generic type from its corresponding relation. This can be done either for ad hoc queries or for queries over generic tables: data SimplePerson = SimplePerson { name :: Text , age :: Int } deriving Generic demoPerson :: SimplePerson demoPerson = fromRel ("Miyu" :*: 10) adhoc :: Table (Text :*: Int) adhoc = table "adhoc" $ required "name" required "age" getPersons1 :: MonadSelda m => m [SimplePerson] getPersons1 = map fromRel <$> query (select adhoc) generic :: GenTable SimplePerson generic = genTable "generic" [] getPersons2 :: MonadSelda m => m [SimplePerson] getPersons2 = map fromRel <$> query (select (gen generic)) Applying toReld to an inductive tuple which isn't the corresponding relation of the return type is a type error.Convenient synonym for  map fromRel.Like A, but accepts a generic table and its corresponding data type.Like >, but accepts a generic table and its corresponding data type.Like >, but accepts a generic table and its corresponding data type.,A primary key which does not auto-increment.!An auto-incrementing primary key.hExtract all column names from the given type. If the type is not a record, the columns will be named col_1, col_2, etc.!Create a dummy of the given type.FGet the selector identifier of the given selector for the given dummy.+! !""#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ [ \ ] ^ _ ` a b b c d e f g h i j k lmnopqrstuvwxyz{|}~#$     NO !"#$%&'()*+,-./012345678U95$2:;<=>?@ABCDEFGHIJKLM N _ O P Q R S T U R S V W X Y Z [ # \ ] ^ _ ` a b c d e f g h i j k l f m n o p f q r s t  u v w x y z { | } } ~         o$selda-0.1.3.0-J6nSGNVBdKL3YxIoDRVD3DDatabase.Selda.GenericDatabase.Selda.BackendDatabase.SeldaDatabase.Selda.UnsafeDatabase.Selda.TypesDatabase.Selda.SqlTypeDatabase.Selda.TableDatabase.Selda.ColumnDatabase.Selda.InnerDatabase.Selda.SQLDatabase.Selda.Query.TypeDatabase.Selda.Table.CompileDatabase.Selda.SQL.PrintDatabase.Selda.SelectorsDatabase.Selda.TransformDatabase.Selda.CompileDatabase.Selda.QueryDatabase.Selda.CachingDatabase.Selda.Frontendbase GHC.GenericsGenericControl.Monad.IO.ClassliftIOMonadIO#text-1.2.2.1-9Yh8rJoh8fO2JMLWffT3QsData.Text.InternalTextAppendapp:++:TupHead:*: TableNameColNamefirstsecondthirdfourthfifthsixthseventheighthninthtenthSqlValueSqlIntSqlFloat SqlStringSqlBoolSqlNullLitLitSLitILitDLitBLitTSLitDateLitTimeLitJustLitNullSqlTypesqlDateTimeFormat sqlDateFormat sqlTimeFormat TableSpecColSpecsColAttrPrimary AutoIncrementRequiredOptionalNonNull IsNullable NotNullableNullableColSpecTablerequiredoptionalprimary autoPrimarytableColColumnsColsliteralfunfun2 AggregatesJoinCols OuterColsInnerAggraggrInsertParamOrderAscDescQueryOnErrorFailIgnorecompileCreateTablecompileDropTablecompileColAttr HasSelectors SelectorsSelector Assignment:=!with selectorstableWithSelectorsResultRescompile compileInsert compileUpdateselect selectValuesrestrict aggregateleftJoingroupBylimitordercastSeldaMSeldaTSunS MonadSelda seldaBackend SeldaBackendrunStmt runStmtWithPK customColTypedefaultKeyword QueryRunner runSeldaT$fMonadSeldaSeldaT$fFunctorSeldaT$fApplicativeSeldaT $fMonadSeldaT$fMonadIOSeldaT$fMonadThrowSeldaT$fMonadCatchSeldaT$fMonadMaskSeldaT$fMonadTransSeldaTqueryinsertinsert_ insertWithPKupdateupdate_ deleteFrom deleteFrom_ createTabletryCreateTable dropTable tryDropTable transaction setLocalCacheMinMax.==./=.>.<.>=.<=isNull.&&.|| ascending descendingdefjustnull_intfloattexttruefalselikecountavgmax_min_sum_round_roundTolength_not_fromBoolfromInttoString $fMinMaxMaybe $fMinMaxText $fMinMaxa AttributeGenAttr:-RelationGenTablegen RelationalgenTabletoReltoRelsfromRelfromRelsinsertGenWithPK insertGen insertGen_ primaryGenautoPrimaryGen $fGFromRelM1 $fGFromRelK1 $fGFromRel:*:$fGRelation:*: $fGRelationK1 $fGRelationM1$fGRelationM10$fGRelationM11 $fTraitsa $fTraitsMaybe unsafeToListunsafeFromList addColSuffix fromColName fromTableName mkColName mkTableName escapeQuotesToDyntoDynsfromDynsUnsafetupHead$fToDyna $fToDyn:*: $fAppendab $fAppend:*:c$fTupa$fTup:*:$fOrd:*:$fEq:*: $fShow:*:$fHashableTableName litConTagcompLitmkLitsqlTypefromSql defaultValue$fSqlTypeMaybe$fSqlTypeTimeOfDay $fSqlTypeDay$fSqlTypeUTCTime $fSqlTypeBool $fSqlTypeText$fSqlTypeDouble $fSqlTypeInt $fShowLit$fShowSqlValue$fOrdLit$fEqLit tableName tableColscolAttrsaddAttrtidysnubsoupvalidate mergeSpecsunCSColInfocolNamecolTypenewCol $fTableSpeca$fTableSpec:*: $fNonNullaExpSomeCol allNamesInBinOpGtLtGteLteEqNeqAndOrAddSubMulDivLikeUnOpAbsNotNegSgnIsNullFunTblColFun2CastAggrExCunCSomeNamedtoTupfromTupliftC2liftC$fFractionalCol$fFractionalCol0$fFractionalCol1$fFractionalCol2$fNumCol $fNumCol0 $fIsStringCol $fColumnsCol $fColumns:*:unAggrsunAggr$fAggregates:*:$fAggregatesAggrDefaultValueExceptionSQL SqlSourceparamscolssource restrictsgroupsorderinglimitsProductLeftJoinValues EmptyTable $fInserta $fInsert:*: $fExceptionDefaultValueException $fOrdParam $fEqParam $fShowParamGenState runQueryMisolate initStaterenamefreshId freshNamesourcesstaticRestricts groupCols nameSupplyunQcompileTableCol compInsertPPrunPPcompSqlcompExp compUpdate compDeleteppLitfreshQueryNameppSqlPPStateppParamsppTables ppParamNS ppQueryNSdependOn ppSomeColppColsppColppUnOpppBinOpmkSelupd$fHasSelectorsta$fHasSelectorst:*:removeDeadCols allColNamesallNonOutputColNamescolNameskeepCols state2sqlallColstoRes finalColscompileWithTables compileDelete compQuery $fResultCol $fResult:*:resultsdepsitemsmaxItemsnextPriocachecached invalidate setMaxItems ResultCacheCacheKey emptyCachetheCachecache'cached' invalidate' setMaxItems' $fHashableLit$fHashableParamghc-prim GHC.TypesIO queryWith mkResults withInvalexecgFromRelgToRelgTblColsgMkDummymkDummyidentifyRelDummy Unsafe.Coerce unsafeCoercetblColsGFromRel GRelationTraits isMaybeType