<?xml version="1.0" encoding="utf-8"?>
<sqlMap namespace="Category" >
	
	<alias>
		<typeAlias alias="Category" type="IBatisNet.DataMapper.Test.Domain.Category, IBatisNet.DataMapper.Test"/>
	</alias>
	
	
		<select id="GetCategory" parameterClass="Integer" resultClass="Category">
			select
			Category_ID as Id,
			Category_Name as Name,
			Category_Guid as GuidString
			from Categories  
			where Category_ID = #value# 
		</select>
		
		<select id="GetCategoryGuid" parameterClass="Integer" resultClass="guid">
			select
			Category_Guid as value
			from Categories  
			where Category_ID = #value# 
		</select>
		
		<!-- Test for statement as insert -->
		<!-- Needs to be <insert> vs <statement> for MySql due to selectKey -->
		<insert id="InsertCategory" parameterClass="Category">
			<selectKey property="Id" type="post" resultClass="int">
				select LAST_INSERT_ID() as value
            </selectKey>			
  			insert into Categories  
				(Category_Name, Category_Guid) 
			values 
				(#Name#, #GuidString:Varchar#);
		</insert>
		
		<!--  -->
		<insert id="InsertCategoryViaInsertStatement" parameterClass="Category" >
			<selectKey property="Id" type="post" resultClass="int">
				select LAST_INSERT_ID() as value
            </selectKey>			
            insert into Categories  
				(Category_Name, Category_Guid) 
			values 
				(#Name#, #GuidString:Varchar#)
		</insert>

		<!-- Needs to be <insert> vs <statement> for MySql due to selectKey -->		
		<insert id="InsertCategoryViaParameterMap" parameterMap="InsertParam">
			<selectKey property="Id" type="post" resultClass="int">
				select LAST_INSERT_ID() as value
            </selectKey>
			insert into Categories  
				(Category_Name, Category_Guid)
			values 
				(?,?);
		</insert>

		<!-- Needs to be <insert> vs <statement> for MySql due to selectKey -->		
		<insert id="InsertCategoryNull" parameterMap="insert-null-params">
			<selectKey property="Id" type="post" resultClass="int">
				select LAST_INSERT_ID() as value
            </selectKey>
			insert into Categories  
				(Category_Name, Category_Guid)
			values 
				(?,?);
		</insert>
		
		<update id="UpdateCategoryViaParameterMap" parameterMap="UpdateParam">
			update Categories set
			Category_Name =?,
			Category_Guid = ?
			where
			Category_Id = ?
		</update>

		<procedure id="InsertCategoryViaStoreProcedure" parameterMap="category-insert-params">
			ps_InsertCategorie
		</procedure>
		
		<insert id="InsertCategoryGenerate" parameterMap="insert-generate-params">
			<selectKey property="Id" type="post" resultClass="int">
				select LAST_INSERT_ID() as value
            </selectKey>
            <generate table="Categories" />
		</insert>
		
		<update id="UpdateCategoryGenerate" parameterMap="update-generate-params">
			<generate table="Categories" by="Category_Id"/>
		</update>
		
		<delete id="DeleteCategoryGenerate" parameterMap="delete-generate-params">
			<generate table="Categories" by="Category_Id, Category_Name"/>
		</delete>
		
		<select id="SelectByPKCategoryGenerate" resultClass="Category" parameterClass="Category" parameterMap="select-generate-params">
			<generate table="Categories" by="Category_Id"/> 
		</select>
		
		<select id="SelectAllCategoryGenerate" resultClass="Category" parameterMap="select-generate-params">
			<generate table="Categories" /> 
		</select>
		
		<statement id="DynamicGuid" 
			resultClass="Category" 
			parameterClass="Category">
			select
			Category_ID as Id,
			Category_Name as Name,
			Category_Guid as Guid
			from Categories  
			<dynamic prepend="where">
				<isNotEqual prepend="and" property="Guid" compareProperty="EmptyGuid">
					Category_Guid=#GuidString:Varchar#
				</isNotEqual>
			</dynamic>
		</statement>
		<parameterMap id="category-insert-params">
			<parameter property="Id" column="Category_Id" dbType="Int32" />
			<parameter property="Name" column="Category_Name"/>
			<parameter property="GuidString" column="Category_Guid" dbType="Varchar"/>
		</parameterMap>
		
		<parameterMap id="InsertParam">
			<parameter property="Name" column="Category_Name"/>
			<parameter property="GuidString" column="Category_Guid" dbType="Varchar"/>
		</parameterMap>
		
		<parameterMap id="insert-null-params">
			<parameter property="Name" column="Category_Name"/>
			<parameter property="GuidString" column="Category_Guid" nullValue="00000000-0000-0000-0000-000000000000" dbType="Varchar"/>
		</parameterMap>
		
		<parameterMap id="UpdateParam" extends="InsertParam">
			<parameter property="Id" column="Category_Id" />
		</parameterMap>
		
		<!-- Used by generated statement -->
		
		<parameterMap id="insert-generate-params">
			<parameter property="Name" column="Category_Name"/>
			<parameter property="GuidString" column="Category_Guid" dbType="Varchar"/>
		</parameterMap>
		
		<parameterMap id="update-generate-params" extends="insert-generate-params">
			<parameter property="Id" column="Category_Id" />
		</parameterMap>
		
		<parameterMap id="delete-generate-params">
			<parameter property="Id" column="Category_Id" />
			<parameter property="Name" column="Category_Name"/>
		</parameterMap>
		
		<parameterMap id="select-generate-params">
			<parameter property="Id" column="Category_Id" />
			<parameter property="Name" column="Category_Name"/>
			<parameter property="GuidString" column="Category_Guid" dbType="Varchar"/>
		</parameterMap>
		
	
</sqlMap>