This is my sequelize code:
const insertQuery = `
INSERT INTO transaction (amount, company_id, user_id, journal_id, type, account_id, plaid_transaction_id)
SELECT $amount, $company, $user_id, $journal_id, $type, $account_id, $plaid_transaction_id
WHERE NOT EXISTS (
SELECT 1 FROM transaction WHERE plaid_transaction_id = $plaid_transaction_id
)
RETURNING id, amount, company_id, user_id, journal_id, type, account_id, plaid_transaction_id;
`;
const bindParams: any = transactionData.map(({ amount, company_id, user_id, journal_id, type, account_id, plaid_transaction_id }) => ({
amount,
company: company_id,
user_id,
journal_id,
type,
account_id,
plaid_transaction_id,
}));
// Generate the SQL query with interpolated bind parameters
const resolvedQuery = insertQuery.replace(/\$\w+/g, match => {
const paramName = match.substring(1); // Remove the $ sign
const paramValue = bindParams[0][paramName]; // Assuming the first element contains all params
return sequelize.escape(paramValue); // Ensure proper escaping
});
console.log("Resolved SQL Query:", resolvedQuery);
const insertedRows = await sequelize.query(insertQuery, {
bind: bindParams,
type: QueryTypes.INSERT,
transaction: transactionObj,
});
return insertedRows;
I'm getting error: Named bind parameter "$amount" has no value in the given object.
This is my resolved sql query (which verifies that the data I'm passing is correct):
INSERT INTO transaction (amount, company_id, user_id, journal_id, type, account_id, plaid_transaction_id)
SELECT 89.4, 42, 48, 293, 'debit', 1858, 'rkA3lL4bxxf4Jvv9x4gaibxXQjlaLlC7kb4mL'
WHERE NOT EXISTS (
SELECT 1 FROM transaction WHERE plaid_transaction_id = 'rkA3lL4bxxf4Jvv9x4gaibxXQjlaLlC7kb4mL'
)
RETURNING id, amount, company_id, user_id, journal_id, type, account_id, plaid_transaction_id;