fix(db): correct dialect import paths and extend bip-users-dao type

- Fix dialect files to use relative paths instead of @types alias
- Add 'postgresql' to BIPUsersDAO dbType union

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Misaka
2026-04-05 10:34:03 +08:00
parent 54a3ac680a
commit 0ca17a1807
5 changed files with 22 additions and 40 deletions

View File

@@ -4,8 +4,8 @@
* Creates the appropriate SqlDialect implementation based on database type. * Creates the appropriate SqlDialect implementation based on database type.
*/ */
import type { DatabaseType } from '@types/database.types' import type { DatabaseType } from '../../../types/database.types'
import type { SqlDialect } from '@types/sql-dialect.types' import type { SqlDialect } from '../../../types/sql-dialect.types'
import { MySqlDialect } from './mysql-dialect' import { MySqlDialect } from './mysql-dialect'
import { PostgreSqlDialect } from './postgresql-dialect' import { PostgreSqlDialect } from './postgresql-dialect'
@@ -14,7 +14,7 @@ import { SqlServerDialect } from './sqlserver-dialect'
export { MySqlDialect } from './mysql-dialect' export { MySqlDialect } from './mysql-dialect'
export { PostgreSqlDialect } from './postgresql-dialect' export { PostgreSqlDialect } from './postgresql-dialect'
export { SqlServerDialect } from './sqlserver-dialect' export { SqlServerDialect } from './sqlserver-dialect'
export type { SqlDialect } from '@types/sql-dialect.types' export type { SqlDialect } from '../../../types/sql-dialect.types'
export function createDialect(type: DatabaseType): SqlDialect { export function createDialect(type: DatabaseType): SqlDialect {
switch (type) { switch (type) {

View File

@@ -8,7 +8,7 @@
* - LIMIT/OFFSET pagination * - LIMIT/OFFSET pagination
*/ */
import type { SqlDialect } from '@types/sql-dialect.types' import type { SqlDialect } from '../../../types/sql-dialect.types'
export class MySqlDialect implements SqlDialect { export class MySqlDialect implements SqlDialect {
readonly dbType = 'mysql' as const readonly dbType = 'mysql' as const
@@ -41,9 +41,7 @@ export class MySqlDialect implements SqlDialect {
const placeholders = allColumns.map(() => '?').join(', ') const placeholders = allColumns.map(() => '?').join(', ')
const nonKeyColumns = allColumns.filter((col) => !keyColumns.includes(col)) const nonKeyColumns = allColumns.filter((col) => !keyColumns.includes(col))
const updateClause = nonKeyColumns const updateClause = nonKeyColumns.map((col) => `${col} = VALUES(${col})`).join(', ')
.map((col) => `${col} = VALUES(${col})`)
.join(', ')
const sql = `INSERT INTO ${table} (${columns}) VALUES (${placeholders}) ON DUPLICATE KEY UPDATE ${updateClause}` const sql = `INSERT INTO ${table} (${columns}) VALUES (${placeholders}) ON DUPLICATE KEY UPDATE ${updateClause}`
@@ -53,12 +51,10 @@ export class MySqlDialect implements SqlDialect {
} }
} }
paginate(params: { paginate(params: { sql: string; limit: number; offset?: number; paramIndex: number }): {
sql: string sql: string
limit: number nextParamIndex: number
offset?: number } {
paramIndex: number
}): { sql: string; nextParamIndex: number } {
const { sql, limit, offset, paramIndex } = params const { sql, limit, offset, paramIndex } = params
return { return {

View File

@@ -8,7 +8,7 @@
* - LIMIT/OFFSET pagination * - LIMIT/OFFSET pagination
*/ */
import type { SqlDialect } from '@types/sql-dialect.types' import type { SqlDialect } from '../../../types/sql-dialect.types'
export class PostgreSqlDialect implements SqlDialect { export class PostgreSqlDialect implements SqlDialect {
readonly dbType = 'postgresql' as const readonly dbType = 'postgresql' as const
@@ -38,16 +38,12 @@ export class PostgreSqlDialect implements SqlDialect {
const { table, keyColumns, allColumns, startParamIndex } = params const { table, keyColumns, allColumns, startParamIndex } = params
const columns = allColumns.join(', ') const columns = allColumns.join(', ')
const placeholders = allColumns const placeholders = allColumns.map((_, i) => `$${startParamIndex + i + 1}`).join(', ')
.map((_, i) => `$${startParamIndex + i + 1}`)
.join(', ')
const conflictKeys = keyColumns.map((col) => `"${col}"`).join(', ') const conflictKeys = keyColumns.map((col) => `"${col}"`).join(', ')
const nonKeyColumns = allColumns.filter((col) => !keyColumns.includes(col)) const nonKeyColumns = allColumns.filter((col) => !keyColumns.includes(col))
const updateSet = nonKeyColumns const updateSet = nonKeyColumns.map((col) => `"${col}" = EXCLUDED."${col}"`).join(', ')
.map((col) => `"${col}" = EXCLUDED."${col}"`)
.join(', ')
const sql = [ const sql = [
`INSERT INTO ${table} (${columns}) VALUES (${placeholders})`, `INSERT INTO ${table} (${columns}) VALUES (${placeholders})`,
@@ -61,12 +57,10 @@ export class PostgreSqlDialect implements SqlDialect {
} }
} }
paginate(params: { paginate(params: { sql: string; limit: number; offset?: number; paramIndex: number }): {
sql: string sql: string
limit: number nextParamIndex: number
offset?: number } {
paramIndex: number
}): { sql: string; nextParamIndex: number } {
const { sql, limit, offset, paramIndex } = params const { sql, limit, offset, paramIndex } = params
return { return {

View File

@@ -8,7 +8,7 @@
* - OFFSET/FETCH pagination * - OFFSET/FETCH pagination
*/ */
import type { SqlDialect } from '@types/sql-dialect.types' import type { SqlDialect } from '../../../types/sql-dialect.types'
export class SqlServerDialect implements SqlDialect { export class SqlServerDialect implements SqlDialect {
readonly dbType = 'sqlserver' as const readonly dbType = 'sqlserver' as const
@@ -37,19 +37,13 @@ export class SqlServerDialect implements SqlDialect {
}): { sql: string; nextParamIndex: number } { }): { sql: string; nextParamIndex: number } {
const { table, keyColumns, allColumns, startParamIndex } = params const { table, keyColumns, allColumns, startParamIndex } = params
const valueParams = allColumns const valueParams = allColumns.map((_, i) => `@p${startParamIndex + i}`).join(', ')
.map((_, i) => `@p${startParamIndex + i}`)
.join(', ')
const sourceColumns = allColumns.join(', ') const sourceColumns = allColumns.join(', ')
const joinCondition = keyColumns const joinCondition = keyColumns.map((col) => `target.${col} = source.${col}`).join(' AND ')
.map((col) => `target.${col} = source.${col}`)
.join(' AND ')
const nonKeyColumns = allColumns.filter((col) => !keyColumns.includes(col)) const nonKeyColumns = allColumns.filter((col) => !keyColumns.includes(col))
const updateSet = nonKeyColumns const updateSet = nonKeyColumns.map((col) => `target.${col} = source.${col}`).join(', ')
.map((col) => `target.${col} = source.${col}`)
.join(', ')
const insertColumns = allColumns.join(', ') const insertColumns = allColumns.join(', ')
const insertValues = allColumns.map((col) => `source.${col}`).join(', ') const insertValues = allColumns.map((col) => `source.${col}`).join(', ')
@@ -68,12 +62,10 @@ export class SqlServerDialect implements SqlDialect {
} }
} }
paginate(params: { paginate(params: { sql: string; limit: number; offset?: number; paramIndex: number }): {
sql: string sql: string
limit: number nextParamIndex: number
offset?: number } {
paramIndex: number
}): { sql: string; nextParamIndex: number } {
const { sql, limit, offset, paramIndex } = params const { sql, limit, offset, paramIndex } = params
if (offset !== undefined) { if (offset !== undefined) {

View File

@@ -46,7 +46,7 @@ export const BIP_USERS_CONFIG = {
export class BIPUsersDAO { export class BIPUsersDAO {
private mysqlService: MySqlService | null = null private mysqlService: MySqlService | null = null
private sqlServerService: SqlServerService | null = null private sqlServerService: SqlServerService | null = null
private dbType: 'mysql' | 'sqlserver' = 'mysql' private dbType: 'mysql' | 'sqlserver' | 'postgresql' = 'mysql'
private configManager: ConfigManager private configManager: ConfigManager
/** /**