/* * 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(); }
/// <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); }
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; }
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); }
/// <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; }
/* 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(); }