
// Execute raw SQL statement for GraphQL using Knex. (Can be re-generated.)
<%- tplTsOnly([`import { App } from '../../app.interface'${sc}`, '']) -%>
<%- tplTsOnly([`import Knex from 'knex'${sc}`, '']) -%>
<%- insertFragment('imports') %>

let dialects<%- tplTsOnly(': any') -%> = {
  mysql: 'mysql',
  sqlite: 'sqlite3',
  postgres: 'pg'
}<%- sc %>
<%- insertFragment('init') %>

<%- tplModuleExports(null, 'function sqlExecuteKnex(app) {', 'function sqlExecuteKnex(app: App) {') %>
  <%- insertFragment('func_knex', [
    `  let knex = app.get('knexClient')${tplTsOnly([' as Knex'])}${sc}`,
    '  if (!knex) {',
    `    throw new Error('No Knex client. (sql.execute.knex.*s)')${sc}`,
    '  }',
  ]) %>

  <%- insertFragment('func_dialect', [
    `  let dialect = dialects[knex.client.dialect]${sc}`,
    '  if (!dialect) {',
    `    throw new Error('Unsupported Knex dialect: \\'' + knex.client.dialect + '\\'. (sql.execute.knex.*s)')${sc}`,
    '  }',
  ]) %>
  <%- insertFragment('func_init') %>

  <%- insertFragment('func_exec', [
    `  let executeSql = ${tplJsOrTs('sql', '(sql: string)')} => {`,
    '    return knex.raw(sql)',
    `      .catch(${tplJsOrTs('err', '(err: Error)')} => {`,
    `        // ${lintDisableNextLineNoConsole}`,
    `        console.log('executeSql error=', err.message)${sc}`,
    `        throw err${sc}`,
    `      })${sc}`,
    `  }${sc}`,
  ]) %>

  let returns = {
    dialect,
    executeSql,
    openDb: undefined
    <%- insertFragment('moduleExports') %>
  }<%- sc %>

  <%- insertFragment('func_return') %>
  return returns<%- sc %>
}<%- sc %>
<%- insertFragment('more') %>

<%- insertFragment('exports') %>
<%- `${tplExport('moduleExports')}${sc}` %>

<%- insertFragment('funcs') %>
<%- insertFragment('end') %>
