Skip to content

Instantly share code, notes, and snippets.

@erdesigns-eu
Last active August 26, 2022 07:41
Show Gist options
  • Save erdesigns-eu/144621646e6b8db1b803b0dfe96a463b to your computer and use it in GitHub Desktop.
Save erdesigns-eu/144621646e6b8db1b803b0dfe96a463b to your computer and use it in GitHub Desktop.
Format Value for SQL Query
/**
* Format value for insert or update in SQLite database
* @param {Any} val
* @returns Boolean/Number/String/Null
*/
const formatSQLValue = (val) => {
const escapeString = (str) => {
return str.replace(/[\0\x08\x09\x1a\n\r"'\\\%]/g, (char) => {
switch (char) {
case "\0" : return "\\0";
case "\x08" : return "\\b";
case "\x09" : return "\\t";
case "\x1a" : return "\\z";
case "\n" : return "\\n";
case "\r" : return "\\r";
case "\"" :
case "'" :
case "\\" :
case "%" : return "\\" + char;
default: return char;
}
});
}
const formatDefault = () => {
if (val instanceof Date) {
return `${Math.floor(val.getTime() / 1000)}`;
} else
if (val instanceof Function) {
return formatSQLValue(val());
} else
if (val instanceof Array) {
return `${escapeString(JSON.stringify(val))}`;
} else
if (val instanceof Object && val !== null) {
return `${escapeString(JSON.stringify(val))}`;
} else {
return `NULL`;
}
}
switch (typeof val) {
case 'boolean' : return `${val.toString()}`;
case 'number' : return `${val.toString()}`;
case 'string' : return `'${escapeString(val)}'`;
case 'undefined' : return `NULL`;
default: return formatDefault();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment