I was trying to use QueryAddColumn() today to add an additional column to a single-row array I’m working with. The 4th parameter to QueryAddColumn is an array of values to add to the query – 1 element in the array for each row in the query. Since my query only has on row in it, I thought this would be a good place to use ColdFusion 8’s new inline array syntax.

<cfset QueryAddColumn(qryFoo,
                     ["my additional value"])>

But this throws an unhelpful “Missing argument name” error:

Missing argument name. When using named parameters to a function, every parameter must have a name.

It took me a while to figure out it just didn’t like using the new array syntax inside the function. Doing it this way worked fine:

<cfset myArray = ["my additional value"]>
<cfset QueryAddColumn(qryFoo,"newColName","varchar",myArray)>

But having to do it that way kind of defeats the point, it doesn’t use any less lines than the old CF7 syntax:

<cfset myArray[0] = "my additional value">
<cfset QueryAddColumn(qryFoo,"newColName","varchar",myArray)>

And it means I have to “var” the myArray variable at the top of my function now. Hopefully Adobe will get this straightened out at some point.


  1. Rob Huddleston says:

    I don’t think there’s anything that needs straightening out. The correct way of doing it makes perfect sense, while your shortcut doesn’t. You’re trying to toss a value into an array within the QueryAddColumn function … but you aren’t giving that array a name. How could CF possibly know into which array you want to value added? How could you refer to that value later? I can’t think of any programming language that would let you add a value to an unnamed array, or any unnamed variable for that matter.

  2. Dan Roberts says:

    I put in a bug report / feature request a few weeks ago about this. There are so many places where this could be used but just doesn’t function. There is also no nesting of the array/struct syntax to create an array of structs, which I often build up for configuration or test values.

    This would be awesome but doesn’t work:

    Instead you have to either expressly set the array indexes:

    *repeated for 2 and 3

    or use a temporary variable:

    * repeated two more times

  3. Dan Roberts says:

    Here the code from my post with the greater than and less thans escaped:

    This would be awesome but doesn’t work:

    <cfset test = [{name=”Dan”,age=30,state=”VA”},

    Instead you have to either expressly set the array indexes:

    <cfset test = arrayNew(1)>
    <cfset test[1] = {name=”Dan”,age=30,state=”VA”}>
    *repeated for 2 and 3

    or use a temporary variable:

    <cfset test = arrayNew(1)>
    <cfset tmp = {name=”Dan”,age=30,state=”VA”}>
    <cfset arrayAppend(test,tmp)>
    * repeated two more times



    The array is an argument for another function which does not perform an action on that array. It uses the array as a source of values to add a new column to a query variable.

    I think Adobe will make this available in the future.

  4. Dan Roberts says:

    by the way, you would also expect to be able use arraylength + 1 for the index but that doesn’t work either though it work fine for other values and variables

    <cfset test = arrayNew(1)>
    <cfset test[arrayLen(test)+1] = {name=”Dan”,age=27,state=”VA”}>

    *boom…. error*

  5. Todd Rafferty says:

    The 4th attribute of QueryAddRow is a rowcolumn, why would you expect an array to work there?

    Also, why would you use:

    When you can ArrayAppend()?

    Also, your test above isn’t accurate. Array index in CF -starts- at zero. Your code is telling it to bypass zero and set 1…?

  6. Todd Rafferty says:

    Blargh. Java, get out of my head for 2 minutes. Sorry, CF index begins at 1. But, anyway…

    <cfset test = arrayNew(1)>
    <cfset test[1] = “foo”>
    <cfset test[arrayLen(test)] = {name=”Dan”,age=27,state=”VA”}>
    <cfdump var=”#test#”>

    That works. So, the issue is the evaluation of the arrayLen() +1 in there.

  7. Chris says:

    @Rob: I believe Java, JavaScript, C++, and PHP all allow anonymous arrays. The array value is simply assigned to the variable name given to its corresponding argument in the function/method source.

  8. çeviri says:

    thanks for codes

  9. Tom says:

    Here is a link that explores CF 8’s inline array syntax a bit more with regards to structs and arrays.


    For me personally, I’m using it as follows for loading static data into arrays.

    i++; aSet[i]=[ “Illinois”, “IL”, 21, “Mississippi River; 279 feet, 33rd” ];
    i++; aSet[i]=[ “California”, “CA”, 31, “DeathValley; 282 feet below sea level, 1st” ];

    // and so on….

    There are some glaring deficiencies with this feature, but I’m glad they finally put it in and hopeful they improve on it in the future.

  10. Ryan Stille says:

    I have been told that this issue should be fixed in CF9, or possibly even sooner in an updater for CF8. Whooo!

  11. Steve Fentriss says:

    Aha!  Here's a surefire solution to the problem of inline array syntax in Coldfusion 8.

    Use the  listToArray(list [, delimiters ])  function.

    <cfset queryAddColumn(myQuery,"fav_pokemon",listToArray("Pikachu,Bulbasaur,Venomoth,Dewgong,Snorlax"))>

    <!— create a query which has a "title" column,
        but lacks a "notes" column: —>
        <cfset Q = queryNew('title')>
    <!— stock the query with two rows,
        regarding apples and oranges: —>
        <cfset queryAddRow(Q)><!— first row —>
        <cfset querySetCell(Q,"title","Apples")>
        <cfset queryAddRow(Q)><!— second row —>
        <cfset querySetCell(Q,"title","Oranges")>
    <!— NOW, ADD A NEW COLUMN called "notes",
        FROM AN INLINE ARRAY containing values —>
        <cfset queryAddColumn(Q,"notes",listToArray("Apples are great , Unless compared to oranges"))>
    <!— see if it worked: —>
    <cfdump var="#Q#">

    Hope that helps!
    – Steve