foundeo
exceptionKeyExists()
it appears to have worked since CF2016: https://cfdocs.org/exceptionkeyexists hereโs how I assume it work (and it does):
try {
x = 5/0;
} catch (any err) {
if (exceptionKeyExists(err, "message")) {
writeOutput("Error has message key");
}
}
foundeo
structKeyExists()
Dave Merrill
09/20/2024, 6:50 PMfoundeo
foundeo
Dave Merrill
09/20/2024, 6:54 PMbdw429s
09/20/2024, 7:27 PMbdw429s
09/20/2024, 7:27 PMbdw429s
09/20/2024, 7:28 PMbdw429s
09/20/2024, 7:29 PMbdw429s
09/20/2024, 7:30 PMThrowable
is being dereferenced, and has special handling for the known keys.Dave Merrill
09/20/2024, 8:19 PMbdw429s
09/20/2024, 8:20 PMbdw429s
09/20/2024, 8:20 PMbdw429s
09/20/2024, 8:22 PMbdw429s
09/20/2024, 8:22 PMbdw429s
09/20/2024, 8:23 PMbdw429s
09/20/2024, 8:23 PMbdw429s
09/20/2024, 8:25 PMbdw429s
09/20/2024, 8:25 PMbdw429s
09/20/2024, 8:26 PM<cfquery datasource="MyDSN" name="foo">
SELECT 1;
RAISERROR (15600, -1, -1, 'Boom1');
RAISERROR (15600, -1, -1, 'Boom2');
RAISERROR (15600, -1, -1, 'Boom3');
</cfquery>
which gives you an exception like this (example taken from my Lucee ticket)bdw429s
09/20/2024, 8:27 PMmborn
09/20/2024, 8:28 PMmborn
09/20/2024, 8:28 PM... the recent Adobe behavior of showing multiple layers of internal SQL stack frames when dumping SQL exceptions?
bdw429s
09/20/2024, 8:28 PMbdw429s
09/20/2024, 8:29 PMmborn
09/20/2024, 8:31 PMstatement.execute(...)
call
2. each statement as the potential to throw an exception and prevent any further iteration over statements.mborn
09/20/2024, 8:34 PMINSERT INTO foo(id, description) VALUES (123, 'a description; savvy?' );
โ๏ธ our current implementation blows up on the semicolon in the description value.Dave Merrill
09/20/2024, 9:21 PMbdw429s
09/20/2024, 9:24 PMbdw429s
09/20/2024, 9:24 PMbdw429s
09/20/2024, 9:24 PMcfvonner
09/21/2024, 12:42 AMDave Merrill
09/23/2024, 1:07 PMDave Merrill
09/23/2024, 3:56 PMjava.sql.SQLNonTransientConnectionException: [Macromedia][SQLServer JDBC Driver]A problem occurred when attempting to contact the server (Server returned: Connection reset). Please ensure that the server parameters passed to the driver are correct and that the server is running. Also ensure that the maximum number of connections have not been exceeded for this server.
at macromedia.jdbc.sqlserver.base.BaseExceptions.b(|SQLServer|6.0.0.1282|:1048)
at macromedia.jdbc.sqlserver.base.BaseExceptions.a(|SQLServer|6.0.0.1282|:980)
at macromedia.jdbc.sqlserver.base.BaseExceptions.b(|SQLServer|6.0.0.1282|:1132)
at macromedia.jdbc.sqlserver.base.BaseExceptions.a(|SQLServer|6.0.0.1282|:840)
at macromedia.jdbc.sqlserver.base.BaseExceptions.b(|SQLServer|6.0.0.1282|:727)
at macromedia.jdbc.sqlserver.base.BaseConnection.a(|SQLServer|6.0.0.1282|:1772)
at macromedia.jdbc.sqlserver.tds.g.b(|SQLServer|6.0.0.1282|:155)
at macromedia.jdbc.sqlserver.tds.s.a(|SQLServer|6.0.0.1282|:4600)
at macromedia.jdbc.sqlserver.SQLServerImplStatement.cb(|SQLServer|6.0.0.1282|:1376)
at macromedia.jdbc.sqlserver.base.gr.nT(|SQLServer|6.0.0.1282|:2505)
at macromedia.jdbc.sqlserver.base.gr.nM(|SQLServer|6.0.0.1282|:1358)
at macromedia.jdbc.sqlserver.base.gr.$fr$execute(|SQLServer|6.0.0.1282|:4478)
at macromedia.jdbc.sqlserver.base.gr.execute(|SQLServer|6.0.0.1282|)
at coldfusion.server.j2ee.sql.JRunStatement.execute(JRunStatement.java:359)
at coldfusion.sql.Executive.executeQuery(Executive.java:1613)
at coldfusion.sql.Executive.executeQuery(Executive.java:1355)
at coldfusion.sql.Executive.executeQuery(Executive.java:1285)
at coldfusion.sql.SqlImpl.execute(SqlImpl.java:425)
at coldfusion.tagext.sql.QueryTag.executeQuery(QueryTag.java:1247)
at coldfusion.tagext.sql.QueryTag.startQueryExecution(QueryTag.java:876)
at coldfusion.tagext.sql.QueryTag.doEndTag(QueryTag.java:821)
at cfSOME_CF_PAGE2ecfc814878529$funcSOME_METHOD.runFunction(SOME_CFC_PATH.cfc:57)
Note all the exception layers that appear to be inside the SQL Server driver.
macromedia.jdbc.sqlserver.base.BaseExceptions.a
macromedia.jdbc.sqlserver.base.BaseExceptions.b
macromedia.jdbc.sqlserver.tds.g.a
macromedia.jdbc.sqlserver.tds.g.b
etc
The first CF call is 20-something layers down in the exception.
The outer layers before that aren't helpful to CF devs, and I think this behavior is relatively new.
That's what I think @Mark Takata (Adobe) said was new-ish, and is somewhat intentional, because it came along with capturing some other more valuable info.Mark Takata (Adobe)
09/23/2024, 5:52 PMbdw429s
09/23/2024, 8:12 PMDave Merrill
09/23/2024, 8:43 PMbdw429s
09/23/2024, 8:44 PMbdw429s
09/23/2024, 8:44 PMbdw429s
09/23/2024, 8:44 PMbdw429s
09/23/2024, 8:45 PMDave Merrill
09/23/2024, 8:47 PMbdw429s
09/23/2024, 8:54 PMbdw429s
09/23/2024, 8:54 PMbdw429s
09/23/2024, 8:54 PMbdw429s
09/23/2024, 8:54 PMbdw429s
09/23/2024, 8:55 PMDave Merrill
09/24/2024, 3:00 PMraymondcamden
09/24/2024, 3:42 PMDave Merrill
09/24/2024, 4:10 PMraymondcamden
09/24/2024, 4:13 PMDave Merrill
09/24/2024, 4:19 PMraymondcamden
09/24/2024, 4:20 PMDave Merrill
09/24/2024, 6:00 PMraymondcamden
09/24/2024, 6:03 PMDave Merrill
09/24/2024, 6:08 PMraymondcamden
09/24/2024, 6:12 PM