-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathDMUdfs.cfm
157 lines (141 loc) · 4.03 KB
/
DMUdfs.cfm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
<cfsilent>
<!---
I supply UDFs for DMQuery/DMSQL/DMParam
Version 1.0
Updated: 2017-08-08
Updated: 2010-05-30
--->
<cfscript>
function convertSQLArray(aRawSQL) {
var aResult = ArrayNew(1);
var ii = 0;
var jj = 0;
var marker = "";
var MarkerLoc = 0;
//Convert SQL statements
if ( StructKeyExists(ThisTag,"aSQLs") ) {
for ( ii=1; ii LTE ArrayLen(aRawSQL); ii=ii+1 ) {
//while ( Len(Trim(aRawSQL[ii])) ) {
if ( isSimpleValue(aRawSQL[ii]) ) {
if ( Len(Trim(aRawSQL[ii])) ) {
for ( jj=1; jj LTE ArrayLen(ThisTag.aSQLs); jj=jj+1 ) {
marker = "[DataMgrSQL:#jj#]";
MarkerLoc = FindNoCase(marker,aRawSQL[ii]);
//Replace marker with SQL Array
if ( MarkerLoc ) {
if ( MarkerLoc GT 1 ) {
ArrayAppend(aResult,Left(aRawSQL[ii],MarkerLoc-1));
}
ArrayAppend(aResult,ThisTag.aSQLs[jj].sql);
//Drop added text so we can continue loop
if ( MarkerLoc GT 1 ) {
aRawSQL[ii] = ReplaceNoCase(aRawSQL[ii],Left(aRawSQL[ii],MarkerLoc-1),"","ONE");
}
aRawSQL[ii] = ReplaceNoCase(aRawSQL[ii],marker,"","ONE");
}
}
if ( Len(Trim(aRawSQL[ii])) ) {
ArrayAppend(aResult,aRawSQL[ii]);
}
}
} else {
ArrayAppend(aResult,aRawSQL[ii]);
}
}
//da(aResult);
} else {
aResult = aRawSQL;
}
return aResult;
}
function getDMSQLArray() {
var aResult = ArrayNew(1);
var ii = 0;
var marker = "";
ThisTag.GeneratedContent = " #ThisTag.GeneratedContent# ";
//Loop over params and inject struct of attributes of each
if ( StructKeyExists(ThisTag,"aParams") ) {
for ( ii = 1; ii LTE ArrayLen(ThisTag.aParams); ii=ii+1 ) {
marker = "[DataMgrParam:#ii#]";
ArrayAppend(aResult,Left(ThisTag.GeneratedContent,FindNoCase(marker,ThisTag.GeneratedContent)-1));
ArrayAppend(aResult,ThisTag.aParams[ii]);
//Drop added text so we can continue loop
ThisTag.GeneratedContent = ReplaceNoCase(ThisTag.GeneratedContent,Left(ThisTag.GeneratedContent,FindNoCase(marker,ThisTag.GeneratedContent)-1),"","ONE");
ThisTag.GeneratedContent = ReplaceNoCase(ThisTag.GeneratedContent,marker,"","ONE");
}
}
ThisTag.GeneratedContent = Trim(ThisTag.GeneratedContent);
ArrayAppend(aResult,ThisTag.GeneratedContent);
aResult = convertSQLArray(aResult);
//Make sure to clear out generated content
ThisTag.GeneratedContent = "";
return aResult;
}
function getActionArgs(sqlarray) {
var sResult = {};
var aActionWords = ["INSERT INTO","UPDATE","DELETE"];
var ActionWords = "Insert,Update,Delete";
var str = sqlarray;
var ii = 0;
while ( isArray(str) ) {
str = str[1];
}
str = Trim(str);
str = ReReplaceNoCase(str,"\s"," ","ALL");
for ( ii=1; ii LTE ArrayLen(aActionWords); ii++ ) {
if (
REFindNoCase(
"^#aActionWords[ii]#\b",
str
)
) {
sResult["action"] = ListGetAt(ActionWords,ii);
sResult["tablename"] = ListFirst(ReReplaceNoCase(str, "^#aActionWords[ii]#\b", ""), " ");
sResult["tablename"] = Trim(ReReplaceNoCase(sResult["tablename"],"[\[\]]"," ","ALL"));
}
}
return sResult;
}
function Listify(str) {
var result = str;
result = ReReplaceNoCase(str, "[^\w\d-_]", ",", "ALL");//convert everything that isn't a field name to a comma
result = ReReplaceNoCase(result, ",{2,}", ",", "ALL");//condence duplicate commas
result = ReReplaceNoCase(result, "^,", "");//Ditch comma from start of string
result = ReReplaceNoCase(result, ",$", "");//Ditch comma from end of string
return result;
}
function getWordList(sqlarray) {
var result = "";
var str = sqlarray;
var ii = 0;
while ( isArray(str) ) {
str = str[1];
}
str = Trim(str);
str = ReReplaceNoCase(str,"\s"," ","ALL");
result = Listify(str);
return result;
}
function doLog(atts) {
if (
StructKeyExists(atts,"DataLogger")
AND
StructKeyExists(atts,"action")
AND
StructKeyExists(atts,"tablename")
AND
NOT ( StructKeyExists(atts,"log") AND atts.log EQ false )
AND
(
StructKeyExists(atts.DataLogger,"getLoggedTables")
AND
ListFindNoCase(atts.DataLogger.getLoggedTables(),atts.tablename)
)
) {
return true;
} else {
return false;
}
}
</cfscript>
</cfsilent>