/*
This file belongs to the Servoy development and deployment environment, Copyright (C) 1997-2012 Servoy BV
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU Affero General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at your option) any
later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along
with this program; if not, see http://www.gnu.org/licenses or write to the Free
Software Foundation,Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
*/
package com.servoy.j2db.querybuilder.impl;
import java.util.ArrayList;
import java.util.List;
import org.mozilla.javascript.annotations.JSFunction;
import com.servoy.j2db.documentation.ServoyDocumented;
import com.servoy.j2db.query.IQuerySelectValue;
import com.servoy.j2db.query.QueryColumnValue;
import com.servoy.j2db.query.QueryFunction.QueryFunctionType;
import com.servoy.j2db.querybuilder.IQueryBuilderFunctions;
import com.servoy.j2db.scripting.annotations.JSReadonlyProperty;
/**
* @author rgansevles
*
*/
@ServoyDocumented(category = ServoyDocumented.RUNTIME)
public class QBFunctions extends QBPart implements IQueryBuilderFunctions
{
QBFunctions(QBSelect parent)
{
super(parent, parent);
}
@Override
@JSReadonlyProperty
public QBSelect getParent()
{
return (QBSelect)super.getParent();
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#upper(Object)
* @param value
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.shipname.upper.eq(query.functions.upper('Sample')))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction upper(Object value)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.upper, new IQuerySelectValue[] { createOperand(value) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#abs(Object)
* @param value
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.mynum.abs.eq(query.functions.abs(myval)))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction abs(Object value)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.abs, new IQuerySelectValue[] { createOperand(value) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#sqrt(Object)
* @param value
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.mynum.sqrt.eq(query.functions.sqrt(myval)))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction sqrt(Object value)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.sqrt, new IQuerySelectValue[] { createOperand(value) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#lower(Object)
* @param value
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.shipname.lower.eq(query.functions.lower('Sample')))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction lower(Object value)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.lower, new IQuerySelectValue[] { createOperand(value) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#trim(Object)
* @param value
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.shipname.trim.eq(query.functions.trim('Sample')))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction trim(Object value)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.trim, new IQuerySelectValue[] { createOperand(value) });
}
protected IQuerySelectValue createOperand(Object value)
{
return getRoot().createOperand(value, null, 0);
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#length(Object)
* @param value
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.shipname.len.eq(query.functions.len('Sample')))
* foundset.loadRecords(query);
*/
public QBFunction js_len(Object value)
{
return length(value);
}
public QBFunction length(Object value)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.length, new IQuerySelectValue[] { createOperand(value) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#bit_length(Object)
* @param value
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.shipname.bit_length.eq(query.functions.bit_length('Sample')))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction bit_length(Object value)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.bit_length, new IQuerySelectValue[] { createOperand(value) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#cast(Object, String)
* @param value object to cast
* @param type type see QUERY_COLUMN_TYPES
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.result.add(query.functions.cast("22",QUERY_COLUMN_TYPES.TYPE_INTEGER)).add(query.columns.amt_discount.cast(QUERY_COLUMN_TYPES.TYPE_STRING));
* application.output(databaseManager.getDataSetByQuery(query,1).getAsHTML())
*/
@JSFunction
public QBFunction cast(Object value, String type)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.cast, new IQuerySelectValue[] { createOperand(value), new QueryColumnValue(type, null,
true) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#substring(Object, int)
* @param arg column name
* @param pos position
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.shipname.substring(3).eq(query.functions.substring('Sample', 3)))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction substring(Object arg, int pos)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.substring,
new IQuerySelectValue[] { createOperand(arg), createOperand(Integer.valueOf(pos)) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#substring(Object, int, int)
* @param arg column name
* @param pos position
* @param len length
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.shipname.substring(3, 2).eq(query.functions.substring('Sample', 3, 2)))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction substring(Object arg, int pos, int len)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.substring,
new IQuerySelectValue[] { createOperand(arg), createOperand(Integer.valueOf(pos)), createOperand(Integer.valueOf(len)) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#locate(Object, Object)
* @param string1 string to locate
* @param string2 string to search in
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.shipname.locate('amp').eq(query.functions.locate('Sample', 'amp')))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction locate(Object string1, Object string2)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.locate, new IQuerySelectValue[] { createOperand(string1), createOperand(string2), });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#locate(Object, Object, int)
* @param string1 string to locate
* @param string2 string to search in
* @param start start pos
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.shipname.locate('amp', 1).eq(query.functions.locate('Sample', 'amp', 1)))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction locate(Object string1, Object string2, int start)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.locate,
new IQuerySelectValue[] { createOperand(string1), createOperand(string2), createOperand(Integer.valueOf(start)) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#nullif(Object, Object)
* @param arg1
* @param arg1
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.shipname.nullif('none').eq(query.functions.nullif('Sample', 'none')))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction nullif(Object arg1, Object arg2)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.nullif, new IQuerySelectValue[] { createOperand(arg1), createOperand(arg2) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#mod(Object, Object)
* @param dividend
* @param divisor
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.mynumcol.mod(2).eq(query.functions.mod(myvar, 2))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction mod(Object dividend, Object divisor)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.mod, new IQuerySelectValue[] { createOperand(dividend), createOperand(divisor) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#plus(Object, Object)
* @param arg1
* @param arg2
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.mynumcol.plus(2).eq(query.functions.plus(myvar, 2))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction plus(Object arg1, Object arg2)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.plus, new IQuerySelectValue[] { createOperand(arg1), createOperand(arg2) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#minus(Object, Object)
* @param arg1
* @param arg2
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.mynumcol.minus(2).eq(query.functions.minus(myvar, 2))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction minus(Object arg1, Object arg2)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.minus, new IQuerySelectValue[] { createOperand(arg1), createOperand(arg2) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#multiply(Object, Object)
* @param arg1
* @param arg2
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.mynumcol.multiply(2).eq(query.functions.multiply(myvar, 2))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction multiply(Object arg1, Object arg2)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.multiply, new IQuerySelectValue[] { createOperand(arg1), createOperand(arg2) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#divide(Object, Object)
* @param arg1
* @param arg2
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.mynumcol.divide(2).eq(query.functions.divide(myvar, 2))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction divide(Object arg1, Object arg2)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.divide, new IQuerySelectValue[] { createOperand(arg1), createOperand(arg2) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#concat(Object, Object)
* @param arg1
* @param arg2
* @sample
* var query = datasources.db.udm.contacts.createSelect();
* query.result.add(query.columns.name_first.concat(' ').concat(query.columns.name_last))
* var ds = databaseManager.getDataSetByQuery(query, -1)
*
*/
@JSFunction
public QBFunction concat(Object arg1, Object arg2)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.concat, new IQuerySelectValue[] { createOperand(arg1), createOperand(arg2) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#floor(Object)
* @param arg number object
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.mynumcol.floor.eq(query.functions.floor(myvar))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction floor(Object arg)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.floor, new IQuerySelectValue[] { createOperand(arg) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#round(Object)
* @param arg number object
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.mynumcol.round.eq(query.functions.round(myvar))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction round(Object arg)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.round, new IQuerySelectValue[] { createOperand(arg) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#ceil(Object)
* @param arg number object
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.mynumcol.ceil.eq(query.functions.ceil(myvar))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction ceil(Object arg)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.ceil, new IQuerySelectValue[] { createOperand(arg) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#second(Object)
* @param arg date object
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.mydatecol.second.eq(query.functions.second(mydatevar))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction second(Object arg)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.second, new IQuerySelectValue[] { createOperand(arg) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#minute(Object)
* @param arg date object
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.mydatecol.minute.eq(query.functions.minute(mydatevar))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction minute(Object arg)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.minute, new IQuerySelectValue[] { createOperand(arg) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#hour(Object)
* @param arg date object
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.mydatecol.hour.eq(query.functions.hour(mydatevar))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction hour(Object arg)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.hour, new IQuerySelectValue[] { createOperand(arg) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#day(Object)
* @param arg date object
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.mydatecol.day.eq(query.functions.day(mydatevar))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction day(Object arg)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.day, new IQuerySelectValue[] { createOperand(arg) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#month(Object)
* @param arg date object
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.mydatecol.month.eq(query.functions.month(mydatevar))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction month(Object arg)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.month, new IQuerySelectValue[] { createOperand(arg) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#year(Object)
* @param arg date object
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.mydatecol.year.eq(query.functions.year(mydatevar))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction year(Object arg)
{
return new QBFunction(getRoot(), getParent(), QueryFunctionType.year, new IQuerySelectValue[] { createOperand(arg) });
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderFunctions#year(Object)
* @param args arguments to coalesce
* @sample
* var query = datasources.db.example_data.orders.createSelect();
* query.where.add(query.columns.mycol.coalesce('defval').eq(query.functions.coalesce(myvar, 'defval'))
* foundset.loadRecords(query);
*/
@JSFunction
public QBFunction coalesce(Object... args)
{
List<IQuerySelectValue> list = new ArrayList<IQuerySelectValue>(args.length);
for (Object arg : args)
{
list.add(createOperand(arg));
}
return new QBFunction(getRoot(), getParent(), QueryFunctionType.coalesce, list.toArray(new IQuerySelectValue[list.size()]));
}
}