Skip to content

Commit e744fb7

Browse files
committed
Added ability to select database properties when defining dynamic variables.
1 parent 15c029c commit e744fb7

File tree

4 files changed

+35
-19
lines changed

4 files changed

+35
-19
lines changed

queries/queries-with-dynamic-variables.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,26 @@
1919
{
2020
"name": "customerData",
2121
"description": "고객 데이터 컬럼별 분류",
22+
"database": "sampleDB",
2223
"query": "SELECT CustomerID, CustomerName, City, Region, CustomerType FROM SampleDB.dbo.Customers WHERE IsActive = 1 ORDER BY CustomerID"
2324
},
2425
{
2526
"name": "orderDetails",
2627
"type": "key_value_pairs",
2728
"description": "주문상세 정보",
29+
"database": "sampleDB",
2830
"query": "SELECT OrderID, OrderDetailID FROM SampleDB.dbo.OrderDetails ORDER BY OrderID"
2931
},
3032
{
3133
"name": "activeOrders",
3234
"description": "활성 주문 목록",
35+
"database": "sampleDB",
3336
"query": "SELECT OrderID FROM SampleDB.dbo.Orders WHERE OrderStatus = 'Pending' ORDER BY OrderID"
3437
},
3538
{
3639
"name": "recentOrders",
3740
"description": "최근 주문 정보",
41+
"database": "sampleDB",
3842
"query": "SELECT OrderID, OrderNumber, OrderDate FROM SampleDB.dbo.Orders WHERE OrderDate >= '${startDate}' AND OrderDate <= '${endDate}' AND OrderDate >= DATEADD(day, -30, '${CURRENT_DATE}') ORDER BY OrderDate DESC"
3943
}
4044
],

queries/queries-with-dynamic-variables.xml

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
<!-- 동적 변수 정의 -->
2020
<dynamicVars>
2121
<!-- 기본 타입 (column_identified): 각 컬럼별로 배열 생성 -->
22-
<dynamicVar name="customerData" description="고객 데이터 컬럼별 분류">
22+
<dynamicVar name="customerData" description="고객 데이터 컬럼별 분류" database="sampleDB">
2323
<![CDATA[
2424
SELECT CustomerID, CustomerName, City, Region, CustomerType
2525
FROM SampleDB.dbo.Customers
@@ -29,7 +29,7 @@
2929
</dynamicVar>
3030

3131
<!-- key_value_pairs 타입: 첫 번째 컬럼을 키로, 두 번째 컬럼을 값으로 -->
32-
<dynamicVar name="orderDetails" type="key_value_pairs" description="주문상세 정보">
32+
<dynamicVar name="orderDetails" type="key_value_pairs" description="주문상세 정보" database="sampleDB">
3333
<![CDATA[
3434
SELECT OrderID, OrderDetailID
3535
FROM SampleDB.dbo.OrderDetails
@@ -38,7 +38,7 @@
3838
</dynamicVar>
3939

4040
<!-- 기본 타입 (column_identified): 각 컬럼별로 배열 생성 -->
41-
<dynamicVar name="activeOrders" description="활성 주문 목록">
41+
<dynamicVar name="activeOrders" description="활성 주문 목록" database="sampleDB">
4242
<![CDATA[
4343
SELECT OrderID
4444
FROM SampleDB.dbo.Orders
@@ -48,7 +48,7 @@
4848
</dynamicVar>
4949

5050
<!-- 기본 타입 (column_identified): 시각 함수와 일반 변수를 조합한 동적 변수 -->
51-
<dynamicVar name="recentOrders" description="최근 주문 정보">
51+
<dynamicVar name="recentOrders" description="최근 주문 정보" database="sampleDB">
5252
<![CDATA[
5353
SELECT OrderID, OrderNumber, OrderDate
5454
FROM SampleDB.dbo.Orders
@@ -59,10 +59,11 @@
5959
]]>
6060
</dynamicVar>
6161
</dynamicVars>
62-
63-
<!-- 시트 정의 -->
64-
<sheet name="${envType}_동적변수_테스트" use="true" aggregateColumn="지역" maxRows="100" db="sampleDB">
65-
<![CDATA[
62+
63+
64+
<queryDefs>
65+
<queryDef id="customer_base" description="Base customer query">
66+
<![CDATA[
6667
SELECT
6768
c.CustomerID as 고객ID,
6869
c.CustomerName as 고객명,
@@ -73,10 +74,15 @@
7374
WHERE c.CustomerID IN (${customerData.CustomerID})
7475
AND c.Region IN (${regionList})
7576
ORDER BY c.CustomerID
76-
]]>
77-
</sheet>
77+
]]>
78+
</queryDef>
79+
</queryDefs>
80+
81+
82+
<!-- 시트 정의 -->
83+
<sheet name="${envType}_동적변수_테스트" use="true" queryRef="customer_base" aggregateColumn="지역" maxRows="100" db="sampleDB"/>
7884

79-
<sheet name="주문상세_동적변수_테스트2" use="true" aggregateColumn="주문상태">
85+
<sheet name="주문상세_동적변수_테스트2" use="false" aggregateColumn="주문상태">
8086
<![CDATA[
8187
SELECT
8288
o.OrderID as 주문ID,
@@ -92,7 +98,7 @@
9298
]]>
9399
</sheet>
94100

95-
<sheet name="주문상세_동적변수_테스트" use="true" aggregateColumn="주문상태">
101+
<sheet name="주문상세_동적변수_테스트" use="false" aggregateColumn="주문상태">
96102
<![CDATA[
97103
SELECT
98104
o.OrderNumber as 주문번호,
@@ -108,7 +114,7 @@
108114
]]>
109115
</sheet>
110116

111-
<sheet name="복합_동적변수_테스트" use="true">
117+
<sheet name="복합_동적변수_테스트" use="false">
112118
<![CDATA[
113119
SELECT
114120
c.CustomerName as 고객명,
@@ -127,7 +133,7 @@
127133
]]>
128134
</sheet>
129135

130-
<sheet name="시각함수_동적변수_테스트" use="true">
136+
<sheet name="시각함수_동적변수_테스트" use="false">
131137
<![CDATA[
132138
SELECT
133139
'현재시각' as 구분,

src/query-parser.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ class QueryParser {
2626
let queryDefs = {};
2727
if (parsed.queries.queryDefs && parsed.queries.queryDefs[0] && parsed.queries.queryDefs[0].queryDef) {
2828
for (const queryDef of parsed.queries.queryDefs[0].queryDef) {
29-
if (queryDef.$ && queryDef.$.name) {
30-
const queryName = queryDef.$.name;
29+
if (queryDef.$ && (queryDef.$.id || queryDef.$.name)) {
30+
const queryName = queryDef.$.id || queryDef.$.name;
3131
const queryText = (queryDef._ || queryDef['#text'] || queryDef.__cdata || '').toString().trim();
3232

3333
if (queryText) {
@@ -90,15 +90,17 @@ class QueryParser {
9090
const query = dv._.toString().trim();
9191
const type = dv.$.type || 'column_identified';
9292
const description = dv.$.description || '';
93+
const database = dv.$.database || '';
9394

9495
dynamicVars.push({
9596
name: dv.$.name,
9697
query: query,
9798
type: type,
98-
description: description
99+
description: description,
100+
database: database
99101
});
100102

101-
console.log(`동적 변수 정의 발견: ${dv.$.name} (타입: ${type}, 설명: ${description})`);
103+
console.log(`동적 변수 정의 발견: ${dv.$.name} (타입: ${type}, 설명: ${description}, 데이터베이스: ${database || '기본값'})`);
102104
}
103105
}
104106
}

src/variable-processor.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,12 @@ class VariableProcessor {
4242
// 쿼리에서 변수 치환 (기존 변수들로)
4343
const processedQuery = this.substituteVars(dynamicVar.query, globalVars);
4444

45+
// 동적 변수에 지정된 데이터베이스 사용 (있으면), 없으면 기본값 사용
46+
const targetDbKey = dynamicVar.database || dbKey;
47+
console.log(` 데이터베이스: ${targetDbKey} (${dynamicVar.database ? '동적변수 지정' : '기본값'})`);
48+
4549
// DB에서 데이터 조회
46-
const pool = await mssqlHelper.createConnectionPool(configObj.dbs[dbKey], dbKey);
50+
const pool = await mssqlHelper.createConnectionPool(configObj.dbs[targetDbKey], targetDbKey);
4751
const result = await mssqlHelper.executeQuery(pool, processedQuery);
4852

4953
if (result.recordset && result.recordset.length > 0) {

0 commit comments

Comments
 (0)