/* * Copyright 1999-2012 Alibaba Group. * * Licensed 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. */ package com.alibaba.cobar.mysql; import java.io.UnsupportedEncodingException; import com.alibaba.cobar.config.Fields; /** * @author xianmao.hexm 2012-8-28 */ public class BindValueUtil { public static final void read(MySQLMessage mm, BindValue bv, String charset) throws UnsupportedEncodingException { switch (bv.type & 0xff) { case Fields.FIELD_TYPE_BIT: bv.value = mm.readBytesWithLength(); break; case Fields.FIELD_TYPE_TINY: bv.byteBinding = mm.read(); break; case Fields.FIELD_TYPE_SHORT: bv.shortBinding = (short) mm.readUB2(); break; case Fields.FIELD_TYPE_LONG: bv.intBinding = mm.readInt(); break; case Fields.FIELD_TYPE_LONGLONG: bv.longBinding = mm.readLong(); break; case Fields.FIELD_TYPE_FLOAT: bv.floatBinding = mm.readFloat(); break; case Fields.FIELD_TYPE_DOUBLE: bv.doubleBinding = mm.readDouble(); break; case Fields.FIELD_TYPE_TIME: bv.value = mm.readTime(); break; case Fields.FIELD_TYPE_DATE: case Fields.FIELD_TYPE_DATETIME: case Fields.FIELD_TYPE_TIMESTAMP: bv.value = mm.readDate(); break; case Fields.FIELD_TYPE_VAR_STRING: case Fields.FIELD_TYPE_STRING: case Fields.FIELD_TYPE_VARCHAR: bv.value = mm.readStringWithLength(charset); if (bv.value == null) { bv.isNull = true; } break; case Fields.FIELD_TYPE_DECIMAL: case Fields.FIELD_TYPE_NEW_DECIMAL: bv.value = mm.readBigDecimal(); if (bv.value == null) { bv.isNull = true; } break; default: throw new IllegalArgumentException("bindValue error,unsupported type:" + bv.type); } bv.isSet = true; } }