<?php
/**
* DBを利用するタスク
*
* PHP version 5
*
* @package    core
* @author     stk2k <stk2k@sazysoft.com>
* @copyright  2008 stk2k, sazysoft
*/

abstract class DatabaseTask extends Task implements ITask
{
	private $_gw;

	/*
	 *	コンストラクタ
	 */
	public function __construct()
	{
		parent::__construct();

		$this->_gw = new SmartGateway();
	}

	/*
	 *	データソース
	 */
	public function getDataSource()
	{
		return $this->_gw->getDataSource();
	}

	/*
	 *	SQLビルダ
	 */
	public function getSQLBuilder()
	{
		return $this->_gw->getSQLBuilder();
	}

	/*
	 *	接続情報を再設定
	 */
	public function refresh()
	{
		$this->_gw->refresh();
	}

	/*
	 *	テーブルモデルの取得
	 */
	public function getModel( String $model_name )
	{
		return $this->_gw->getModel( $model_name );
	}

	/*
	 *	保存
	 */
	public  function save( String $model_name, DTO $dto, String $converter_str = NULL )
	{
		return $this->_gw->save( $model_name, $dto, $converter_str );
	}

	/*
	 *	SQL実行(INSERT/DELETE/UPDATE)
	 */
	public  function execute( String $sql, Vector $params = NULL )
	{
		return $this->_fw->execute( $sql, $params );
	}

	/*
	 *	SQL実行(SELECT)
	 */
	public  function query( String $sql, Vector $params = NULL, String $converter_str = NULL )
	{
		return $this->_gw->query( $sql, $params, $converter_str );
	}

	/*
	 *	SQL検索
	 */
	public  function findBySQL( String $model_name, $sql, $params = NULL, String $converter_str = NULL ) 
	{
		return $this->_gw->findBySQL( $model_name, $sql, $params, $converter_str );
	}

	/*
	 *	最初の１件取得
	 */
	public  function findFirst( DTO $dto, SQLCriteria $criteria = NULL, String $converter_str = NULL ) 
	{
		return $this->_gw->findFirst( $dto, $criteria, $converter_str );
	}

	/*
	 *	全件取得
	 */
	public  function findAll( String $model_name, SQLCriteria $criteria = NULL, String $converter_str = NULL ) 
	{
		return $this->_gw->findAll( $model_name, $criteria, $converter_str );
	}

	/*
	 *	１つのフィールドのみで検索
	 */
	public  function findAllBy( String $model_name, $field, $value, SQLCriteria $criteria = NULL, $converter_str = NULL )
	{
		return $this->_gw->findAllBy( $model_name, $field, $value, $criteria, $converter_str );;
	}

	/*
	 *	IDから検索(１つだけ指定した場合)
	 */
	public  function findByID( String $model_name, String $id, $converter_str = NULL ) 
	{
		return $this->_gw->findByID( $model_name, $id, $converter_str );;
	}

	/*
	 *	IDから検索
	 */
	public  function findAllByID( String $model_name, Vector $id_array ) 
	{
		return $this->_gw->findAllByID( $model_name, $id_array );
	}

	/*
	 *	削除（１つだけ指定した場合）
	 */
	public  function destroyById( String $model_name, String $id ) 
	{
		$this->_gw->destroyById( $model_name, $id );
	}

	/*
	 *	削除（複数を指定した場合）
	 */
	public  function destroyAllById( String $model_name, Vector $id_array ) 
	{
		$this->_gw->destroyAllById( $model_name, $id_array );
	}

	/*
	 *	１つのフィールドに合致するレコードを全削除
	 */
	public  function destroyBy( String $model_name, String $field, $value )
	{
		$this->_gw->destroyBy( $model_name, $field, $value );
	}


	/*
	 *	条件に合致するレコードを全削除
	 */
	public  function destroyAll( String $model_name, String $where_clause = NULL, Vector $params = NULL ) 
	{
		$this->destroyAll( $model_name, $where_clause, $params );
	}

	/*
	 *	テーブルのレコード数を取得
	 */
	public  function count( String $model_name, String $where_clause = NULL, Vector $params = NULL ) 
	{
		return $this->_gw->count( $model_name, $where_clause, $params );
	}

	/*
	 *	特定フィールドの最大値を取得
	 */
	public  function max( String $model_name, String $field, String $where_clause = NULL, Vector $params = NULL ) 
	{
		return $this->gw->max( $model_name, $field, $where_clause, $params );
	}


	/*
	 *	DBを作成
	 */
	public  function createDatabase( String $db_name, String $charset ) 
	{
		$this->_gw->createDatabase( $db_name, $charset );
	}

	/*
	 *	テーブルを作成
	 */
	public  function createTable( String $model_name ) 
	{
		$this->_gw->createTable( $model_name );
	}
}


return __FILE__;