/*
This file belongs to the Servoy development and deployment environment, Copyright (C) 1997-2011 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 com.servoy.j2db.documentation.ServoyDocumented;
import com.servoy.j2db.persistence.RepositoryException;
import com.servoy.j2db.query.IQueryElement;
import com.servoy.j2db.querybuilder.IQueryBuilderPart;
import com.servoy.j2db.scripting.IJavaScriptType;
import com.servoy.j2db.scripting.annotations.JSReadonlyProperty;
/**
* @author rgansevles
*
*/
@ServoyDocumented(category = ServoyDocumented.RUNTIME, scriptingName = "QBPart")
public abstract class QBPart implements IQueryBuilderPart, IJavaScriptType
{
private final QBSelect root;
private final QBTableClause parent;
QBPart()
{
this.root = (QBSelect)this;
this.parent = (QBTableClause)this;
}
QBPart(QBSelect root, QBTableClause parent)
{
this.root = root;
this.parent = parent;
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderPart#getParent()
* @sample
* var query = datasources.db.example_data.person.createSelect();
* query.where.add(query.joins.person_to_parent.joins.person_to_parent.columns.name.eq('john'))
* foundset.loadRecords(query)
*/
@JSReadonlyProperty
public QBTableClause getParent()
{
return parent;
}
/**
* @clonedesc com.servoy.j2db.querybuilder.IQueryBuilderPart#getRoot()
* @sample
* var subquery = datasources.db.example_data.order_details.createSelect();
*
* var query = datasources.db.example_data.orders.createSelect();
* 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)
*/
@JSReadonlyProperty
public QBSelect getRoot()
{
return root;
}
public IQueryElement build() throws RepositoryException
{
return getRoot().build();
}
}