Add Test Case for Single Quote and Fix Logic
Summary: Single quotes need to be double to be correctly recognized in queries. #thanks mweststrate for reminding me Reviewed By: mweststrate Differential Revision: D21908315 fbshipit-source-id: 6c13f9ddb527d1144cc3df90ba48bdb5f2ed4952
This commit is contained in:
committed by
Facebook GitHub Bot
parent
a50c373631
commit
525d0e9925
@@ -51,13 +51,12 @@ export function constructQueryClause(
|
|||||||
): string {
|
): string {
|
||||||
return Object.entries(values).reduce(
|
return Object.entries(values).reduce(
|
||||||
(clauses, [key, val]: [string, Value], idx) => {
|
(clauses, [key, val]: [string, Value], idx) => {
|
||||||
const {type, value} = val;
|
|
||||||
const valueString =
|
const valueString =
|
||||||
type === 'null'
|
val.type === 'null'
|
||||||
? 'NULL'
|
? 'NULL'
|
||||||
: type === 'string' || type === 'blob'
|
: val.type === 'string' || val.type === 'blob'
|
||||||
? `'${value}'`
|
? `'${val.value.replace(/'/g, "''")}'`
|
||||||
: `${value}`;
|
: `${val.value}`;
|
||||||
if (idx <= 0) {
|
if (idx <= 0) {
|
||||||
return `${key}=${valueString}`;
|
return `${key}=${valueString}`;
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -248,6 +248,15 @@ test('constructQueryClause with exactly one null value', () => {
|
|||||||
).toEqual(`key1=NULL`);
|
).toEqual(`key1=NULL`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test("constructQueryClause with special character (single quote ('))", () => {
|
||||||
|
expect(
|
||||||
|
constructQueryClause(
|
||||||
|
{key1: {type: 'string', value: "this is a 'single quote'"}},
|
||||||
|
'connecter',
|
||||||
|
),
|
||||||
|
).toEqual(`key1='this is a ''single quote'''`);
|
||||||
|
});
|
||||||
|
|
||||||
test('constructQueryClause with multiple value', () => {
|
test('constructQueryClause with multiple value', () => {
|
||||||
const values: {[key: string]: Value} = {
|
const values: {[key: string]: Value} = {
|
||||||
key1: {type: 'string', value: 'this is a string'},
|
key1: {type: 'string', value: 'this is a string'},
|
||||||
@@ -260,6 +269,19 @@ test('constructQueryClause with multiple value', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('constructQueryClause with multiple value with single quotes mixed in string', () => {
|
||||||
|
const values: {[key: string]: Value} = {
|
||||||
|
key1: {type: 'string', value: `this is 'a' string`},
|
||||||
|
key2: {type: 'null', value: null},
|
||||||
|
key3: {type: 'float', value: 13.37},
|
||||||
|
key4: {type: 'string', value: `there are single quotes 'here' and 'there'`},
|
||||||
|
};
|
||||||
|
|
||||||
|
expect(constructQueryClause(values, 'connector')).toEqual(
|
||||||
|
`key1='this is ''a'' string' connector key2=NULL connector key3=13.37 connector key4='there are single quotes ''here'' and ''there'''`,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
test('constructUpdateQuery', () => {
|
test('constructUpdateQuery', () => {
|
||||||
const setClause: {[key: string]: Value} = {
|
const setClause: {[key: string]: Value} = {
|
||||||
key1: {type: 'string', value: 'this is a string'},
|
key1: {type: 'string', value: 'this is a string'},
|
||||||
|
|||||||
Reference in New Issue
Block a user