quick icon indicating copy to clipboard operation
quick copied to clipboard

QuickQB.update - invalid argument type assumption leading to expression exception

Open davidAtInleague opened this issue 5 months ago • 0 comments

quick 7.3.1

quick/models/QuickQb.cfc

Hit a case where Quick tries to treat a string as a struct, e.g. in the following, if values is something like {someColumn: "someValue"}

	public any function update(
		struct values  = {},
		struct options = {},
 		boolean toSql  = false
 	) {
 		for ( var key in arguments.values ) {
 			if ( structKeyExists( arguments.values[ key ], "isQuickBuilder" ) ) {
 				arguments.values[ key ] = arguments.values[ key ].getQb();
 			}

The structKeyExists becomes structKeyExists( "someValue", "isQuickBuilder" ) which fails with "cannot convert string to struct".

Our current workaround is:

diff --git a/modules/quick/models/QuickQB.cfc b/modules/quick/models/QuickQB.cfc
index 457378a20..2567f341d 100755
--- a/modules/quick/models/QuickQB.cfc
+++ b/modules/quick/models/QuickQB.cfc
@@ -305,6 +305,9 @@ component
 		boolean toSql  = false
 	) {
 		for ( var key in arguments.values ) {
+			if ( isNull( arguments.values[ key ] ) || isSimpleValue( arguments.values[ key ] ) ) {
+				continue;
+			}
 			if ( structKeyExists( arguments.values[ key ], "isQuickBuilder" ) ) {
 				arguments.values[ key ] = arguments.values[ key ].getQb();
 			}

davidAtInleague avatar Jan 26 '24 19:01 davidAtInleague