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

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

<%- tplModuleExports(null, 'function sqlExecuteSequelize(app) {', 'function sqlExecuteSequelize(app: App) {') %>
  <%- insertFragment('func_sequelize', [
    `  let sequelize = app.get('sequelizeClient')${tplTsOnly([' as Sequelize'])}${sc}`,
    '  if (!sequelize) {',
    `    throw new Error('No Sequelize client. (sql.execute.sequelize.*s)')${sc}`,
    '  }',
  ]) %>

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

  <%- insertFragment('func_exec', [
  `  let executeSql = ${tplJsOrTs('sql', '(sql: string)')} => {`,
  '    return sequelize.query(sql)',
  '      .then(([result]) => result)',
  `      .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') %>
