Skip to content

Commit ffd0ec8

Browse files
committed
fix tests following rebase.
1 parent 36c6cea commit ffd0ec8

3 files changed

Lines changed: 20 additions & 149 deletions

File tree

test/node/src/json-traversal.test.ts

Lines changed: 14 additions & 143 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,5 @@
11
import {
2-
ColumnDefinitionBuilder,
3-
type JSONColumnType,
4-
ParseJSONResultsPlugin,
5-
type SqlBool,
6-
sql,
7-
} from '../../../dist/index.js'
8-
import {
9-
type DialectDescriptor,
102
DIALECTS,
11-
type JSONTestContext,
123
NOT_SUPPORTED,
134
clearJSONDatabase,
145
destroyJSONTest,
@@ -58,12 +49,12 @@ for (const dialect of DIALECTS) {
5849
postgres: NOT_SUPPORTED,
5950
mysql: {
6051
parameters: [],
61-
sql: "select `website`->'$.url' as `website_url` from `person_metadata`",
52+
sql: 'select `website`->\'$."url"\' as `website_url` from `person_metadata`',
6253
},
6354
mssql: NOT_SUPPORTED,
6455
sqlite: {
6556
parameters: [],
66-
sql: `select "website"->>'$.url' as "website_url" from "person_metadata"`,
57+
sql: `select "website"->>'$."url"' as "website_url" from "person_metadata"`,
6758
},
6859
})
6960

@@ -120,12 +111,12 @@ for (const dialect of DIALECTS) {
120111
postgres: NOT_SUPPORTED,
121112
mysql: {
122113
parameters: [],
123-
sql: "select `profile`->'$.auth.roles' as `roles` from `person_metadata`",
114+
sql: 'select `profile`->\'$."auth"."roles"\' as `roles` from `person_metadata`',
124115
},
125116
mssql: NOT_SUPPORTED,
126117
sqlite: {
127118
parameters: [],
128-
sql: `select "profile"->>'$.auth.roles' as "roles" from "person_metadata"`,
119+
sql: `select "profile"->>'$."auth"."roles"' as "roles" from "person_metadata"`,
129120
},
130121
})
131122

@@ -153,12 +144,12 @@ for (const dialect of DIALECTS) {
153144
postgres: NOT_SUPPORTED,
154145
mysql: {
155146
parameters: [],
156-
sql: "select `profile`->'$.tags[0]' as `main_tag` from `person_metadata`",
147+
sql: 'select `profile`->\'$."tags"[0]\' as `main_tag` from `person_metadata`',
157148
},
158149
mssql: NOT_SUPPORTED,
159150
sqlite: {
160151
parameters: [],
161-
sql: `select "profile"->>'$.tags[0]' as "main_tag" from "person_metadata"`,
152+
sql: `select "profile"->>'$."tags"[0]' as "main_tag" from "person_metadata"`,
162153
},
163154
})
164155

@@ -186,12 +177,12 @@ for (const dialect of DIALECTS) {
186177
postgres: NOT_SUPPORTED,
187178
mysql: {
188179
parameters: [],
189-
sql: "select `experience`->'$[0].establishment' as `establishment` from `person_metadata`",
180+
sql: 'select `experience`->\'$[0]."establishment"\' as `establishment` from `person_metadata`',
190181
},
191182
mssql: NOT_SUPPORTED,
192183
sqlite: {
193184
parameters: [],
194-
sql: `select "experience"->>'$[0].establishment' as "establishment" from "person_metadata"`,
185+
sql: `select "experience"->>'$[0]."establishment"' as "establishment" from "person_metadata"`,
195186
},
196187
})
197188

@@ -342,12 +333,12 @@ for (const dialect of DIALECTS) {
342333
postgres: NOT_SUPPORTED,
343334
mysql: {
344335
parameters: [12],
345-
sql: "select * from `person_metadata` where `profile`->'$.auth.login_count' = ?",
336+
sql: 'select * from `person_metadata` where `profile`->\'$."auth"."login_count"\' = ?',
346337
},
347338
mssql: NOT_SUPPORTED,
348339
sqlite: {
349340
parameters: [12],
350-
sql: `select * from "person_metadata" where "profile"->>'$.auth.login_count' = ?`,
341+
sql: `select * from "person_metadata" where "profile"->>'$."auth"."login_count"' = ?`,
351342
},
352343
})
353344

@@ -374,12 +365,12 @@ for (const dialect of DIALECTS) {
374365
postgres: NOT_SUPPORTED,
375366
mysql: {
376367
parameters: [],
377-
sql: "select * from `person_metadata` order by `profile`->'$.auth.login_count' desc",
368+
sql: 'select * from `person_metadata` order by `profile`->\'$."auth"."login_count"\' desc',
378369
},
379370
mssql: NOT_SUPPORTED,
380371
sqlite: {
381372
parameters: [],
382-
sql: `select * from "person_metadata" order by "profile"->>'$.auth.login_count' desc`,
373+
sql: `select * from "person_metadata" order by "profile"->>'$."auth"."login_count"' desc`,
383374
},
384375
})
385376

@@ -411,12 +402,12 @@ for (const dialect of DIALECTS) {
411402
postgres: NOT_SUPPORTED,
412403
mysql: {
413404
parameters: ['Papa Johns', 911],
414-
sql: "update `person_metadata` set `experience` = json_set(`experience`, '$[last].establishment', ?) where `person_id` = ?",
405+
sql: 'update `person_metadata` set `experience` = json_set(`experience`, \'$[last]."establishment"\', ?) where `person_id` = ?',
415406
},
416407
mssql: NOT_SUPPORTED,
417408
sqlite: {
418409
parameters: ['Papa Johns', 911],
419-
sql: `update "person_metadata" set "experience" = json_set("experience", '$[#-1].establishment', ?) where "person_id" = ?`,
410+
sql: `update "person_metadata" set "experience" = json_set("experience", '$[#-1]."establishment"', ?) where "person_id" = ?`,
420411
},
421412
})
422413

@@ -747,123 +738,3 @@ for (const dialect of DIALECTS) {
747738
})
748739
}
749740
}
750-
async function initJSONTest<D extends DialectDescriptor>(
751-
ctx: Mocha.Context,
752-
dialect: D,
753-
) {
754-
const testContext = await initTest(ctx, dialect)
755-
756-
let db = testContext.db.withTables<{
757-
person_metadata: {
758-
person_id: number
759-
website: JSONColumnType<{ url: string }>
760-
nicknames: JSONColumnType<string[]>
761-
profile: JSONColumnType<{
762-
auth: {
763-
roles: string[]
764-
last_login?: { device: string }
765-
is_verified: SqlBool
766-
login_count: number
767-
}
768-
avatar: string | null
769-
tags: string[]
770-
}>
771-
experience: JSONColumnType<
772-
{
773-
establishment: string
774-
}[]
775-
>
776-
schedule: JSONColumnType<{ name: string; time: string }[][][]>
777-
}
778-
}>()
779-
780-
if (dialect.sqlSpec === 'sqlite') {
781-
db = db.withPlugin(new ParseJSONResultsPlugin())
782-
}
783-
784-
const jsonColumnDataType = resolveJSONColumnDataType(dialect)
785-
const notNull = (cb: ColumnDefinitionBuilder) => cb.notNull()
786-
787-
await db.schema
788-
.createTable('person_metadata')
789-
.addColumn('person_id', 'integer', (cb) =>
790-
cb.primaryKey().references('person.id'),
791-
)
792-
.addColumn('website', jsonColumnDataType, notNull)
793-
.addColumn('nicknames', jsonColumnDataType, notNull)
794-
.addColumn('profile', jsonColumnDataType, notNull)
795-
.addColumn('experience', jsonColumnDataType, notNull)
796-
.addColumn('schedule', jsonColumnDataType, notNull)
797-
.execute()
798-
799-
return { ...testContext, db }
800-
}
801-
802-
function resolveJSONColumnDataType(dialect: DialectDescriptor) {
803-
switch (dialect.sqlSpec) {
804-
case 'postgres':
805-
return 'jsonb'
806-
case 'mysql':
807-
return 'json'
808-
case 'mssql':
809-
return sql`nvarchar(max)`
810-
case 'sqlite':
811-
return 'text'
812-
}
813-
}
814-
815-
async function insertDefaultJSONDataSet(ctx: TestContext) {
816-
await insertDefaultDataSet(ctx as any)
817-
818-
const people = await ctx.db
819-
.selectFrom('person')
820-
.select(['id', 'first_name', 'last_name'])
821-
.execute()
822-
823-
await ctx.db
824-
.insertInto('person_metadata')
825-
.values(
826-
people
827-
.filter((person) => person.first_name && person.last_name)
828-
.map((person, index) => ({
829-
person_id: person.id,
830-
website: JSON.stringify({
831-
url: `https://www.${person.first_name!.toLowerCase()}${person.last_name!.toLowerCase()}.com`,
832-
}),
833-
nicknames: JSON.stringify([
834-
`${person.first_name![0]}.${person.last_name![0]}.`,
835-
`${person.first_name} the Great`,
836-
`${person.last_name} the Magnificent`,
837-
]),
838-
profile: JSON.stringify({
839-
tags: ['awesome'],
840-
auth: {
841-
roles: ['contributor', 'moderator'],
842-
last_login: {
843-
device: 'android',
844-
},
845-
login_count: 12 + index,
846-
is_verified: true,
847-
},
848-
avatar: null,
849-
}),
850-
experience: JSON.stringify([
851-
{
852-
establishment: 'The University of Life',
853-
},
854-
]),
855-
schedule: JSON.stringify([[[{ name: 'Gym', time: '12:15' }]]]),
856-
})),
857-
)
858-
.execute()
859-
}
860-
861-
async function clearJSONDatabase(ctx: TestContext) {
862-
await ctx.db.deleteFrom('person_metadata').execute()
863-
await clearDatabase(ctx as any)
864-
}
865-
866-
async function destroyJSONTest(ctx: TestContext) {
867-
await ctx.db.schema.dropTable('person_metadata').execute()
868-
await destroyTest(ctx as any)
869-
}

test/node/src/sql-injection.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ for (const dialect of DIALECTS) {
1515
const { sqlSpec, variant } = dialect
1616

1717
describe(`${variant}: select`, () => {
18-
let ctx: TestContext
18+
let ctx: JSONTestContext
1919
const identifierWrapper = sqlSpec === 'mysql' ? '`' : '"'
2020

2121
before(async function () {

test/node/src/test-setup.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ import {
4343
PGliteDialect,
4444
} from '../../../dist/index.js'
4545
import type { ConnectionConfiguration } from 'tedious'
46-
import type { DataTypeExpression } from '../../../dist/cjs/parser/data-type-parser.js'
46+
import type { DataTypeExpression } from '../../../dist/parser/data-type-parser.js'
4747

4848
export type Gender = 'male' | 'female' | 'other'
4949
export type MaritalStatus = 'single' | 'married' | 'divorced' | 'widowed'
@@ -595,7 +595,7 @@ export function orderBy<QB extends SelectQueryBuilder<any, any, any>>(
595595

596596
export type JSONTestContext = Awaited<ReturnType<typeof initJSONTest>>
597597

598-
export async function initJSONTest<D extends BuiltInDialect>(
598+
export async function initJSONTest<D extends DialectDescriptor>(
599599
ctx: Mocha.Context,
600600
dialect: D,
601601
) {
@@ -625,7 +625,7 @@ export async function initJSONTest<D extends BuiltInDialect>(
625625
}
626626
}>()
627627

628-
if (dialect === 'sqlite') {
628+
if (dialect.sqlSpec === 'sqlite') {
629629
db = db.withPlugin(new ParseJSONResultsPlugin())
630630
}
631631

@@ -648,9 +648,9 @@ export async function initJSONTest<D extends BuiltInDialect>(
648648
}
649649

650650
export function resolveJSONColumnDataType(
651-
dialect: BuiltInDialect,
651+
dialect: DialectDescriptor,
652652
): DataTypeExpression {
653-
switch (dialect) {
653+
switch (dialect.sqlSpec) {
654654
case 'postgres':
655655
return 'jsonb'
656656
case 'mysql':

0 commit comments

Comments
 (0)