Ejemplo n.º 1
0
 internal unsafe static IntPtr SetColumn(int var_type,
                                         IntPtr var_ptr, int len, string column_name,
                                         int statement, IntPtr data_ptr,
                                         void *user_data)
 {
     CLI.UnmanagedBuffer *buffer = (CLI.UnmanagedBuffer *)user_data;
     if (var_type == (int)CLI.FieldType.cli_asciiz || var_type == (int)CLI.FieldType.cli_pasciiz)
     {
         SetBufferTypeAndSize(buffer, (CLI.FieldType)var_type, len, true);
         return(buffer->data);
     }
     else if (CLI.IsArrayType((CLI.FieldType)var_type))
     {
         if (buffer->fetch_data)
         {
             SetBufferTypeAndSize(buffer, (CLI.FieldType)var_type,
                                  len * CLI.SizeOfCliType[(int)var_type - (int)CLI.FieldType.cli_array_of_oid], true);
             return(buffer->data);
         }
         else
         {
             return(IntPtr.Zero); // FastDB won't fetch a field if we return nil
         }
     }
     else // sanity check
     {
         throw new CliError("Unsupported type: " + Enum.GetName(typeof(CLI.FieldType), buffer->type));
     }
 }
Ejemplo n.º 2
0
        protected unsafe static void SetBufferTypeAndSize(CLI.UnmanagedBuffer *buf,
                                                          CLI.FieldType NewType, int NewSize, bool TypeCheck)
        {
            int n;

            if (!TypeCheck || CLI.IsArrayType(NewType))
            {
                n = NewSize;
            }
            else if (NewType == CLI.FieldType.cli_asciiz || NewType == CLI.FieldType.cli_pasciiz)
            {
                n = NewSize + 1;
            }
            else
            {
                n = CLI.SizeOfCliType[(int)NewType];
            }

            if (n > buf->capacity)
            {
                buf->data     = Marshal.ReAllocCoTaskMem(buf->data, ALIGN(n));
                buf->capacity = n;
            }

            buf->size = n;

            if (buf->type != (int)NewType)
            {
                buf->type = (int)NewType;
            }
        }
Ejemplo n.º 3
0
        internal unsafe static IntPtr GetColumn(int var_type, IntPtr var_ptr, ref int len,
                                                string column_name, int statement,
                                                void *user_data)
        {
            CLI.UnmanagedBuffer *buffer = (CLI.UnmanagedBuffer *)user_data;
            if (CLI.IsArrayType((CLI.FieldType)var_type))
            {
                len = buffer->size / CLI.SizeOfCliType[var_type - (int)CLI.FieldType.cli_array_of_oid];
            }
            else if (var_type == (int)CLI.FieldType.cli_asciiz || var_type == (int)CLI.FieldType.cli_pasciiz)
            {
                len = buffer->size - 1;
            }
            else
            {
                len = buffer->size;
            }

            return(buffer->data);
        }