!None_=  persistent-qq;QuasiQuoter for performing raw sql queries, analoguous to This and the following are convenient QuasiQuoters to perform raw SQL queries. They each follow the same pattern and are analogous to the similarly named raw functions. Neither the quoted function's behaviour, nor it's return value is altered during the translation and all documentation provided with it holds.These QuasiQuoters perform a simple substitution on the query text, that allows value substitutions, table name substitutions as well as column name substitutions.Here is a small example:!Given the following simple model: (Category rgt Int lft Int nam Text "We can now execute this raw query: let lft = 10 :: Int rgt = 20 :: Int width = rgt - lft nams = "first" :| ["second", "third"] in [sqlQQ| DELETE FROM ^{Category} WHERE {CategoryLft} BETWEEN  {lft} AND !{rgt}; UPDATE category SET {CategoryRgt} = {CategoryRgt} - #{width} WHERE 2{CategoryRgt} > #{rgt}; UPDATE category SET {CategoryLft} = {CategoryLft} - {width} WHERE @{CategoryLft} > \{rgt}; SELECT ?? FROM ^{Category} WHERE ^{Category}.@{CategoryNam} IN %{nams}; |]  ^{TableName}+ looks up the table's name and escapes it,  @{ColumnName}6 looks up the column's name and properly escapes it, #{value}G inserts the value via the usual parameter substitution mechanism and  %{values}' inserts comma separated values (of a  list). %{values} was added with 2.9.1  persistent-qqAnaloguous to   persistent-qqAnaloguous to   persistent-qqAnaloguous to   persistent-qqAnaloguous to   Safe            )persistent-qq-2.9.1-3SMxg7Fbmha1ZQYMvbkyvDatabase.Persist.Sql.Raw.QQDatabase.Persist.Sql.RawrawSqlData.List.NonEmptyNonEmpty rawExecuterawExecuteCountrawQuery rawQueryResPaths_persistent_qqsqlQQ executeQQexecuteCountQQqueryQQ queryResQQ $fShowTokenversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName