Changeset 86

Show
Ignore:
Timestamp:
02/12/08 22:19:52 (10 months ago)
Author:
aaronc542
Message:

Added optional allocator delegate (should it be a delegate or function?) to fetch method in IPreparedStatement and Mysql implementation.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/dbi/PreparedStatement.d

    r82 r86  
    2525    void execute(); 
    2626    void execute(void*[] bind); 
    27     bool fetch(void*[] bind); 
     27    bool fetch(void*[] bind, void* delegate(size_t) allocator = null); 
    2828    void prefetchAll(); 
    2929    void reset(); 
  • trunk/dbi/mysql/MysqlPreparedStatement.d

    r85 r86  
    236236    } 
    237237     
    238     bool fetch(void*[] bind
     238    bool fetch(void*[] bind, void* delegate(size_t) allocator = null
    239239    { 
    240240        if(!bind || !resBind) throw new DBIException("Attempting to fetch from a statement without having set parameters types or passed a valid bind array."); 
     
    255255                resHelper.len[i] = 256; 
    256256                resBind[i].buffer = (*arr).ptr;*/ 
    257                 ubyte[] buf; 
    258                 buf.length = 255
     257                /*ubyte[] buf; 
     258                buf.length = 0
    259259                resHelper.buffer[i] = buf; 
    260260                resBind[i].buffer = buf.ptr; 
    261                 resBind[i].buffer_length = 255; 
    262                 resHelper.len[i] = 255; 
     261                resBind[i].buffer_length = 0; 
     262                resHelper.len[i] = 0;*/ 
     263                ubyte[]* arr = cast(ubyte[]*)(bind[i]); 
     264                resHelper.buffer[i] = *arr; 
     265                resBind[i].buffer_length = arr.length; 
     266                resHelper.len[i] = 0; 
     267                resBind[i].buffer = arr.ptr; 
    263268                break; 
    264269            case(MYSQL_TYPE_DATETIME): 
     
    333338                 
    334339                if(resBind[i].error) { 
    335                     buf.length = l; 
     340                    if(allocator) { 
     341                        ubyte* ptr = cast(ubyte*)allocator(l); 
     342                        buf = ptr[0 .. l]; 
     343                    } 
     344                    else { 
     345                        buf = new ubyte[l]; 
     346                    } 
    336347                    resBind[i].buffer_length = l; 
    337348                    resBind[i].buffer = buf.ptr;