<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one or more
  ~ contributor license agreements.  See the NOTICE file distributed with
  ~ this work for additional information regarding copyright ownership.
  ~ The ASF licenses this file to You under the Apache License, Version 2.0
  ~ (the "License"); you may not use this file except in compliance with
  ~ the License.  You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.apache.servicecomb.samples.porter.user.dao.SessionMapper">
    <resultMap id="sessionInfo" type="org.apache.servicecomb.samples.porter.user.dao.SessionInfoModel">
        <result column="ID" jdbcType="INTEGER" property="id" />
        <result column="SESSION_ID" jdbcType="VARCHAR" property="sessiondId" />
        <result column="USER_NAME" jdbcType="VARCHAR" property="userName" />
        <result column="ROLE_NAME" jdbcType="VARCHAR" property="roleName" />
        <result column="CREATION_TIME" jdbcType="TIMESTAMP" property="creationTime" />
        <result column="ACTIVE_TIME" jdbcType="TIMESTAMP" property="activeTime" />
    </resultMap>

    <sql id="all_column">
        ID, SESSION_ID, USER_NAME, ROLE_NAME, CREATION_TIME, ACTIVE_TIME
    </sql>

    <sql id="all_column_auto">
        SESSION_ID, USER_NAME, ROLE_NAME
    </sql>

    <insert id="createSession" parameterType="org.apache.servicecomb.samples.porter.user.dao.SessionInfoModel">
        insert into T_SESSION (
        <include refid="all_column_auto" />
        )
        values (#{sessiondId,jdbcType=VARCHAR}, #{userName,jdbcType=VARCHAR},
        #{roleName,jdbcType=VARCHAR})
    </insert>

    <select id="getSessioinInfo" parameterType="java.lang.String"
        resultMap="sessionInfo">
        select
        <include refid="all_column" />
        from T_SESSION where SESSION_ID = #{0,jdbcType=VARCHAR}
    </select>
    
    <update id="updateSessionInfo" parameterType="java.lang.String">
        update T_SESSION
        set CREATION_TIME = CREATION_TIME where SESSION_ID = #{0,jdbcType=VARCHAR};
    </update>
</mapper>