Jakob Ward recently posted an interesting question to the CFML slack channel:
Is there a point to setting maxlength for a timestamp value in cfqueryparam? Or can this be ignored safely?
My guess was that cfqueryparam
would ignore the maxlength
attribute when the cfsqltype
is timestamp
(or cf_sql_timestamp
if you like to type). But I wasn't sure, so I conducted a quick test with this code:
<cfset news = queryNew("id,title,datePublished", "integer,varchar,Timestamp", {"id":1,"title":"Dewey defeats Truman", "datePublished":now()})> <cfquery dbtype="query" name="sub"> SELECT * FROM news WHERE datePublished <= <cfqueryparam value="#now()#" cfsqltype="timestamp" maxlength="1"> </cfquery>
You can run the above code using trycf on ColdFusion 2018 or Lucee 5.
On Lucee
We get an exception on the above code:
value [{ts '2021-01-20 16:59:24'}] is too large, defined maxlength is [1] but length of value is [26] on line 7
If we change the maxlength
value to 26, the code runs without error on Lucee. So it appears that Lucee is always checking the length of the value
, in this case it is using the string representation of the date object: {ts '2021-01-20 16:59:24'}
On Adobe ColdFusion
It appears to ignore the maxlength
attribute of cfqueryparam
tag when cfsqltype
is timestamp
, the code runs without error.