query
Represents a BoxLang Query object that stores tabular data.
This class implements multiple interfaces:
IType: for BoxLang type system integration
IReferenceable: for dynamic property/method access
Collection,,: for Java collection operations
Serializable: for persistence support
The Query object stores data as a list of row arrays, with column metadata maintained separately. It provides thread-safe operations for manipulating the data and supports JDBC ResultSet integration.
Key features:
Dynamic column addition/removal
Row manipulation (add, delete, swap)
Conversion to/from other data structures
Query metadata support
Collection interface implementation
Optimized data storage with lazy initialization
Query Methods
addColumn(columnName=[string], datatype=[any], array=[array])
Adds a column to a query and populates its rows with the contents of a one-dimensional array.
Arguments:
columnName
string
true
null
datatype
any
false
object
array
array
false
[]
append(query2=[query])
This function clears the query
Arguments:
query2
query
true
null
columnData(columnName=[string])
Returns the data in a query column.
Arguments:
columnName
string
true
null
columnExists(column=[string])
This function returns true if the column exists in the query
Arguments:
column
string
true
null
deleteColumn(column=[string])
Deletes a column within a query object.
Arguments:
column
string
true
null
deleteRow(row=[integer])
This function deletes a row from the query
Arguments:
row
integer
true
null
duplicate(deep=[boolean])
Duplicates an object - either shallow or deep
Arguments:
deep
boolean
false
true
each(callback=[function:Consumer], parallel=[boolean], maxThreads=[integer], ordered=[boolean])
Iterates over query rows and passes each row per iteration to a callback function.
This function is used to perform an action for each row in the query. It does not return a value, but rather allows you to perform side effects such as printing or modifying data. ,
, ,
,Parallel Execution,
,
If the ,,parallel,
, argument is set to true, and no ,,max_threads,
, are sent, the filter will be executed in parallel using a ForkJoinPool with parallel streams.
If ,,max_threads,
, is specified, it will create a new ForkJoinPool with the specified number of threads to run the filter in parallel, and destroy it after the operation is complete.
Please note that this may not be the most efficient way to iterate, as it will create a new ForkJoinPool for each invocation of the BIF. You may want to consider using a shared ForkJoinPool for better performance.
Arguments:
callback
function:Consumer
true
null
parallel
boolean
false
false
maxThreads
integer
false
null
ordered
boolean
false
false
every(closure=[function:Predicate], parallel=[boolean], maxThreads=[integer])
Used to iterate over a Query and test whether every item meets the test callback.
The function will be passed 3 arguments: the value, the index, and the Query. You can alternatively pass a Java Predicate which will only receive the 1st arg. The function should return true if the item meets the test, and false otherwise. ,
, ,,Note:,, This operation is a short-circuit operation, meaning it will stop iterating as soon as it finds the first item that does not meet the test condition. ,
, ,
,Parallel Execution,
,
If the ,,parallel,
, argument is set to true, and no ,,max_threads,
, are sent, the filter will be executed in parallel using a ForkJoinPool with parallel streams.
If ,,max_threads,
, is specified, it will create a new ForkJoinPool with the specified number of threads to run the filter in parallel, and destroy it after the operation is complete.
This allows for efficient processing of large Queries, especially when the test function is computationally expensive or the Query is large.
Arguments:
closure
function:Predicate
true
null
parallel
boolean
false
false
maxThreads
integer
false
null
filter(callback=[function:Predicate], parallel=[boolean], maxThreads=[integer])
Filters query rows specified in filter criteria This BIF will invoke the callback function for each row in the query, passing the row as a struct.
, ,
,If the callback returns true, the row will be included in the new query.,
, ,
,If the callback returns false, the row will be excluded from the new query.,
, ,
,If the callback requires strict arguments, it will only receive the row as a struct.,
, ,
,If the callback does not require strict arguments, it will receive the row as a struct, the row number (1-based), and the query itself.,
, ,
, ,
, ,
,Parallel Execution,
,
If the ,,parallel,
, argument is set to true, and no ,,max_threads,
, are sent, the filter will be executed in parallel using a ForkJoinPool with parallel streams.
If ,,max_threads,
, is specified, it will create a new ForkJoinPool with the specified number of threads to run the filter in parallel, and destroy it after the operation is complete.
Please note that this may not be the most efficient way to filter, as it will create a new ForkJoinPool for each invocation of the BIF. You may want to consider using a shared ForkJoinPool for better performance.
Arguments:
callback
function:Predicate
true
null
parallel
boolean
false
false
maxThreads
integer
false
null
getCell(column_name=[string], row_number=[integer])
This function maps the query to a new query.
Arguments:
column_name
string
true
null
row_number
integer
false
null
getRow(rowNumber=[integer])
Returns the cells of a query row as a structure
Arguments:
rowNumber
integer
true
null
insertAt(value=[query], position=[numeric])
Inserts a query data into another query at a specific position
Arguments:
value
query
true
null
position
numeric
true
null
isEmpty()
Determine whether a given value is empty.
We check for emptiness of anything that can be casted to: Array, Struct, Query, or String.
keyExists(key=[string])
This function returns true if the key exists in the query
Arguments:
key
string
true
null
map(callback=[function:Function], parallel=[boolean], maxThreads=[integer])
This BIF will iterate over each row in the query and invoke the callback function for each item so you can do any operation on the row and return a new value that will be set at the same index in a new query.
The callback function will be passed the row as a struct, the current row number (1-based), and the query itself. ,
, ,
,If the callback requires strict arguments, it will only receive the row as a struct.,
, ,
,If the callback does not require strict arguments, it will receive the row as a struct, the row number (1-based), and the query itself.,
, ,
, ,
, ,
,Parallel Execution,
,
If the ,,parallel,
, argument is set to true, and no ,,max_threads,
, are sent, the map will be executed in parallel using a ForkJoinPool with parallel streams.
If ,,max_threads,
, is specified, it will create a new ForkJoinPool with the specified number of threads to run the map in parallel, and destroy it after the operation is complete.
Please note that this may not be the most efficient way to map, as it will create a new ForkJoinPool for each invocation of the BIF. You may want to consider using a shared ForkJoinPool for better performance.
Arguments:
callback
function:Function
true
null
parallel
boolean
false
false
maxThreads
integer
false
null
none(callback=[function:Predicate], parallel=[boolean], maxThreads=[integer])
Used to iterate over a Query and test whether NONE item meets the test callback.
This is the opposite of ,{@link QuerySome},. ,
, The function will be passed 3 arguments: the value, the index, and the Query. You can alternatively pass a Java Predicate which will only receive the 1st arg. The function should return true if the item meets the test, and false otherwise. ,
, ,,Note:,, This operation is a short-circuit operation, meaning it will stop iterating as soon as it finds the first item that does not meet the test condition. ,
, ,
,Parallel Execution,
,
If the ,,parallel,
, argument is set to true, and no ,,max_threads,
, are sent, the filter will be executed in parallel using a ForkJoinPool with parallel streams.
If ,,max_threads,
, is specified, it will create a new ForkJoinPool with the specified number of threads to run the filter in parallel, and destroy it after the operation is complete.
This allows for efficient processing of large Queries, especially when the test function is computationally expensive or the Query is large.
Arguments:
callback
function:Predicate
true
null
parallel
boolean
false
false
maxThreads
integer
false
null
prepend(query2=[query])
Adds a query to the beginning of another query
Arguments:
query2
query
true
null
reduce(callback=[function:BiFunction], initialValue=[any])
This function reduces the query to a single value.
Arguments:
callback
function:BiFunction
true
null
initialValue
any
true
null
rowData(rowNumber=[integer])
Returns the cells of a query row as a structure
Arguments:
rowNumber
integer
true
null
rowSwap(source=[numeric], destination=[numeric])
In a query object, swap the record in the sourceRow with the record from the destinationRow.
Arguments:
source
numeric
true
null
destination
numeric
true
null
setCell(column=[string], value=[any], row=[integer])
Sets a cell to a value.
Arguments:
column
string
true
null
value
any
true
null
row
integer
false
null
setRow(rowNumber=[integer], rowData=[any])
Adds or updates a row in a query based on the provided row data and position.
Arguments:
rowNumber
integer
false
0
rowData
any
true
null
slice(offset=[integer], length=[integer])
Returns a subset of rows from an existing query
Arguments:
offset
integer
true
null
length
integer
false
0
some(callback=[function:Predicate], parallel=[boolean], maxThreads=[integer])
Used to iterate over a query and test whether ANY items meet the test callback.
The function will be passed 3 arguments: the row, the currentRow, and the query. You can alternatively pass a Java Predicate which will only receive the 1st arg. The function should return true if the item meets the test, and false otherwise. ,
, ,,Note:,, This operation is a short-circuit operation, meaning it will stop iterating as soon as it finds the first item that meets the test condition. ,
, ,
,Parallel Execution,
,
If the ,,parallel,
, argument is set to true, and no ,,max_threads,
, are sent, the filter will be executed in parallel using a ForkJoinPool with parallel streams.
If ,,max_threads,
, is specified, it will create a new ForkJoinPool with the specified number of threads to run the filter in parallel, and destroy it after the operation is complete.
Please note that this may not be the most efficient way to iterate, as it will create a new ForkJoinPool for each invocation of the BIF. You may want to consider using a shared ForkJoinPool for better performance.
,
Arguments:
callback
function:Predicate
true
null
parallel
boolean
false
false
maxThreads
integer
false
null
sort(sortFunc=[function:Comparator])
Sorts array elements.
Arguments:
sortFunc
function:Comparator
true
null
toJSON(queryFormat=[string], useSecureJSONPrefix=[string], useCustomSerializer=[boolean], pretty=[boolean])
Converts a BoxLang variable into a JSON (JavaScript Object Notation) string according to the specified options.
,Query Format Options,
,
The ,,queryFormat,
, argument determines how queries are serialized:
,
, ,
,
,row,
, or ,,false,
,: Serializes the query as a top-level struct with two keys: ,,columns,
, (an array of column names) and ,,data,
, (an array of arrays representing each row's data).,, ,
,
,column,
, or ,,true,
,: Serializes the query as a top-level struct with three keys: ,,rowCount,
, (the number of rows), ,,columns,
, (an array of column names), and ,,data,
, (a struct where each key is a column name and the value is an array of values for that column).,, ,
,
,struct,
,: Serializes the query as an array of structs, where each struct represents a row of data.,, ,
,
,
,Usage,
,
,
,
// Convert a query to JSON
myQuery = ...;
json = jsonSerialize( myQuery, queryFormat="row" );
// Convert a list to JSON
myList = "foo,bar,baz";
jsonList = jsonSerialize( myList );
,
Arguments:
queryFormat
string
false
row
useSecureJSONPrefix
string
false
false
useCustomSerializer
boolean
false
null
pretty
boolean
false
false
Examples
Last updated
Was this helpful?