Skip to content

Commit 6e9a470

Browse files
committed
Improved functionality to allow db attributes in dynamic variable definitions.
1 parent 5203419 commit 6e9a470

3 files changed

Lines changed: 17 additions & 14 deletions

File tree

src/index.js

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -247,15 +247,12 @@ async function main() {
247247
return await adapter.createConnectionPool(configObj[dbKey], dbKey);
248248
}
249249

250-
// 기본 DB 어댑터 가져오기
251-
const defaultAdapter = dbAdapters[defaultDbKey];
252-
253250
// 기본 DB 연결
254251
const defaultPool = await getDbPool(defaultDbKey);
255252

256253
// 동적 변수 처리 (DB 연결 후, 시트 처리 전)
257254
if (dynamicVars && dynamicVars.length > 0) {
258-
await variableProcessor.processDynamicVariables(dynamicVars, defaultAdapter, defaultDbKey, mergedVars, configObj);
255+
await variableProcessor.processDynamicVariables(dynamicVars, dbAdapters, defaultDbKey, mergedVars, configObj);
259256
}
260257

261258
// 엑셀 파일 경로 결정 (CLI > excel > 쿼리파일 > 기본값)

src/query-parser.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,8 +135,8 @@ class QueryParser {
135135
const allowedAttributes = {
136136
excel: ['db', 'output', 'maxRows', 'style', 'aggregateInfoTemplate'],
137137
var: ['name'],
138-
dynamicVar: ['name', 'description', 'type', 'database'],
139-
queryDef: ['id', 'description'],
138+
dynamicVar: ['name', 'description', 'type', 'database', 'db'],
139+
queryDef: ['id', 'description', 'db'],
140140
// exceptColumns 속성 사용 (대소문자 구분 없이 허용), 하위호환: except_columns도 파싱에서 지원
141141
sheet: ['name', 'use', 'queryRef', 'aggregateColumn', 'aggregateInfoTemplate', 'maxRows', 'db', 'style', 'exceptColumns'],
142142
param: ['name']
@@ -339,7 +339,7 @@ class QueryParser {
339339
const query = dv._.toString().trim();
340340
const type = dv.$.type || 'column_identified';
341341
const description = dv.$.description || '';
342-
const database = dv.$.database || '';
342+
const database = dv.$.database || dv.$.db || '';
343343

344344
dynamicVars.push({
345345
name: dv.$.name,

src/variable-processor.js

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,12 @@ class VariableProcessor {
124124
/**
125125
* 동적 변수 처리
126126
* @param {Array} dynamicVars - 동적 변수 정의 배열
127-
* @param {Object} dbAdapter - 데이터베이스 어댑터 인스턴스
128-
* @param {string} dbKey - 데이터베이스 키
127+
* @param {Object} dbAdapters - 데이터베이스 어댑터 맵 (dbKey -> adapter)
128+
* @param {string} defaultDbKey - 기본 데이터베이스 키
129129
* @param {Object} globalVars - 전역 변수
130130
* @param {Object} configObj - 데이터베이스 설정 객체
131131
*/
132-
async processDynamicVariables(dynamicVars, dbAdapter, dbKey, globalVars, configObj) {
132+
async processDynamicVariables(dynamicVars, dbAdapters, defaultDbKey, globalVars, configObj) {
133133
// 동적 변수 초기화
134134
this.dynamicVariables = {};
135135

@@ -140,17 +140,23 @@ class VariableProcessor {
140140
if (dynamicVar.name && dynamicVar.query) {
141141
try {
142142
console.log(`${this.msg.dynamicVarProcessing} ${dynamicVar.name} (${dynamicVar.description || this.msg.noDesc})`);
143-
143+
144144
// 쿼리에서 변수 치환 (기존 변수들로)
145145
const processedQuery = this.substituteVars(dynamicVar.query, globalVars);
146146

147147
// 동적 변수에 지정된 데이터베이스 사용 (있으면), 없으면 기본값 사용
148-
const targetDbKey = dynamicVar.database || dbKey;
148+
const targetDbKey = dynamicVar.database || defaultDbKey;
149149
console.log(`${this.msg.database} ${targetDbKey} (${dynamicVar.database ? this.msg.dynamicVarSpecified : this.msg.default})`);
150150

151+
// 대상 DB에 맞는 어댑터 선택
152+
const adapter = dbAdapters[targetDbKey] || dbAdapters[defaultDbKey];
153+
if (!adapter) {
154+
throw new Error(`DB adapter not found for key: ${targetDbKey}`);
155+
}
156+
151157
// DB에서 데이터 조회
152-
const pool = await dbAdapter.createConnectionPool(configObj[targetDbKey], targetDbKey);
153-
const result = await dbAdapter.executeQuery(pool, processedQuery);
158+
const pool = await adapter.createConnectionPool(configObj[targetDbKey], targetDbKey);
159+
const result = await adapter.executeQuery(pool, processedQuery);
154160

155161
if (result.recordset && result.recordset.length > 0) {
156162
const data = result.recordset;

0 commit comments

Comments
 (0)