Child pages
  • QBSelect

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Wiki Markup
{hidden}
DO NOT EDIT THE CONTENT OF THIS PAGE DIRECTLY, UNLESS YOU KNOW WHAT YOU'RE DOING.
		THE STRUCTURE OF THE CONTENT IS VITAL IN BEING ABLE TO EXTRACT CHANGES FROM THE PAGE AND MERGE THEM BACK INTO SERVOY SOURCE{hidden}
{sub-section:description|text=}{sub-section}\\ 

{table:id=|class=servoy sSummary}{colgroup}{column:width=80px|padding=0px}{column}{column}{column}{colgroup}{tr:style=height: 30px;}{th:colspan=2}Property Summary{th}{tr}{tbody}{tr}{td}[QBLogicalCondition]{td}{td}[#and]
Create an AND\-condition to add conditions to.{td}{tr}{tbody}{tbody}{tr}{td}[QBColumns]{td}{td}[#columns]
Get columns from query{td}{tr}{tbody}{tbody}{tr}{td}[QBFunctions]{td}{td}[#functions]
Get the functions clause from a query, used for functions that are not tied to a column.{td}{tr}{tbody}{tbody}{tr}{td}[QBGroupBy]{td}{td}[#groupBy]
Get the group by clause from a query{td}{tr}{tbody}{tbody}{tr}{td}[QBLogicalCondition]{td}{td}[#having]
Get the having\-part of the query, used to add conditions.{td}{tr}{tbody}{tbody}{tr}{td}[QBJoins]{td}{td}[#joins]
Get the joins clause of this table based clause.{td}{tr}{tbody}{tbody}{tr}{td}[QBLogicalCondition]{td}{td}[#or]
Create an OR\-condition to add conditions to.{td}{tr}{tbody}{tbody}{tr}{td}[QBParameters]{td}{td}[#params]
Get the named parameters from a query.{td}{tr}{tbody}{tbody}{tr}{td}[QBTableClause]{td}{td}[#parent]
Get query builder parent table clause, this may be a query or a join clause.{td}{tr}{tbody}{tbody}{tr}{td}[QBResult]{td}{td}[#result]
Get the result part of the query, used to add result columns or values.{td}{tr}{tbody}{tbody}{tr}{td}[QBSelect]{td}{td}[#root]
Get query builder parent.{td}{tr}{tbody}{tbody}{tr}{td}[QBSorts]{td}{td}[#sort]
Get the sorting part of the query.{td}{tr}{tbody}{tbody}{tr}{td}[QBWhereCondition]{td}{td}[#where]
Get the where\-part of the query, used to add conditions.{td}{tr}{tbody}{table}\\ 

{table:id=|class=servoy sSummary}{colgroup}{column:width=80px|padding=0px}{column}{column}{column}{colgroup}{tr:style=height: 30px;}{th:colspan=2}Method Summary{th}{tr}{tbody}{tr}{td}[QBSelect]{td}{td}[#clearHaving]\()
Clear the having\-part of the query.{td}{tr}{tbody}{tbody}{tr}{td}[QBCondition]{td}{td}[#exists]\()
Get an exists\-condition from a subquery{td}{tr}{tbody}{tbody}{tr}{td}[QBColumn]{td}{td}[#getColumn]\(name)
Get a column from the table.{td}{tr}{tbody}{tbody}{tr}{td}[QBColumn]{td}{td}[#getColumn]\(columnTableAlias, name)
Get a column from the table with given alias.{td}{tr}{tbody}{tbody}{tr}{td}[QBParameter]{td}{td}[#getParameter]\()
Get or create a parameter for the query, this used to parameterize queries.{td}{tr}{tbody}{tbody}{tr}{td}[QBCondition]{td}{td}[#not]\(cond)
Create an negated condition.{td}{tr}{tbody}{tbody}{tr}{td}[QBCondition]{td}{td}[#not]\(cond)
Create an negated condition.{td}{tr}{tbody}{table}\\ 

{table:id=property|class=servoy sDetail}{colgroup}{column:width=100%|padding=0px}{column}{colgroup}{tr:style=height: 30px;}{th:colspan=1}Property Details{th}{tr}{tbody:id=and|class=node}{tr:id=name}{td}h6.and{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:and_des|trigger=button|text=}{sub-section}{sub-section:and_des|trigger=none|class=sIndent}CreateReplace an AND\-condition to add conditions to.with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:and_snc|trigger=button|text=}{sub-section}{sub-section:and_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:and_prs|trigger=button|text=}{sub-section}{sub-section:and_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}*Returns*\\{sub-section:and_ret|trigger=button|text=}{sub-section}{sub-section:and_ret|trigger=none|class=sIndent}[QBLogicalCondition]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:and_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:and_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:and_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:and_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:and_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:and_sam|trigger=none}{code:language=javascript}
query.where.add(
	  query.or
	    .add(
	      query.and
		    .add(query.columns.flag.eq(1))
	    .add(query.columns.order_date.isNull)
		 )
	    .add(
	      query.and
	        .add(query.columns.flag.eq(2))
	        .add(query.column.order_date.gt(new Date()))
	     )
	);
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=columns|class=node}{tr:id=name}{td}h6.columns{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:columns_des|trigger=button|text=}{sub-section}{sub-section:columns_des|trigger=none|class=sIndent}GetReplace columnswith from querydescription{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:columns_snc|trigger=button|text=}{sub-section}{sub-section:columns_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:columns_prs|trigger=button|text=}{sub-section}{sub-section:columns_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}*Returns*\\{sub-section:columns_ret|trigger=button|text=}{sub-section}{sub-section:columns_ret|trigger=none|class=sIndent}[QBColumns]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:columns_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:columns_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:columns_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:columns_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:columns_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:columns_sam|trigger=none}{code:language=javascript}
foundset.getQuery().columns
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=functions|class=node}{tr:id=name}{td}h6.functions{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:functions_des|trigger=button|text=}{sub-section}{sub-section:functions_des|trigger=none|class=sIndent}GetReplace the functions clause from a query, used for functions that are not tied to a column.with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:functions_snc|trigger=button|text=}{sub-section}{sub-section:functions_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:functions_prs|trigger=button|text=}{sub-section}{sub-section:functions_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}*Returns*\\{sub-section:functions_ret|trigger=button|text=}{sub-section}{sub-section:functions_ret|trigger=none|class=sIndent}[QBFunctions]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:functions_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:functions_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:functions_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:functions_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:functions_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:functions_sam|trigger=none}{code:language=javascript}
/** @type {QBSelect<db:/example_data/orders>} */
var query = databaseManager.createSelect('db:/example_data/orders') //$NON-NLS-1$
query.where.add(query.columns.shipname.upper.eq(query.functions.upper('servoy'))) //$NON-NLS-1$
foundset.loadRecords(query)
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=groupBy|class=node}{tr:id=name}{td}h6.groupBy{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:groupBy_des|trigger=button|text=}{sub-section}{sub-section:groupBy_des|trigger=none|class=sIndent}GetReplace the group by clause from a query{sub-sectionwith description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:groupBy_snc|trigger=button|text=}{sub-section}{sub-section:groupBy_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:groupBy_prs|trigger=button|text=}{sub-section}{sub-section:groupBy_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}*Returns*\\{sub-section:groupBy_ret|trigger=button|text=}{sub-section}{sub-section:groupBy_ret|trigger=none|class=sIndent}[QBGroupBy]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:groupBy_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:groupBy_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:groupBy_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:groupBy_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:groupBy_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:groupBy_sam|trigger=none}{code:language=javascript}
/** @type {QBSelect<db:/example_data/orders>} */
var query = databaseManager.createSelect('db:/example_data/orders')
query.groupBy.addPk() // have to group by on pk when using having-conditions in (foundset) pk queries
.root.having.add(query.joins.orders_to_order_details.columns.quantity.count.eq(0))
foundset.loadRecords(query)
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=having|class=node}{tr:id=name}{td}h6.having{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:having_des|trigger=button|text=}{sub-section}{sub-section:having_des|trigger=none|class=sIndent}GetReplace the having\-part of the query, used to add conditions.
The conditions added here are AND\-ed.with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:having_snc|trigger=button|text=}{sub-section}{sub-section:having_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:having_prs|trigger=button|text=}{sub-section}{sub-section:having_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}*Returns*\\{sub-section:having_ret|trigger=button|text=}{sub-section}{sub-section:having_ret|trigger=none|class=sIndent}[QBLogicalCondition]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:having_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:having_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:having_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:having_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:having_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:having_sam|trigger=none}{code:language=javascript}
/** @type {QBSelect<db:/example_data/orders>} */
var query = databaseManager.createSelect('db:/example_data/orders')
query.groupBy.addPk() // have to group by on pk when using having-conditions in (foundset) pk queries
.root.having.add(query.joins.orders_to_order_details.columns.quantity.count.eq(0))
foundset.loadRecords(query)
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=joins|class=node}{tr:id=name}{td}h6.joins{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:joins_des|trigger=button|text=}{sub-section}{sub-section:joins_des|trigger=none|class=sIndent}GetReplace the joins clause of this table based clause.
Joins added to this clause will be based on this table clauses table.with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:joins_snc|trigger=button|text=}{sub-section}{sub-section:joins_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:joins_prs|trigger=button|text=}{sub-section}{sub-section:joins_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}*Returns*\\{sub-section:joins_ret|trigger=button|text=}{sub-section}{sub-section:joins_ret|trigger=none|class=sIndent}[QBJoins]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:joins_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:joins_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:joins_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:joins_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:joins_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:joins_sam|trigger=none}{code:language=javascript}
foundset.getQuery().joins
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=or|class=node}{tr:id=name}{td}h6.or{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:or_des|trigger=button|text=}{sub-section}{sub-section:or_des|trigger=none|class=sIndent}CreateReplace an OR\-condition to add conditions to.with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:or_snc|trigger=button|text=}{sub-section}{sub-section:or_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:or_prs|trigger=button|text=}{sub-section}{sub-section:or_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}*Returns*\\{sub-section:or_ret|trigger=button|text=}{sub-section}{sub-section:or_ret|trigger=none|class=sIndent}[QBLogicalCondition]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:or_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:or_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:or_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:or_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:or_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:or_sam|trigger=none}{code:language=javascript}
query.where.add(
	  query.or
	    .add(
	      query.and
		    .add(query.columns.flag.eq(1))
	    .add(query.columns.order_date.isNull)
		 )
	    .add(
	      query.and
	        .add(query.columns.flag.eq(2))
	        .add(query.column.order_date.gt(new Date()))
	     )
	);
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=params|class=node}{tr:id=name}{td}h6.params{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:params_des|trigger=button|text=}{sub-section}{sub-section:params_des|trigger=none|class=sIndent}GetReplace the named parameters from a query.with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:params_snc|trigger=button|text=}{sub-section}{sub-section:params_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:params_prs|trigger=button|text=}{sub-section}{sub-section:params_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}*Returns*\\{sub-section:params_ret|trigger=button|text=}{sub-section}{sub-section:params_ret|trigger=none|class=sIndent}[QBParameters]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:params_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:params_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:params_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:params_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:params_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:params_sam|trigger=none}{code:language=javascript}
/** @type {QBSelect<db:/example_data/orders>} */
	var query = databaseManager.createSelect('db:/example_data/orders')
	query.where.add(query.columns.contact_id.eq(query.getParameter('mycontactid')))
	
	// load orders where contact_id = 100
	query.params['mycontactid'] = 100
	foundset.loadRecords(query)
	
	// load orders where contact_id = 200
	query.params['mycontactid'] = 200
	foundset.loadRecords(query)
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=parent|class=node}{tr:id=name}{td}h6.parent{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:parent_des|trigger=button|text=}{sub-section}{sub-section:parent_des|trigger=none|class=sIndent}GetReplace query builder parent table clause, this may be a query or a join clause.with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:parent_snc|trigger=button|text=}{sub-section}{sub-section:parent_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:parent_prs|trigger=button|text=}{sub-section}{sub-section:parent_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}*Returns*\\{sub-section:parent_ret|trigger=button|text=}{sub-section}{sub-section:parent_ret|trigger=none|class=sIndent}[QBTableClause]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:parent_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:parent_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:parent_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:parent_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:parent_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:parent_sam|trigger=none}{code:language=javascript}
/** @type {QBSelect<db:/example_data/person>} */
	var query = databaseManager.createSelect('db:/example_data/person')
	query.where.add(query.joins.person_to_parent.joins.person_to_parent.columns.name.eq('john'))
	foundset.loadRecords(query)
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=result|class=node}{tr:id=name}{td}h6.result{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:result_des|trigger=button|text=}{sub-section}{sub-section:result_des|trigger=none|class=sIndent}GetReplace the result part of the query, used to add result columns or values.with description{sub-section}{td}{tr}{trbuilder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:result_snc|trigger=button|text=}{sub-section}{sub-section:result_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:result_prs|trigger=button|text=}{sub-section}{sub-section:result_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}*Returns*\\{sub-section:result_ret|trigger=button|text=}{sub-section}{sub-section:result_ret|trigger=none|class=sIndent}[QBResult]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:result_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:result_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:result_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:result_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:result_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:result_sam|trigger=none}{code:language=javascript}
query.result.add(query.columns.company_id).add(query.columns.customerid)
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=root|class=node}{tr:id=name}{td}h6.root{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:root_des|trigger=button|text=}{sub-section}{sub-section:root_des|trigger=none|class=sIndent}GetReplace query builder parent.with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:root_snc|trigger=button|text=}{sub-section}{sub-section:root_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:root_prs|trigger=button|text=}{sub-section}{sub-section:root_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}*Returns*\\{sub-section:root_ret|trigger=button|text=}{sub-section}{sub-section:root_ret|trigger=none|class=sIndent}[QBSelect]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:root_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:root_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:root_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:root_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:root_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:root_sam|trigger=none}{code:language=javascript}
/** @type {QBSelect<db:/example_data/order_details>} */
	var subquery = databaseManager.createSelect('db:/example_data/order_details')
	
 /** @type {QBSelect<db:/example_data/orders>} */
	var query = databaseManager.createSelect('db:/example_data/orders')
	query.where.add(query
		.or 
			.add(query.columns.order_id.not.isin([1, 2, 3]))
			
			.add(query.exists(
					subquery.where.add(subquery.columns.orderid.eq(query.columns.order_id)).root
			))
		)
		
	foundset.loadRecords(query)
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=sort|class=node}{tr:id=name}{td}h6.sort{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:sort_des|trigger=button|text=}{sub-section}{sub-section:sort_des|trigger=none|class=sIndent}GetReplace the sorting part of the query.with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:sort_snc|trigger=button|text=}{sub-section}{sub-section:sort_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:sort_prs|trigger=button|text=}{sub-section}{sub-section:sort_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}*Returns*\\{sub-section:sort_ret|trigger=button|text=}{sub-section}{sub-section:sort_ret|trigger=none|class=sIndent}[QBSorts]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:sort_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:sort_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:sort_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:sort_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:sort_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:sort_sam|trigger=none}{code:language=javascript}
/** @type {QBSelect<db:/example_data/orders>} */
var query = databaseManager.createSelect('db:/example_data/orders')
query.sort
.add(query.joins.orders_to_order_details.columns.quantity.desc)
.add(query.columns.companyid)
foundset.loadRecords(query)
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=where|class=node}{tr:id=name}{td}h6.where{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:where_des|trigger=button|text=}{sub-section}{sub-section:where_des|trigger=none|class=sIndent}GetReplace the where\-part of the query, used to add conditions.
The conditions added here are AND\-ed.with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:where_snc|trigger=button|text=}{sub-section}{sub-section:where_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:where_prs|trigger=button|text=}{sub-section}{sub-section:where_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}*Returns*\\{sub-section:where_ret|trigger=button|text=}{sub-section}{sub-section:where_ret|trigger=none|class=sIndent}[QBWhereCondition]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:where_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:where_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:where_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:where_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:where_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:where_sam|trigger=none}{code:language=javascript}
var query = foundset.getQuery()
query.where.add(query.columns.flag.eq(1))
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{table}\\ 

{table:id=function|class=servoy sDetail}{colgroup}{column:width=100%|padding=0px}{column}{colgroup}{tr:style=height: 30px;}{th:colspan=1}Method Details{th}{tr}{tbody:id=clearHaving|class=node}{tr:id=name}{td}h6.clearHaving{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[QBSelect]{span}{span:id=iets|style=float: left; font-weight: bold;}clearHaving{span}{span:id=iets|style=float: left;}\(){span}{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:clearHaving_des|trigger=button|text=}{sub-section}{sub-section:clearHaving_des|trigger=none|class=sIndent}Clear the having\-part of the query.class=sIndent}Replace with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:clearHaving_snc|trigger=button|text=}{sub-section}{sub-section:clearHaving_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:clearHaving_prs|trigger=button|text=}{sub-section}{sub-section:clearHaving_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}*Returns*\\{sub-section:clearHaving_ret|trigger=button|text=}{sub-section}{sub-section:clearHaving_ret|trigger=none|class=sIndent}[QBSelect]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:clearHaving_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:clearHaving_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:clearHaving_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:clearHaving_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:clearHaving_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:clearHaving_sam|trigger=none}{code:language=javascript}
var q = foundset.getQuery()
q.where.add(q.columns.x.eq(100))
query.groupBy.clear.root.clearHaving()
foundset.loadRecords(q);
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=exists|class=node}{tr:id=name}{td}h6.exists{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[QBCondition]{span}{span:id=iets|style=float: left; font-weight: bold;}exists{span}{span:id=iets|style=float: left;}\(){span}{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:exists_des|trigger=button|text=}{sub-section}{sub-section:exists_des|trigger=none|class=sIndent}GetReplace an exists\-condition from a subquerywith description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:exists_snc|trigger=button|text=}{sub-section}{sub-section:exists_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:exists_prs|trigger=button|text=}{sub-section}{sub-section:exists_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}*Returns*\\{sub-section:exists_ret|trigger=button|text=}{sub-section}{sub-section:exists_ret|trigger=none|class=sIndent}[QBCondition]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:exists_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:exists_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:exists_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:exists_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:exists_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:exists_sam|trigger=none}{code:language=javascript}
foundset.query.where.add(query.exists(query2))
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=getColumn-String|class=node}{tr:id=name}{td}h6.getColumn{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[QBColumn]{span}{span:id=iets|style=float: left; font-weight: bold;}getColumn{span}{span:id=iets|style=float: left;}\(name){span}{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:getColumn-String_des|trigger=button|text=}{sub-section}{sub-section:getColumn-String_des|trigger=none|class=sIndent}GetReplace a column from the table.with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:getColumn-String_snc|trigger=button|text=}{sub-section}{sub-section:getColumn-String_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{tr:id=prs}{td}*Parameters*\\{sub-section:getColumn-String_prs|trigger=button|text=}{sub-section}{sub-section:getColumn-String_prs|trigger=none|class=sIndent}\{[String]} name -- the name of column to get
{sub-section}{td}{tr}{tr:id=ret}{td}*Returns*\\{sub-section:getColumn-String_ret|trigger=button|text=}{sub-section}{sub-section:getColumn-String_ret|trigger=none|class=sIndent}[QBColumn]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:getColumn-String_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getColumn-String_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:getColumn-String_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getColumn-String_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:getColumn-String_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getColumn-String_sam|trigger=none}{code:language=javascript}
foundset.getQuery().getColumn('orderid')
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=getColumn-String_String|class=node}{tr:id=name}{td}h6.getColumn{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[QBColumn]{span}{span:id=iets|style=float: left; font-weight: bold;}getColumn{span}{span:id=iets|style=float: left;}\(columnTableAlias, name){span}{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:getColumn-String_String_des|trigger=button|text=}{sub-section}{sub-section:getColumn-String_String_des|trigger=none|class=sIndent}Get a column from the table with given alias.
The alias may be of the main table or any level deep joined table.String_String_des|trigger=none|class=sIndent}Replace with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:getColumn-String_String_snc|trigger=button|text=}{sub-section}{sub-section:getColumn-String_String_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{tr:id=prs}{td}*Parameters*\\{sub-section:getColumn-String_String_prs|trigger=button|text=}{sub-section}{sub-section:getColumn-String_String_prs|trigger=none|class=sIndent}\{[String]} columnTableAlias -- the alias for the table
\{[String]} name -- the name of column to get
{sub-section}{td}{tr}{tr:id=ret}{td}*Returns*\\{sub-section:getColumn-String_String_ret|trigger=button|text=}{sub-section}{sub-section:getColumn-String_String_ret|trigger=none|class=sIndent}[QBColumn]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:getColumn-String_String_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getColumn-String_String_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:getColumn-String_String_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getColumn-String_String_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:getColumn-String_String_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getColumn-String_String_sam|trigger=none}{code:language=javascript}
foundset.getQuery().getColumn('orderid', 'opk')
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=getParameter|class=node}{tr:id=name}{td}h6.getParameter{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[QBParameter]{span}{span:id=iets|style=float: left; font-weight: bold;}getParameter{span}{span:id=iets|style=float: left;}\(){span}{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:getParameter_des|trigger=button|text=}{sub-section}{sub-section:getParameter_des|trigger=none|class=sIndent}GetReplace or create a parameter for the query, this used to parameterize queries.with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:getParameter_snc|trigger=button|text=}{sub-section}{sub-section:getParameter_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=prs}{td}*Parameters*\\{sub-section:getParameter_prs|trigger=button|text=}{sub-section}{sub-section:getParameter_prs|trigger=none|class=sIndent}{sub-section}{td}{tr}{builder-show}{tr:id=ret}{td}*Returns*\\{sub-section:getParameter_ret|trigger=button|text=}{sub-section}{sub-section:getParameter_ret|trigger=none|class=sIndent}[QBParameter]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:getParameter_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getParameter_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:getParameter_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getParameter_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:getParameter_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:getParameter_sam|trigger=none}{code:language=javascript}
/** @type {QBSelect<db:/example_data/orders>} */
	var query = databaseManager.createSelect('db:/example_data/orders')
	query.where.add(query.columns.contact_id.eq(query.getParameter('mycontactid')))
	
	// load orders where contact_id = 100
	query.params['mycontactid'] = 100
	foundset.loadRecords(query)
	
	// load orders where contact_id = 200
	query.params['mycontactid'] = 200
	foundset.loadRecords(query)
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=not-QBCondition|class=node}{tr:id=name}{td}h6.not{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[QBCondition]{span}{span:id=iets|style=float: left; font-weight: bold;}not{span}{span:id=iets|style=float: left;}\(cond){span}{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:not-QBCondition_des|trigger=button|text=}{sub-section}{sub-section:not-QBCondition_des|trigger=none|class=sIndent}CreateReplace an negated condition.with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:not-QBCondition_snc|trigger=button|text=}{sub-section}{sub-section:not-QBCondition_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{tr:id=prs}{td}*Parameters*\\{sub-section:not-QBCondition_prs|trigger=button|text=}{sub-section}{sub-section:not-QBCondition_prs|trigger=none|class=sIndent}\{[QBCondition]} cond -- the condition to negate
{sub-section}{td}{tr}{tr:id=ret}{td}*Returns*\\{sub-section:not-QBCondition_ret|trigger=button|text=}{sub-section}{sub-section:not-QBCondition_ret|trigger=none|class=sIndent}[QBCondition]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:not-QBCondition_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:not-QBCondition_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:not-QBCondition_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:not-QBCondition_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:not-QBCondition_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:not-QBCondition_sam|trigger=none}{code:language=javascript}
foundset.query.where.add(query.not(query.columns.flag.eq(1)))
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{tbody:id=not-QBLogicalCondition|class=node}{tr:id=name}{td}h6.not{td}{tr}{tr:id=sig}{td}{span:style=float: left; margin-right: 5px;}[QBCondition]{span}{span:id=iets|style=float: left; font-weight: bold;}not{span}{span:id=iets|style=float: left;}\(cond){span}{td}{tr}{builder-show:permission=edit}{tr:id=des}{td}{sub-section:not-QBLogicalCondition_des|trigger=button|text=}{sub-section}{sub-section:not-QBLogicalCondition_des|trigger=none|class=sIndent}CreateReplace an negated condition.with description{sub-section}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=snc}{td}*Since*\\{sub-section:not-QBLogicalCondition_snc|trigger=button|text=}{sub-section}{sub-section:not-QBLogicalCondition_snc|trigger=none|class=sIndent} Replace with version info{sub-section}{td}{tr}{builder-show}{tr:id=prs}{td}*Parameters*\\{sub-section:not-QBLogicalCondition_prs|trigger=button|text=}{sub-section}{sub-section:not-QBLogicalCondition_prs|trigger=none|class=sIndent}\{[QBLogicalCondition]} cond -- the logical condition to negate
{sub-section}{td}{tr}{tr:id=ret}{td}*Returns*\\{sub-section:not-QBLogicalCondition_ret|trigger=button|text=}{sub-section}{sub-section:not-QBLogicalCondition_ret|trigger=none|class=sIndent}[QBCondition]{sub-section}{td}{tr}{builder-show:permission=edit}{tr:id=see}{td}*Also see*\\{sub-section:not-QBLogicalCondition_see|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:not-QBLogicalCondition_see|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{builder-show:permission=edit}{tr:id=link}{td}*External links*\\{sub-section:not-QBLogicalCondition_link|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:not-QBLogicalCondition_link|trigger=none}{sub-section}{div}{td}{tr}{builder-show}{tr:id=sam}{td}*Sample*\\{sub-section:not-QBLogicalCondition_sam|trigger=button|text=}{sub-section}{div:class=sIndent}{sub-section:not-QBLogicalCondition_sam|trigger=none}{code:language=javascript}
foundset.query.where.add(query.not(query.columns.flag.eq(1)))
{code}{sub-section}{div}{td}{tr}{tr:class=lastDetailRow}{td}{td}{tr}{tbody}{table}