📄 dirpath_8c-source.html
字号:
<a name="l00594"></a>00594 <a name="l00595"></a>00595 <span class="comment">/* data flags */</span><a name="l00596"></a>00596 <a name="l00597"></a>00597 col->flags = (ub1 *) OCI_MemAlloc(OCI_IPC_BUFF_ARRAY, <span class="keyword">sizeof</span>(ub1),<a name="l00598"></a>00598 dp-><a class="code" href="struct_o_c_i___dir_path.html#92069eb0d3771d051e6b87b541e34b59">nb_cur</a>, TRUE);<a name="l00599"></a>00599 <a name="l00600"></a>00600 <span class="keywordflow">if</span> (col->flags == NULL)<a name="l00601"></a>00601 {<a name="l00602"></a>00602 res = FALSE;<a name="l00603"></a>00603 <span class="keywordflow">break</span>;<a name="l00604"></a>00604 }<a name="l00605"></a>00605 }<a name="l00606"></a>00606 }<a name="l00607"></a>00607 <a name="l00608"></a>00608 <span class="keywordflow">if</span> (res == TRUE)<a name="l00609"></a>00609 dp-><a class="code" href="struct_o_c_i___dir_path.html#87321b559b61441b55c192cc9b2f835b">status</a> = OCI_DPS_PREPARED;<a name="l00610"></a>00610 <a name="l00611"></a>00611 OCI_RESULT(res);<a name="l00612"></a>00612 <a name="l00613"></a>00613 <span class="keywordflow">return</span> res;<a name="l00614"></a>00614 }<a name="l00615"></a>00615 <a name="l00616"></a>00616 <span class="comment">/* ------------------------------------------------------------------------ *</span><a name="l00617"></a>00617 <span class="comment"> * OCI_DirPathSetEntry</span><a name="l00618"></a>00618 <span class="comment"> * ------------------------------------------------------------------------ */</span><a name="l00619"></a>00619 <a name="l00620"></a>00620 <span class="keywordtype">boolean</span> OCI_API <a class="code" href="group__g__dirpath.html#gaadd5e79891c24d0f9c99ed96e5fe608" title="Set the value of the given row/column array entry.">OCI_DirPathSetEntry</a>(<a class="code" href="struct_o_c_i___dir_path.html" title="OCILIB encapsulation of OCI Direct Path handle.">OCI_DirPath</a> *dp, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> row,<a name="l00621"></a>00621 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> index, <span class="keywordtype">void</span> *value,<a name="l00622"></a>00622 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> size, <span class="keywordtype">boolean</span> complete)<a name="l00623"></a>00623 {<a name="l00624"></a>00624 <span class="keywordtype">boolean</span> res = TRUE;<a name="l00625"></a>00625 OCI_DirPathColumn *dpcol = NULL;<a name="l00626"></a>00626 <a class="code" href="struct_o_c_i___column.html" title="Oracle SQL Column and Type member representation.">OCI_Column</a> *col = NULL;<a name="l00627"></a>00627 <a name="l00628"></a>00628 ub1 *data;<a name="l00629"></a>00629 ub1 flag;<a name="l00630"></a>00630 <a name="l00631"></a>00631 OCI_CHECK_PTR(OCI_IPC_DIRPATH, dp, FALSE);<a name="l00632"></a>00632 <a name="l00633"></a>00633 OCI_CHECK_DIRPATH_STATUS(dp, OCI_DPS_PREPARED, FALSE);<a name="l00634"></a>00634 OCI_CHECK_BOUND(dp-><a class="code" href="struct_o_c_i___dir_path.html#52410868a337ad04434b1e11859a471b">con</a>, index, 1, dp-><a class="code" href="struct_o_c_i___dir_path.html#15978bab1953802769c833b776a58bac">nb_cols</a>, FALSE);<a name="l00635"></a>00635 OCI_CHECK_BOUND(dp-><a class="code" href="struct_o_c_i___dir_path.html#52410868a337ad04434b1e11859a471b">con</a>, row, 1, dp-><a class="code" href="struct_o_c_i___dir_path.html#92069eb0d3771d051e6b87b541e34b59">nb_cur</a>, FALSE);<a name="l00636"></a>00636 <a name="l00637"></a>00637 dpcol = &dp-><a class="code" href="struct_o_c_i___dir_path.html#da8657a28338656329ec2d46e51370d6">cols</a>[index-1];<a name="l00638"></a>00638 col = &dp-><a class="code" href="struct_o_c_i___dir_path.html#6921631a0280d2da229139fa61625a81">typinf</a>-><a class="code" href="struct_o_c_i___type_info.html#30783a0a4a5d15db8f8bfe90250f18a7">cols</a>[dpcol->index];<a name="l00639"></a>00639 <a name="l00640"></a>00640 <span class="comment">/* check size */</span><a name="l00641"></a>00641 <a name="l00642"></a>00642 <span class="keywordflow">if</span> (size > dpcol->maxsize)<a name="l00643"></a>00643 size = (<span class="keywordtype">unsigned</span> int) dpcol->maxsize;<a name="l00644"></a>00644 <a name="l00645"></a>00645 <span class="comment">/* setup column flag */</span><a name="l00646"></a>00646 <a name="l00647"></a>00647 if (value == NULL)<a name="l00648"></a>00648 {<a name="l00649"></a>00649 flag = OCI_DIRPATH_COL_NULL;<a name="l00650"></a>00650 }<a name="l00651"></a>00651 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (complete == TRUE)<a name="l00652"></a>00652 {<a name="l00653"></a>00653 flag = OCI_DIRPATH_COL_COMPLETE;<a name="l00654"></a>00654 }<a name="l00655"></a>00655 <span class="keywordflow">else</span><a name="l00656"></a>00656 {<a name="l00657"></a>00657 flag = OCI_DIRPATH_COL_PARTIAL;<a name="l00658"></a>00658 }<a name="l00659"></a>00659 <a name="l00660"></a>00660 <span class="comment">/* for character based column, parameter size was the number of characters */</span><a name="l00661"></a>00661 <a name="l00662"></a>00662 <span class="keywordflow">if</span> (dpcol->sqlcode == SQLT_CHR)<a name="l00663"></a>00663 {<a name="l00664"></a>00664 size *= <span class="keyword">sizeof</span>(dtext);<a name="l00665"></a>00665 }<a name="l00666"></a>00666 <a name="l00667"></a>00667 <span class="comment">/* get internal data cell */</span><a name="l00668"></a>00668 <a name="l00669"></a>00669 data = ((ub1 *) dpcol->data) + ((row-1) * dpcol->bufsize);<a name="l00670"></a>00670 <a name="l00671"></a>00671 <span class="preprocessor">#if defined(OCI_CHECK_DATASTRINGS)</span><a name="l00672"></a>00672 <span class="preprocessor"></span><a name="l00673"></a>00673 <span class="comment">/* we weed to pack the buffer if wchar_t is 4 bytes */</span><a name="l00674"></a>00674 <a name="l00675"></a>00675 <span class="keywordflow">if</span> (dpcol->type == OCI_DDT_TEXT)<a name="l00676"></a>00676 {<a name="l00677"></a>00677 <span class="keywordtype">int</span> osize = -1;<a name="l00678"></a>00678 <a name="l00679"></a>00679 OCI_GetOutputString(value, data, &size, <span class="keyword">sizeof</span>(dtext), <span class="keyword">sizeof</span>(odtext));<a name="l00680"></a>00680 }<a name="l00681"></a>00681 <span class="keywordflow">else</span><a name="l00682"></a>00682 <span class="preprocessor">#endif</span><a name="l00683"></a>00683 <span class="preprocessor"></span><a name="l00684"></a>00684 <span class="preprocessor">#if defined(OCI_USERDATA_UNICODE)</span><a name="l00685"></a>00685 <span class="preprocessor"></span><a name="l00686"></a>00686 <span class="comment">/* input Unicode numeric values causes oracle conversion error.</span><a name="l00687"></a>00687 <span class="comment"> so, let's convert them to ansi */</span><a name="l00688"></a>00688 <a name="l00689"></a>00689 <span class="keywordflow">if</span> (dpcol->type == OCI_DDT_OTHERS)<a name="l00690"></a>00690 {<a name="l00691"></a>00691 size = (int) wcstombs((<span class="keywordtype">char</span> *) data, value, dpcol->bufsize - 1);<a name="l00692"></a>00692 }<a name="l00693"></a>00693 <span class="keywordflow">else</span><a name="l00694"></a>00694 <span class="preprocessor">#endif</span><a name="l00695"></a>00695 <span class="preprocessor"></span><a name="l00696"></a>00696 <span class="comment">/* if a format was provided for a numeric column, we convert the input</span><a name="l00697"></a>00697 <span class="comment"> buffer to a OCINumber */</span><a name="l00698"></a>00698 <a name="l00699"></a>00699 <span class="keywordflow">if</span> (dpcol->type == OCI_DDT_NUMBER)<a name="l00700"></a>00700 {<a name="l00701"></a>00701 OCINumber *num = (OCINumber *) data;<a name="l00702"></a>00702 <a name="l00703"></a>00703 res = OCI_NumberConvertStr(dp-><a class="code" href="struct_o_c_i___dir_path.html#52410868a337ad04434b1e11859a471b">con</a>, num, (dtext *) value, size,<a name="l00704"></a>00704 dpcol->format, dpcol->format_size);<a name="l00705"></a>00705 <a name="l00706"></a>00706 <span class="keywordflow">if</span> (res == TRUE)<a name="l00707"></a>00707 {<a name="l00708"></a>00708 size = (<span class="keywordtype">unsigned</span> int) num->OCINumberPart[0];<a name="l00709"></a>00709 }<a name="l00710"></a>00710 }<a name="l00711"></a>00711 <span class="keywordflow">else</span><a name="l00712"></a>00712 {<a name="l00713"></a>00713 <a name="l00714"></a>00714 <span class="preprocessor">#if defined(OCI_CHARSET_MIXED)</span><a name="l00715"></a>00715 <span class="preprocessor"></span><a name="l00716"></a>00716 <span class="comment">/* with mixed charset builds, OCIDirPrepare() causes a segfault if the</span><a name="l00717"></a>00717 <span class="comment"> attribute OCI_ATTR_CHARSET_ID has been set with OCI_UTF16.</span><a name="l00718"></a>00718 <span class="comment"> In the OCILIB direct path implementation, the code is the same for</span><a name="l00719"></a>00719 <span class="comment"> Unicode and mixed charset. This only difference is the</span><a name="l00720"></a>00720 <span class="comment"> environment mode set of UTF16...</span><a name="l00721"></a>00721 <span class="comment"> So let's convert the data back to ANSI until Oracle corrects this bug */</span><a name="l00722"></a>00722 <a name="l00723"></a>00723 <span class="keywordflow">if</span> (dpcol->type == OCI_DDT_TEXT)<a name="l00724"></a>00724 {<a name="l00725"></a>00725 size = (int) wcstombs((<span class="keywordtype">char</span> *) data, value, dpcol->bufsize - 1);<a name="l00726"></a>00726 }<a name="l00727"></a>00727 <span class="keywordflow">else</span><a name="l00728"></a>00728 <span class="preprocessor">#endif</span><a name="l00729"></a>00729 <span class="preprocessor"></span> {<a name="l00730"></a>00730 memcpy(data, value, size);<a name="l00731"></a>00731 }<a name="l00732"></a>00732 <a name="l00733"></a>00733 }<a name="l00734"></a>00734 <a name="l00735"></a>00735 dpcol->lens[row-1] = size;<a name="l00736"></a>00736 dpcol->flags[row-1] = flag;<a name="l00737"></a>00737 <a name="l00738"></a>00738 OCI_RESULT(res);<a name="l00739"></a>00739 <a name="l00740"></a>00740 <span class="keywordflow">return</span> res;<a name="l00741"></a>00741 }<a name="l00742"></a>00742 <a name="l00743"></a>00743 <span class="comment">/* ------------------------------------------------------------------------ *</span><a name="l00744"></a>00744
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -