public void AddWithValue(string key, string value, System.Text.Encoding enc)
        {
            var data = new MyStructData();

            if (value == "")
            {
                data.myString = "";
                data.type     = MySqlDataType.VAR_STRING;
            }
            else if (value != null)
            {
                //replace some value
                if (enc != null)
                {
                    AddWithValue(key, enc.GetBytes(value));
                    return;
                }
                else
                {
                    data.myString = value.Replace("\'", "\\\'");
                    data.type     = MySqlDataType.VAR_STRING;
                }
            }
            else
            {
                data.myString = null;
                data.type     = MySqlDataType.NULL;
            }
            _values[key] = data;
        }
        public void AddWithValue(string key, string value, IStringConverter strConv)
        {
            var data = new MyStructData();

            if (value == "")
            {
                data.myString = "";
                data.type     = MySqlDataType.VAR_STRING;
            }
            else if (value != null)
            {
                //replace some value
                if (strConv != null)
                {
                    AddWithValue(key, strConv.WriteConv(value));
                    return;
                }
                else
                {
                    data.myString = value.Replace("\'", "\\\'");
                    data.type     = MySqlDataType.VAR_STRING;
                }
            }
            else
            {
                data.myString = null;
                data.type     = MySqlDataType.NULL;
            }
            _values[key] = data;
        }
        public void AddWithValue(string key, short value)
        {
            var data = new MyStructData();

            data.myInt32 = value;
            data.type    = Types.SHORT;
            _values[key] = data;
        }
        public void AddWithValue(string key, long value)
        {
            var data = new MyStructData();

            data.myInt64 = value;
            data.type    = Types.LONGLONG;
            _values[key] = data;
        }
        public void AddWithValue(string key, double value)
        {
            var data = new MyStructData();

            data.myDouble = value;
            data.type     = Types.DOUBLE;
            _values[key]  = data;
        }
        public void AddWithValue(string key, decimal value)
        {
            var data = new MyStructData();

            data.myString = value.ToString();
            data.type     = Types.STRING;
            _values[key]  = data;
        }
        public void AddWithValue(string key, float value)
        {
            var data = new MyStructData();

            data.myDouble = value;
            data.type     = Types.FLOAT;
            _values[key]  = data;
        }
        public void AddWithValue(string key, DateTime value)
        {
            var data = new MyStructData();

            data.myDateTime = value;
            data.type       = Types.DATETIME;
            _values[key]    = data;
        }
        public void AddWithValue(string key, char value)
        {
            //1 unicode char => 2 bytes store
            var data = new MyStructData();

            data.myUInt32 = value;
            data.type     = Types.LONGLONG;
            _values[key]  = data;
        }
        public void AddWithValue(string key, sbyte value)
        {
            //tiny int signed (-128 to 127)
            var data = new MyStructData();

            data.myInt32 = value;
            data.type    = Types.TINY;
            _values[key] = data;
        }
        /// <summary>
        /// add null data
        /// </summary>
        /// <param name="key"></param>
        public void SetNull(string key)
        {
            var data = new MyStructData();

            data.myString = null;
            data.type     = MySqlDataType.NULL;
            //data.myUInt64 = value;
            //data.type = Types.LONGLONG;
            _values[key] = data;
        }
        public void AddWithValue(string key, char value)
        {
            //1 unicode char => 2 bytes store
            var data = new MyStructData();

            //data.myUInt32 = value;
            data.myString = value.ToString();
            data.type     = MySqlDataType.STRING; //TODO:?
            _values[key]  = data;
        }
        public void AddWithValue(string key, byte value)
        {
            var data = new MyStructData();

            data.myString = value.ToString();
            data.type     = Types.STRING;
            //data.myInt32 = value;
            //data.type = Types.TINY;
            _values[key] = data;
        }
        public void AddWithValue(string key, ulong value)
        {
            var data = new MyStructData();

            data.myString = value.ToString();
            data.type     = Types.STRING;
            //data.myUInt64 = value;
            //data.type = Types.LONGLONG;
            _values[key] = data;
        }
        public void AddWithValue(string key, uint value)
        {
            //INT 4       min        max
            //signed -2147483648 2147483647
            //unsigned     0     4294967295
            //---------------------------
            var data = new MyStructData();

            data.myUInt32 = value;
            data.type     = Types.LONGLONG;//**
            _values[key]  = data;
        }
        public void AddWithValue(string key, ushort value)
        {
            //INT 2       min        max
            //signed      -32768    32767
            //unsigned     0     65535
            //---------------------------

            var data = new MyStructData();

            data.myString = value.ToString();
            data.type     = Types.STRING;
            //data.myUInt32 = value;
            //data.type = Types.SHORT;
            _values[key] = data;
        }
        public void AddWithValue(string key, byte[] value)
        {
            var data = new MyStructData();

            if (value != null)
            {
                data.myBuffer = value;
                data.type     = Types.LONG_BLOB;
            }
            else
            {
                data.myBuffer = null;
                data.type     = Types.NULL;
            }
            _values[key] = data;
        }
        //-------------------------------------------------------
        //user's bound data values

        public void AddWithValue(string key, string value)
        {
            var data = new MyStructData();

            if (value != null)
            {
                data.myString = value;
                data.type     = Types.VAR_STRING;
            }
            else
            {
                data.myString = null;
                data.type     = Types.NULL;
            }
            _values[key] = data;
        }
        public void AddWithValue(string key, string value)
        {
            var data = new MyStructData();

            if (value != null)
            {
                //replace some value
                value         = value.Replace("\'", "\\\'");
                data.myString = value;
                data.type     = MySqlDataType.VAR_STRING;
            }
            else
            {
                data.myString = null;
                data.type     = MySqlDataType.NULL;
            }
            _values[key] = data;
        }
Example #20
0
        static void FormatAndAppendData(StringBuilder stbuilder, ref MyStructData data)
        {
            //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            //TODO: review here , data range
            //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            switch (data.type)
            {
            case MySqlDataType.BLOB:
            case MySqlDataType.LONG_BLOB:
            case MySqlDataType.MEDIUM_BLOB:
            case MySqlDataType.TINY_BLOB:
                MySqlStringToHexUtils.ConvertByteArrayToHexWithMySqlPrefix(data.myBuffer, stbuilder);
                break;

            case MySqlDataType.DATE:
            case MySqlDataType.NEWDATE:
                stbuilder.Append('\'');
                AppendOnlyDate(stbuilder, data.myDateTime);
                stbuilder.Append('\'');
                break;

            case MySqlDataType.DATETIME:
                stbuilder.Append('\'');
                //#if DEBUG
                //string preview_v = data.myDateTime.ToString("s");
                //#endif
                stbuilder.Append(data.myDateTime.ToString("s"));
                stbuilder.Append('\'');
                break;

            case MySqlDataType.TIMESTAMP:
            case MySqlDataType.TIME:
                //TODO: review here
                stbuilder.Append('\'');
                AppendOnlyTime(stbuilder, data.myDateTime);
                stbuilder.Append('\'');
                break;

            case MySqlDataType.STRING:
            case MySqlDataType.VARCHAR:
            case MySqlDataType.VAR_STRING:

                stbuilder.Append('\'');
                //TODO: check /escape string here ****
                stbuilder.Append(data.myString);
                stbuilder.Append('\'');
                break;

            case MySqlDataType.BIT:
                stbuilder.Append(Encoding.ASCII.GetString(new byte[] { (byte)data.myInt32 }));
                break;

            case MySqlDataType.DOUBLE:
                stbuilder.Append(data.myDouble.ToString());
                break;

            case MySqlDataType.FLOAT:
                stbuilder.Append(((float)data.myDouble).ToString());
                break;

            case MySqlDataType.TINY:
            case MySqlDataType.SHORT:
            case MySqlDataType.LONG:
            case MySqlDataType.INT24:
            case MySqlDataType.YEAR:
                stbuilder.Append(data.myInt32.ToString());
                break;

            case MySqlDataType.LONGLONG:
                stbuilder.Append(data.myInt64.ToString());
                break;

            case MySqlDataType.DECIMAL:
                stbuilder.Append(data.myDecimal.ToString());
                break;

            default:
                stbuilder.Append(data.myUInt64.ToString());
                break;
            }
        }
Example #21
0
        MyStructData ReadCurrentRowTextProtocol(MySqlFieldDefinition f)
        {
            BufferReader  r            = this.bufferReader;
            MyStructData  data         = new MyStructData();
            MySqlDataType type         = (MySqlDataType)f.FieldType;
            string        numberString = null;

            switch (type)
            {
            case MySqlDataType.TIMESTAMP:
            case MySqlDataType.DATE:
            case MySqlDataType.DATETIME:
            case MySqlDataType.NEWDATE:
            {
                QueryParsingConfig qparsingConfig = _queryParsingConf;
                tmpStringBuilder.Length = 0;        //clear
                data.myString           = r.ReadLengthCodedString(this.StringConverter);
                data.type = type;
                if (data.myString == null)
                {
                    data.type = MySqlDataType.NULL;
                    return(data);
                }
                if (qparsingConfig.DateStrings)
                {
                    return(data);
                }
                if (data.myString == "0000-00-00")
                {
                    data.myDateTime = DateTime.MinValue;        //?
                    data.type       = type;
                    return(data);
                }
                //-------------------------------------------------------------
                //    var originalString = dateString;
                //    if (field.type === Types.DATE) {
                //      dateString += ' 00:00:00';
                //    }
                tmpStringBuilder.Append(data.myString);
                //string originalString = dateString;
                if (type == MySqlDataType.DATE)
                {
                    tmpStringBuilder.Append(" 00:00:00");
                }
                //    if (timeZone !== 'local') {
                //      dateString += ' ' + timeZone;
                //    }

                if (!qparsingConfig.UseLocalTimeZone)
                {
                    tmpStringBuilder.Append(' ' + qparsingConfig.TimeZone);
                }
                //var dt;
                //    dt = new Date(dateString);
                //    if (isNaN(dt.getTime())) {
                //      return originalString;
                //    }

                data.myDateTime = DateTime.Parse(tmpStringBuilder.ToString(),
                                                 System.Globalization.CultureInfo.InvariantCulture);
                data.type = type;
                tmpStringBuilder.Length = 0;        //clear
            }
                return(data);

            case MySqlDataType.TINY:
            case MySqlDataType.SHORT:
            case MySqlDataType.LONG:
            case MySqlDataType.INT24:
            case MySqlDataType.YEAR:

                //TODO: review here,
                data.myString = numberString = r.ReadLengthCodedString(this.StringConverter);
                if (numberString == null ||
                    (f.IsZeroFill && numberString[0] == '0') ||
                    numberString.Length == 0)
                {
                    data.type = MySqlDataType.NULL;
                }
                else
                {
                    data.myInt32 = Convert.ToInt32(numberString);
                    data.type    = type;
                }
                return(data);

            case MySqlDataType.FLOAT:
            case MySqlDataType.DOUBLE:
                data.myString = numberString = r.ReadLengthCodedString(this.StringConverter);
                if (numberString == null || (f.IsZeroFill && numberString[0] == '0'))
                {
                    data.type = MySqlDataType.NULL;
                }
                else
                {
                    data.myDouble = Convert.ToDouble(numberString);
                    data.type     = type;
                }
                return(data);

            //    return (numberString === null || (field.zeroFill && numberString[0] == "0"))
            //      ? numberString : Number(numberString);
            case MySqlDataType.NEWDECIMAL:
            case MySqlDataType.LONGLONG:
                //    numberString = parser.parseLengthCodedString();
                //    return (numberString === null || (field.zeroFill && numberString[0] == "0"))
                //      ? numberString
                //      : ((supportBigNumbers && (bigNumberStrings || (Number(numberString) > IEEE_754_BINARY_64_PRECISION)))
                //        ? numberString
                //        : Number(numberString));

                QueryParsingConfig config = _queryParsingConf;
                data.myString = numberString = r.ReadLengthCodedString(this.StringConverter);
                if (numberString == null || (f.IsZeroFill && numberString[0] == '0'))
                {
                    data.type = MySqlDataType.NULL;
                }
                else if (config.SupportBigNumbers &&
                         (config.BigNumberStrings || (Convert.ToInt64(numberString) > Packet.IEEE_754_BINARY_64_PRECISION)))
                {
                    //store as string ?
                    //TODO: review here  again
                    data.myString = numberString;
                    data.type     = type;
                    throw new NotSupportedException();
                }
                else if (type == MySqlDataType.LONGLONG)
                {
                    data.myInt64 = Convert.ToInt64(numberString);
                    data.type    = type;
                }
                else    //decimal
                {
                    data.myDecimal = Convert.ToDecimal(numberString);
                    data.type      = type;
                }
                return(data);

            case MySqlDataType.BIT:

                data.myBuffer = r.ReadLengthCodedBuffer();
                data.type     = type;
                return(data);

            //    return parser.parseLengthCodedBuffer();
            case MySqlDataType.STRING:
            case MySqlDataType.VAR_STRING:

            case MySqlDataType.TINY_BLOB:
            case MySqlDataType.MEDIUM_BLOB:
            case MySqlDataType.LONG_BLOB:
            case MySqlDataType.BLOB:
                if (f.MarkedAsBinary)
                {
                    data.myBuffer = r.ReadLengthCodedBuffer();
                    data.type     = (data.myBuffer != null) ? type : MySqlDataType.NULL;
                }
                else
                {
                    data.myString = r.ReadLengthCodedString(this.StringConverter);
                    data.type     = (data.myString != null) ? type : MySqlDataType.NULL;
                }
                return(data);

            //    return (field.charsetNr === Charsets.BINARY)
            //      ? parser.parseLengthCodedBuffer()
            //      : parser.parseLengthCodedString();
            case MySqlDataType.GEOMETRY:
                //TODO: unfinished
                data.type = MySqlDataType.GEOMETRY;
                return(data);

            default:
                data.myString = r.ReadLengthCodedString(this.StringConverter);
                data.type     = type;
                return(data);
            }
        }
Example #22
0
        MyStructData ReadCurrentRowBinaryProtocol(MySqlFieldDefinition f)
        {
            MySqlDataType fieldType = (MySqlDataType)f.FieldType;
            MyStructData  myData    = new MyStructData();
            BufferReader  r         = this.bufferReader;

            switch (fieldType)
            {
            case MySqlDataType.TIMESTAMP: //
            case MySqlDataType.DATE:      //
            case MySqlDataType.DATETIME:  //
            case MySqlDataType.NEWDATE:   //
                r.ReadLengthCodedDateTime(out myData.myDateTime);
                myData.type = fieldType;
                return(myData);

            case MySqlDataType.TINY:    //length = 1;
                myData.myInt32 = r.U1();
                myData.type    = fieldType;
                return(myData);

            case MySqlDataType.SHORT:   //length = 2;
            case MySqlDataType.YEAR:    //length = 2;
                myData.myInt32 = (int)r.U2();
                myData.type    = fieldType;
                return(myData);

            case MySqlDataType.INT24:
            case MySqlDataType.LONG:    //length = 4;
                myData.myInt32 = (int)r.U4();
                myData.type    = fieldType;
                return(myData);

            case MySqlDataType.FLOAT:
                myData.myDouble = r.ReadFloat();
                myData.type     = fieldType;
                return(myData);

            case MySqlDataType.DOUBLE:
                myData.myDouble = r.ReadDouble();
                myData.type     = fieldType;
                return(myData);

            case MySqlDataType.NEWDECIMAL:
                myData.myDecimal = r.ReadDecimal();
                myData.type      = fieldType;
                return(myData);

            case MySqlDataType.LONGLONG:
                myData.myInt64 = r.ReadInt64();
                myData.type    = fieldType;
                return(myData);

            case MySqlDataType.VARCHAR:
                myData.myString = r.ReadLengthCodedString(this.StringConverter);
                myData.type     = fieldType;
                return(myData);

            case MySqlDataType.BIT:
                myData.myBuffer = r.ReadLengthCodedBuffer();
                myData.type     = fieldType;
                return(myData);

            case MySqlDataType.STRING:
            case MySqlDataType.VAR_STRING:
            case MySqlDataType.TINY_BLOB:
            case MySqlDataType.MEDIUM_BLOB:
            case MySqlDataType.LONG_BLOB:
            case MySqlDataType.BLOB:
                if (f.MarkedAsBinary)
                {
                    myData.myBuffer = r.ReadLengthCodedBuffer();
                }
                else
                {
                    myData.myString = r.ReadLengthCodedString(this.StringConverter);
                }
                myData.type = fieldType;
                return(myData);

            case MySqlDataType.GEOMETRY:
                throw new NotSupportedException();

            default:
                myData.myBuffer = r.ReadLengthCodedBuffer();
                myData.type     = MySqlDataType.NULL;
                return(myData);
            }
        }
Example #23
0
        public object GetValue(int colIndex)
        {
            MyStructData data = cells[colIndex];

            switch (data.type)
            {
            case MySqlDataType.BLOB:
            case MySqlDataType.LONG_BLOB:
            case MySqlDataType.MEDIUM_BLOB:
            case MySqlDataType.TINY_BLOB:
                return(data.myBuffer);

            case MySqlDataType.DATE:
            case MySqlDataType.NEWDATE:
                return(data.myDateTime);

            //stbuilder.Append('\'');
            //stbuilder.Append(data.myDateTime.ToString("yyyy-MM-dd"));
            //stbuilder.Append('\'');
            //break;
            case MySqlDataType.DATETIME:
                //stbuilder.Append('\'');
                //stbuilder.Append(data.myDateTime.ToString("yyyy-MM-dd hh:mm:ss"));
                //stbuilder.Append('\'');
                //break;
                return(data.myDateTime);

            case MySqlDataType.TIMESTAMP:
            case MySqlDataType.TIME:
                ////TODO: review here
                //stbuilder.Append('\'');
                //stbuilder.Append(data.myDateTime.ToString("hh:mm:ss"));
                //stbuilder.Append('\'');
                //break;
                return(data.myDateTime);

            case MySqlDataType.STRING:
            case MySqlDataType.VARCHAR:
            case MySqlDataType.VAR_STRING:

                //stbuilder.Append('\'');
                ////TODO: check /escape string here ****
                //stbuilder.Append(data.myString);
                //stbuilder.Append('\'');
                //break;
                return(data.myString);

            case MySqlDataType.BIT:
                throw new NotSupportedException();
            // stbuilder.Append(Encoding.ASCII.GetString(new byte[] { (byte)data.myInt32 }));

            case MySqlDataType.DOUBLE:
                return(data.myDouble);

            //stbuilder.Append(data.myDouble.ToString());
            //break;
            case MySqlDataType.FLOAT:
                return(data.myDouble);   //TODO: review here

            //stbuilder.Append(((float)data.myDouble).ToString());

            case MySqlDataType.TINY:
            case MySqlDataType.SHORT:
            case MySqlDataType.LONG:
            case MySqlDataType.INT24:
            case MySqlDataType.YEAR:
                return(data.myInt32);

            //stbuilder.Append(data.myInt32.ToString());

            case MySqlDataType.LONGLONG:
                return(data.myInt64);

            //stbuilder.Append(data.myInt64.ToString());

            case MySqlDataType.DECIMAL:
                //stbuilder.Append(data.myDecimal.ToString());
                return(data.myDecimal);

            default:
                throw new NotSupportedException();
            }
        }
 internal bool TryGetData(string key, out MyStructData data)
 {
     return(_values.TryGetValue(key, out data));
 }