<?xml version="1.0" encoding="utf-8" ?>
<sqlMap namespace="Account" >

	<alias>
		<typeAlias alias="Search" type="IBatisNet.DataMapper.Test.Domain.Search, IBatisNet.DataMapper.Test"/>
	</alias>

	<statements>

		<select  id="DynamicAll"
					parameterClass="Account"
					resultClass="Account">
				select
				Account_ID			as Id,
				Account_FirstName	as FirstName,
				Account_LastName	as LastName,
				Account_Email		as EmailAddress
				from Accounts
		</select>

		<select id="DynamicWithExtend"
				extends="DynamicAll"
				parameterClass="Account"
				resultClass="Account">
			<dynamic prepend="WHERE" >
			<isGreaterThan prepend="AND" property="Id" compareValue="0"  >
				Account_ID = #Id#
			</isGreaterThan>
			<isNotNull prepend="AND" property="Ids" >
				Account_ID in
				<iterate property="Ids" open="(" close=")"  conjunction="," >
					#Ids[]#
				</iterate>
			</isNotNull>
			<isNotEmpty prepend="AND" property="FirstName" >
				Account_FirstName = #FirstName#
			</isNotEmpty>
			<isNotEmpty prepend="AND" property="LastName" >
				Account_LastName = #LastName#
			</isNotEmpty>
			<isNotEmpty prepend="AND" property="EmailAddress" >
				<isEqual property="EmailAddress" compareValue="Joe">
				Account_Email = 'clinton.begin@ibatis.com'
				</isEqual>
				<isNotEqual property="EmailAddress" compareValue="Joe">
				Account_Email = #EmailAddress#
				</isNotEqual>
			</isNotEmpty>
			</dynamic>
		</select>

		<!-- IBATISNET-114: remapResults -->
		<statement  id="DynamicSqlOnColumnSelection"
					parameterClass="Account"
					resultClass="Account">
			SELECT
			Account_ID as Id,
			<dynamic>
				<isEqual property="LastName" compareValue="Dalton" >
					Account_FirstName as FirstName,
				</isEqual>
				<isEqual property="LastName" compareValue="Dalton" >
					Account_LastName as LastName,
				</isEqual>
			</dynamic>

			Account_Email as EmailAddress
			FROM
			Accounts
		</statement>

		<statement id="DynamicIsEqual"
				parameterClass="string"
				resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			<isEqual compareValue="Joe" >
				where Account_FirstName = 'Joe'
			</isEqual>
		</statement>

		<statement id="DynamicIsParameterPresent"
				parameterClass="integer"
				resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			<isParameterPresent >
			where Account_ID = #value#
			</isParameterPresent>
		</statement>

		<statement id="DynamicIsNotEmpty"
					parameterClass="string"
					resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			<isNotEmpty>
			where Account_FirstName = #value#
			</isNotEmpty>
		</statement>

		<statement id="DynamicIsGreater"
					parameterClass="int"
					resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			<isGreaterThan compareValue="3" >
			where Account_ID = 1
			</isGreaterThan>
		</statement>

		<statement id="DynamicIsGreaterEqual"
					parameterClass="int"
					resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			<isGreaterEqual compareValue="3" >
			where Account_ID = 1
			</isGreaterEqual>
		</statement>

		<statement id="DynamicIsLess"
					parameterClass="int"
					resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			<isLessThan compareValue="3" >
			where Account_ID = 1
			</isLessThan>
		</statement>

		<statement id="DynamicIsLessEqual"
					parameterClass="int"
					resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			<isLessEqual compareValue="3" >
			where Account_ID = 1
			</isLessEqual>
		</statement>

		<statement id="DynamicIsNotNull"
					parameterClass="string"
					resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			<isNotNull>
			where Account_ID = 1
			</isNotNull>
		</statement>

		<statement id="DynamicIsPropertyAvailable"
					parameterClass="string"
					resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			<isPropertyAvailable property="Id" >
			where Account_ID = 1
			</isPropertyAvailable>
		</statement>


		<statement id="DynamicSubst"
					parameterClass="map"
					resultClass="Account">
			<dynamic>
			$statement$
			</dynamic>
		</statement>

		<statement id="DynamicIterate"
					parameterClass="list"
					resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			WHERE Account_ID IN
			<iterate open="(" close=")" conjunction=",">
				#[]#
			</iterate>
		</statement>

		<statement id="DynamicIterate2"
					parameterClass="Account"
					resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			WHERE Account_ID IN
			<iterate property="Ids" open="(" close=")"  conjunction="," >
				#Ids[]#
			</iterate>
		</statement>

		 <statement id="MultiDynamicIterate"
             parameterClass="list"
             resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			WHERE Account_ID IN
			<iterate open="(" close=")" conjunction=",">
				#[]#
			</iterate>
				and Account_ID IN
			<iterate open="(" close=")" conjunction=",">
				#[]#
			</iterate>
		</statement>


		<statement id="DynamicQueryByExample"
					parameterClass="Account"
					resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			<dynamic prepend="WHERE" >
			<isGreaterThan prepend="AND" property="Id" compareValue="0"  >
				Account_ID = #Id#
			</isGreaterThan>
			<isNotNull prepend="AND" property="Ids" >
				Account_ID in
				<iterate property="Ids" open="(" close=")"  conjunction="," >
					#Ids[]#
				</iterate>
			</isNotNull>
			<isNotEmpty prepend="AND" property="FirstName" >
				Account_FirstName = #FirstName#
			</isNotEmpty>
			<isNotEmpty prepend="AND" property="LastName" >
				Account_LastName = #LastName#
			</isNotEmpty>
			<isNotEmpty prepend="AND" property="EmailAddress" >
				<isEqual property="EmailAddress" compareValue="Joe">
				Account_Email = 'clinton.begin@ibatis.com'
				</isEqual>
				<isNotEqual property="EmailAddress" compareValue="Joe">
				Account_Email = #EmailAddress#
				</isNotEqual>
			</isNotEmpty>
			</dynamic>
		</statement>

		<statement id="DynamicIterateWithPrepend1"
					parameterClass="list"
					resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			<dynamic prepend="where" >
			Account_ID IN
			<iterate open="(" close=")" conjunction=",">
				#[]#
			</iterate>
			</dynamic>
		</statement>

		<statement id="DynamicIterateWithPrepend2"
					parameterClass="list"
					resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			<dynamic prepend="where" >
			<iterate open="(" close=")" conjunction="OR">
				Account_ID = #[]#
			</iterate>
			</dynamic>
		</statement>

		<statement id="DynamicIterateWithPrepend3"
					parameterClass="list"
					resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			<dynamic prepend="where" >
				<isParameterPresent prepend="BLAH!" >
					<iterate open="(" close=")" conjunction="OR">
						Account_ID = #[]#
					</iterate>
				</isParameterPresent>
			</dynamic>
		</statement>

		<statement id="DynamicWithPrepend"
					parameterClass="Account"
					resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			<dynamic prepend="where">
				<isParameterPresent>
					<isNotEmpty prepend="and" property="Id" >
					Account_ID = #Id#
					</isNotEmpty>
					<isNotEmpty prepend="and" property="FirstName" >
					Account_FirstName = #FirstName#
					</isNotEmpty>
					<isNotEmpty prepend="and" property="LastName"  >
					Account_LastName = #LastName#
					</isNotEmpty>
				</isParameterPresent>
			</dynamic>
		</statement>

		<statement id="DynamicWithTwoDynamicElements"
             parameterClass="Account"
             resultClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			<dynamic prepend="where">
				<isNotEmpty prepend="BLAH!" property="Id" >
				Account_ID = #Id#
				</isNotEmpty>
			</dynamic>
			<dynamic prepend="and">
				<isNotEmpty prepend="BLAH!" property="FirstName" >
				Account_FirstName = #FirstName#
				</isNotEmpty>
				<isNotEmpty prepend="and" property="LastName"  >
				Account_LastName = #LastName#
				</isNotEmpty>
			</dynamic>
		</statement>

		<statement id="ComplexDynamicStatement"
			cacheModel="account-cache"
			resultClass="Account"
			parameterClass="Account">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			<dynamic prepend="WHERE">
				<isNotNull prepend="AND" property="FirstName">
					(Account_FirstName = #FirstName#
					<isNotNull prepend="OR" property="LastName">
					Account_LastName = #LastName#
					</isNotNull>
					)
				</isNotNull>
				<isNotNull prepend="AND" property="EmailAddress">
					Account_Email like #EmailAddress#
				</isNotNull>
				<isGreaterThan prepend="AND" property="Id" compareValue="0">
					Account_ID = #Id#
				</isGreaterThan>
			</dynamic>
			order by Account_LastName
		</statement>

		<statement id="Jira-IBATISNET-11"
			resultClass="Account"
			parameterClass="Search">
			select
			Account_ID			as Id,
			Account_FirstName	as FirstName,
			Account_LastName	as LastName,
			Account_Email		as EmailAddress
			from Accounts
			<dynamic prepend="where">
				<isNotNull prepend="and" property="NumberSearch">
					((Account_ID $Operande$ #NumberSearch#) or
					(Account_ID $Operande$ #NumberSearch#))
				</isNotNull>
				<isEqual prepend="and" property="StartDate" compareValue="25/12/2004">
						<![CDATA[Account_FirstName >= #StartDate# ]]>
				</isEqual>
				<isEqual prepend="and" property="StartDateAnd" compareValue="true">
						<![CDATA[Account_LastName >= #StartDate# ]]>
				</isEqual>
			</dynamic>

			order by Account_LastName
		</statement>
	</statements>


</sqlMap>