-
Notifications
You must be signed in to change notification settings - Fork 1
/
MySQL.cfc
90 lines (69 loc) · 2.85 KB
/
MySQL.cfc
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
<cfcomponent displayname="mysql" hint="I am responsible for translating MySQL field types">
<cffunction name="init" access="public" output="false" returntype="any">
<cfreturn this />
</cffunction>
<cffunction name="returnInsertParams" access="public" output="false" returntype="struct">
<cfargument name="fieldType" type="string" required="true" />
<cfargument name="nullable" type="string" required="true" />
<cfargument name="fieldValue" type="any" required="true" />
<cfset var insertParams= StructNew()>
<cfset insertParams.sqlType= "cf_sql_varchar">
<!---Data type notes:
--Blob fields will not work.
--Date, Datetime, and Year data types do not work, but Time and Timestamp do (not sure if this might just be a JDBC driver issue)
--->
<cfswitch expression="#arguments.fieldType#">
<!---Numeric fields--->
<cfcase value="int,bigint,smallint">
<cfset insertParams.sqlType="cf_sql_numeric" />
</cfcase>
<cfcase value="float,decimal">
<cfset insertParams.sqlType="cf_sql_float" />
</cfcase>
<cfcase value="real">
<cfset insertParams.sqlType="cf_sql_real" />
</cfcase>
<cfcase value="double">
<cfset insertParams.sqlType="cf_sql_double" />
</cfcase>
<!---Tinyint is the type detected for both tinyint fields and Boolean--->
<cfcase value="tinyint">
<cfset insertParams.sqlType="cf_sql_tinyint" />
</cfcase>
<!---Date/time fields--->
<cfcase value="time">
<cfset insertParams.sqlType="cf_sql_time" />
</cfcase>
<cfcase value="timestamp">
<cfset insertParams.sqlType="cf_sql_timestamp" />
</cfcase>
<!---Text fields--->
<cfcase value="long">
<cfset insertParams.sqlType="cf_sql_longvarchar" />
</cfcase>
<cfcase value="varchar,text,char">
<cfset insertParams.sqlType="cf_sql_varchar" />
</cfcase>
<!---Misc--->
<cfcase value="bit">
<cfset insertParams.sqlType="cf_sql_bit" />
</cfcase>
</cfswitch>
<!---Default type is then cf_sql_varchar--->
<cfif arguments.nullable>
<!---In case you use another JSON-conversion library that records empty values as the string "null"--->
<cfif insertParams.sqlType EQ "cf_sql_varchar" and arguments.fieldValue EQ "null">
<cfset insertParams.isNull= true>
<cfelseif arguments.fieldValue EQ "">
<cfset insertParams.isNull= true>
<cfelse>
<cfset insertParams.isNull= false>
</cfif>
<cfelse>
<cfset insertParams.isNull= false>
</cfif>
<!---In case you need to transform the data value under certain conditions--->
<cfset insertParams.value= arguments.fieldValue />
<cfreturn insertParams />
</cffunction>
</cfcomponent>