//File: CosQuery.idl
//Part of the Query Service

#ifndef _COS_QUERY_IDL_
#define _COS_QUERY_IDL_

// omniORB specific pragmas to insert extra includes into the stub header.
#pragma hh #include "COS_sysdep.h"

#include <orb.idl>

#if defined(__OMNIIDL__) || defined(__OMNIIDL2__)
#include <ir.idl>
#endif

#include <CosQueryCollection.idl>

#pragma prefix "omg.org"

module CosQuery {

	exception QueryInvalid {string why;};
	exception QueryProcessingError {string why;};
	exception QueryTypeInvalid {};

	enum QueryStatus {complete, incomplete};

	typedef CosQueryCollection::ParameterList ParameterList;
	typedef CORBA::InterfaceDef QLType;

	interface Query;
	interface QueryLanguageType {};
	interface SQLQuery : QueryLanguageType {};
	interface SQL_92Query : SQLQuery {};
	interface OQL : QueryLanguageType {};
	interface OQLBasic : OQL {};
	interface OQL_93 : OQL {};
	interface OQL_93Basic : OQL_93, OQLBasic {};

	interface QueryEvaluator {
		typedef sequence<QLType> QLTypes;
		readonly attribute QLTypes ql_types;

		readonly attribute QLType default_ql_type;

		any evaluate (in string query, in QLType ql_type, in ParameterList params) raises(QueryTypeInvalid, QueryInvalid, QueryProcessingError);
	};
	
	interface QueryableCollection : QueryEvaluator, CosQueryCollection::Collection {};

	interface QueryManager : QueryEvaluator {
		Query create (in string query, in QLType ql_type, in ParameterList params) raises(QueryTypeInvalid, QueryInvalid);
	};

	interface Query {
		readonly attribute QueryManager query_mgr;

		void prepare (in ParameterList params) raises(QueryProcessingError);
		void execute (in ParameterList params) raises(QueryProcessingError);

		QueryStatus get_status ();
		any get_result ();
	};

};
#endif /* ifndef _COS_QUERY_IDL_ */
