Exemplo n.º 1
0
 /*
  * internal CUBRIDDataReader(CUBRIDCommand stmt, int handle, int count, ColumnMetaData[] columnInfos)
  * {
  * this.stmt = stmt;
  * conn = (CUBRIDConnection)stmt.Connection;
  * this.handle = handle;
  * resultCount = count;
  * columnMetaData = columnInfos;
  * currentRow = 0;
  * resultTuple = new ResultTuple(columnInfos.Length);
  * commandBehavior = CommandBehavior.Default;
  * InitColumnTypeName();
  * }
  */
 internal CUBRIDDataReader(CUBRIDCommand stmt, int handle, int count, ColumnMetaData[] columnInfos, int tupleCount)
 {
     this.stmt       = stmt;
     conn            = (CUBRIDConnection)stmt.Connection;
     this.handle     = handle;
     resultCount     = count;
     columnMetaData  = columnInfos;
     currentRow      = 0;
     this.tupleCount = tupleCount;
     resultTuple     = new ResultTuple(columnInfos.Length);
     commandBehavior = CommandBehavior.Default;
     InitColumnTypeName();
 }
Exemplo n.º 2
0
        /// <summary>
        ///   Advances the reader to the next result when reading the results of a batch of statements.
        /// </summary>
        /// <returns> true if there are more result sets; otherwise false. </returns>
        public override bool NextResult()
        {
            if (isClosed)
            {
                throw new CUBRIDException(Utils.GetStr(MsgId.InvalidAttemptToReadDataWhenReaderNotOpen));
            }

            T_CCI_ERROR err  = new T_CCI_ERROR();
            bool        bRet = false;

            resultCount = CciInterface.cci_next_result(handle, ref err);
            if (resultCount >= 0)
            {
                columnMetaData  = CciInterface.cci_get_result_info(conn, handle);
                currentRow      = 0;
                resultTuple     = new ResultTuple(columnMetaData.Length);
                commandBehavior = CommandBehavior.Default;
                bRet            = true;
            }

            return(bRet);
        }
Exemplo n.º 3
0
 public static int cci_get_data(ResultTuple rt, int req_handle, int col_no, int type,CUBRIDConnection conn)
 {
     IntPtr value = IntPtr.Zero;
     int indicator = 0, res=0;
     switch ((CUBRIDDataType)type)
     {
         case CUBRIDDataType.CCI_U_TYPE_BLOB:
             res = cci_get_data(req_handle, col_no, (int)T_CCI_A_TYPE.CCI_A_TYPE_BLOB, ref value, ref indicator);
             CUBRIDBlob blob = new CUBRIDBlob(value,conn);
             rt[col_no - 1] = blob;
             break;
         case CUBRIDDataType.CCI_U_TYPE_CLOB:
             res = cci_get_data(req_handle, col_no, (int)T_CCI_A_TYPE.CCI_A_TYPE_CLOB, ref value, ref indicator);
             CUBRIDClob clob = new CUBRIDClob(value,conn);
             rt[col_no - 1] = clob;
             break;
         case CUBRIDDataType.CCI_U_TYPE_INT:             
             res = cci_get_data(req_handle, col_no, (int)T_CCI_A_TYPE.CCI_A_TYPE_STR, ref value, ref indicator);
             if (Marshal.PtrToStringAnsi(value) == null)
             {
                 rt[col_no - 1] = null;
             }
             else
             {
                 rt[col_no - 1] = Convert.ToInt32(Marshal.PtrToStringAnsi(value));
             }
             if (is_collection_type((CUBRIDDataType)type))
             {
                 rt.toArray(col_no - 1);
             }
             break;
         case CUBRIDDataType.CCI_U_TYPE_BIGINT:
             res = cci_get_data(req_handle, col_no, (int)T_CCI_A_TYPE.CCI_A_TYPE_STR, ref value, ref indicator);
             rt[col_no - 1] = Convert.ToInt64(Marshal.PtrToStringAnsi(value));
             if (is_collection_type((CUBRIDDataType)type))
             {
                 rt.toArray(col_no - 1);
             }
             break;
         case CUBRIDDataType.CCI_U_TYPE_OBJECT:
             res = cci_get_data(req_handle, col_no, (int)T_CCI_A_TYPE.CCI_A_TYPE_STR, ref value, ref indicator);
             string oid = Marshal.PtrToStringAnsi(value);
             rt[col_no - 1] = new CUBRIDOid(oid);
             break;
         case CUBRIDDataType.CCI_U_TYPE_BIT:             
             T_CCI_BIT bit = new T_CCI_BIT();
             res = cci_get_data(req_handle, col_no, (int)T_CCI_A_TYPE.CCI_A_TYPE_BIT, ref bit, ref indicator);
             byte[] data = conn.GetEncoding().GetBytes(Marshal.PtrToStringAnsi(bit.buf));
             rt[col_no - 1] = new byte[bit.size];
             Array.Copy(data,(byte[])rt[col_no - 1] ,bit.size);
             break;
         default:
             res = cci_get_data(req_handle, col_no, (int)T_CCI_A_TYPE.CCI_A_TYPE_STR, ref value, ref indicator);
             if (value != IntPtr.Zero)
             {
                 if (conn.GetEncoding().Equals(Encoding.UTF8))
                 {
                     Byte[] v = Encoding.Unicode.GetBytes(Marshal.PtrToStringUni(value));
                     int count = 0;
                     while (count < v.Length && v[count] != 0)
                     {
                         count++;
                     }
                     rt[col_no - 1] = Encoding.Unicode.GetString(Encoding.Convert(Encoding.UTF8, Encoding.Unicode, v, 0, count));
                 }
                 else
                 {
                     rt[col_no - 1] = Marshal.PtrToStringAnsi(value);
                 }
             }
             else {
                 rt[col_no - 1] = String.Empty;
             }
             if (is_collection_type((CUBRIDDataType)type))
             {
                 rt.toArray(col_no - 1);
             }
           break;
     }
     return res;
 }
Exemplo n.º 4
0
        public static int cci_get_data(ResultTuple rt, int req_handle, int col_no, int type, CUBRIDConnection conn)
        {
            IntPtr value = IntPtr.Zero;
            int    indicator = 0, res = 0;

            switch ((CUBRIDDataType)type)
            {
            case CUBRIDDataType.CCI_U_TYPE_BLOB:
                res = cci_get_data(req_handle, col_no, (int)T_CCI_A_TYPE.CCI_A_TYPE_BLOB, ref value, ref indicator);
                CUBRIDBlob blob = new CUBRIDBlob(value, conn);
                rt[col_no - 1] = blob;
                break;

            case CUBRIDDataType.CCI_U_TYPE_CLOB:
                res = cci_get_data(req_handle, col_no, (int)T_CCI_A_TYPE.CCI_A_TYPE_CLOB, ref value, ref indicator);
                CUBRIDClob clob = new CUBRIDClob(value, conn);
                rt[col_no - 1] = clob;
                break;

            case CUBRIDDataType.CCI_U_TYPE_INT:
                res = cci_get_data(req_handle, col_no, (int)T_CCI_A_TYPE.CCI_A_TYPE_STR, ref value, ref indicator);
                if (Marshal.PtrToStringAnsi(value) == null)
                {
                    rt[col_no - 1] = null;
                }
                else
                {
                    rt[col_no - 1] = Convert.ToInt32(Marshal.PtrToStringAnsi(value));
                }
                if (is_collection_type((CUBRIDDataType)type))
                {
                    rt.toArray(col_no - 1);
                }
                break;

            case CUBRIDDataType.CCI_U_TYPE_BIGINT:
                res            = cci_get_data(req_handle, col_no, (int)T_CCI_A_TYPE.CCI_A_TYPE_STR, ref value, ref indicator);
                rt[col_no - 1] = Convert.ToInt64(Marshal.PtrToStringAnsi(value));
                if (is_collection_type((CUBRIDDataType)type))
                {
                    rt.toArray(col_no - 1);
                }
                break;

            case CUBRIDDataType.CCI_U_TYPE_OBJECT:
                res = cci_get_data(req_handle, col_no, (int)T_CCI_A_TYPE.CCI_A_TYPE_STR, ref value, ref indicator);
                string oid = Marshal.PtrToStringAnsi(value);
                rt[col_no - 1] = new CUBRIDOid(oid);
                break;

            case CUBRIDDataType.CCI_U_TYPE_BIT:
                T_CCI_BIT bit = new T_CCI_BIT();
                res = cci_get_data(req_handle, col_no, (int)T_CCI_A_TYPE.CCI_A_TYPE_BIT, ref bit, ref indicator);
                byte[] data = new byte[bit.size];
                for (int i = 0; i < bit.size; i++)
                {
                    data[i] = Marshal.ReadByte(bit.buf, i);
                }
                rt[col_no - 1] = new byte[bit.size];
                Array.Copy(data, (byte[])rt[col_no - 1], bit.size);
                break;

            default:
                res = cci_get_data(req_handle, col_no, (int)T_CCI_A_TYPE.CCI_A_TYPE_STR, ref value, ref indicator);
                if (value != IntPtr.Zero)
                {
                    if (conn.GetEncoding().Equals(Encoding.UTF8))
                    {
                        Byte[] v     = Encoding.Unicode.GetBytes(Marshal.PtrToStringUni(value));
                        int    count = 0;
                        while (count < v.Length && v[count] != 0)
                        {
                            count++;
                        }

                        if ((CUBRIDDataType)type == CUBRIDDataType.CCI_U_TYPE_VARBIT)
                        {
                            rt[col_no - 1] = Enumerable.Range(0, count)
                                             .Where(x => x % 2 == 0)
                                             .Select(x => Convert.ToByte(Marshal.PtrToStringAnsi(value).Substring(x, 2), 16))
                                             .ToArray();
                        }
                        else
                        {
                            rt[col_no - 1] = Encoding.Unicode.GetString(Encoding.Convert(Encoding.UTF8, Encoding.Unicode, v, 0, count));
                        }
                    }
                    else
                    {
                        rt[col_no - 1] = Marshal.PtrToStringAnsi(value);
                    }
                }
                else
                {
                    rt[col_no - 1] = null;     // String.Empty;
                }
                if (is_collection_type((CUBRIDDataType)type))
                {
                    rt.toArray(col_no - 1);
                }
                break;
            }
            return(res);
        }
Exemplo n.º 5
0
    /// <summary>
    ///   Advances the reader to the next result when reading the results of a batch of statements.
    /// </summary>
    /// <returns> true if there are more result sets; otherwise false. </returns>
    public override bool NextResult()
    {
      if (isClosed)
      {
        throw new CUBRIDException(Utils.GetStr(MsgId.InvalidAttemptToReadDataWhenReaderNotOpen));
      }

      T_CCI_ERROR err = new T_CCI_ERROR();
      bool bRet = false;
      resultCount = CciInterface.cci_next_result(handle, ref err);
      if (resultCount >= 0)
      {
          columnMetaData = CciInterface.cci_get_result_info(handle);
          currentRow = 0;
          resultTuple = new ResultTuple(columnMetaData.Length);
          commandBehavior = CommandBehavior.Default;
          bRet = true;
      }

      return bRet;
    }
Exemplo n.º 6
0
 /*
 internal CUBRIDDataReader(CUBRIDCommand stmt, int handle, int count, ColumnMetaData[] columnInfos)
 {
   this.stmt = stmt;
   conn = (CUBRIDConnection)stmt.Connection;
   this.handle = handle;
   resultCount = count;
   columnMetaData = columnInfos;
   currentRow = 0;
   resultTuple = new ResultTuple(columnInfos.Length);
   commandBehavior = CommandBehavior.Default;
   InitColumnTypeName();
 }
 */
 internal CUBRIDDataReader(CUBRIDCommand stmt, int handle, int count, ColumnMetaData[] columnInfos, int tupleCount)
 {
   this.stmt = stmt;
   conn = (CUBRIDConnection)stmt.Connection;
   this.handle = handle;
   resultCount = count;
   columnMetaData = columnInfos;
   currentRow = 0;
   this.tupleCount = tupleCount;
   resultTuple = new ResultTuple(columnInfos.Length);
   commandBehavior = CommandBehavior.Default;
   InitColumnTypeName();
 }