** Load a value of type eType from buffer pData and use it to set the ** result of context object pCtx. */
| 10745 | ** result of context object pCtx. |
| 10746 | */ |
| 10747 | static void dbdataValue( |
| 10748 | sqlite3_context *pCtx, |
| 10749 | int eType, |
| 10750 | u8 *pData, |
| 10751 | int nData |
| 10752 | ){ |
| 10753 | if( eType>=0 && dbdataValueBytes(eType)<=nData ){ |
| 10754 | switch( eType ){ |
| 10755 | case 0: |
| 10756 | case 10: |
| 10757 | case 11: |
| 10758 | sqlite3_result_null(pCtx); |
| 10759 | break; |
| 10760 | |
| 10761 | case 8: |
| 10762 | sqlite3_result_int(pCtx, 0); |
| 10763 | break; |
| 10764 | case 9: |
| 10765 | sqlite3_result_int(pCtx, 1); |
| 10766 | break; |
| 10767 | |
| 10768 | case 1: case 2: case 3: case 4: case 5: case 6: case 7: { |
| 10769 | sqlite3_uint64 v = (signed char)pData[0]; |
| 10770 | pData++; |
| 10771 | switch( eType ){ |
| 10772 | case 7: |
| 10773 | case 6: v = (v<<16) + (pData[0]<<8) + pData[1]; pData += 2; |
| 10774 | case 5: v = (v<<16) + (pData[0]<<8) + pData[1]; pData += 2; |
| 10775 | case 4: v = (v<<8) + pData[0]; pData++; |
| 10776 | case 3: v = (v<<8) + pData[0]; pData++; |
| 10777 | case 2: v = (v<<8) + pData[0]; pData++; |
| 10778 | } |
| 10779 | |
| 10780 | if( eType==7 ){ |
| 10781 | double r; |
| 10782 | memcpy(&r, &v, sizeof(r)); |
| 10783 | sqlite3_result_double(pCtx, r); |
| 10784 | }else{ |
| 10785 | sqlite3_result_int64(pCtx, (sqlite3_int64)v); |
| 10786 | } |
| 10787 | break; |
| 10788 | } |
| 10789 | |
| 10790 | default: { |
| 10791 | int n = ((eType-12) / 2); |
| 10792 | if( eType % 2 ){ |
| 10793 | sqlite3_result_text(pCtx, (const char*)pData, n, SQLITE_TRANSIENT); |
| 10794 | }else{ |
| 10795 | sqlite3_result_blob(pCtx, pData, n, SQLITE_TRANSIENT); |
| 10796 | } |
| 10797 | } |
| 10798 | } |
| 10799 | } |
| 10800 | } |
| 10801 | |
| 10802 | /* |
| 10803 | ** Move an sqlite_dbdata or sqlite_dbptr cursor to the next entry. |
no test coverage detected