Annotation of embedaddon/php/ext/oci8/tests/refcur_prefetch_2.phpt, revision 1.1.1.1

1.1       misho       1: --TEST--
                      2: Prefetch with REF cursor. Test No 2
                      3: --SKIPIF--
                      4: <?php if (!extension_loaded('oci8')) die("skip no oci8 extension");
                      5: if (!extension_loaded('oci8')) die("skip no oci8 extension");
                      6: require(dirname(__FILE__)."/connect.inc");
                      7: if (preg_match('/Release 1[012]\./', oci_server_version($c), $matches) !== 1) {
                      8:        die("skip expected output only valid when using Oracle 10g or greater databases");
                      9: } else if (preg_match('/^(11\.2|12)\./', oci_client_version()) != 1) {
                     10:     die("skip test expected to work only with Oracle 11gR2 or greater version of client");
                     11: }
                     12: ?>
                     13: --FILE--
                     14: <?php
                     15: require dirname(__FILE__)."/connect.inc";
                     16: 
                     17: // Creates the necessary package and tables. 
                     18: $stmtarray = array(
                     19:           "DROP TABLE refcurtest",
                     20:           "CREATE TABLE refcurtest (c1 NUMBER, c2 VARCHAR(20))",
                     21:            "CREATE or REPLACE PACKAGE refcurpkg is
                     22:            type refcursortype is ref cursor;
                     23:            procedure open_ref_cur(cur1 out refcursortype);
                     24:            procedure fetch_ref_cur(cur1 in refcursortype, c1 out number,c2 out varchar2);
                     25:            end refcurpkg;",
                     26:           "CREATE or REPLACE PACKAGE body refcurpkg is
                     27:            procedure open_ref_cur(cur1 out refcursortype) is
                     28:               begin
                     29:                open cur1 for select * from refcurtest order by c1;
                     30:              end open_ref_cur;
                     31:             procedure fetch_ref_cur(cur1 in refcursortype, c1 out number,
                     32:                c2 out varchar2) is
                     33:              begin
                     34:                fetch cur1 into c1,c2;
                     35:            end fetch_ref_cur;
                     36:          end refcurpkg;"
                     37:        );
                     38: 
                     39: oci8_test_sql_execute($c, $stmtarray);
                     40: 
                     41: // Insert 500 rows into the table.
                     42: $insert_sql = "INSERT INTO refcurtest (c1, c2) VALUES (:c1,:c2)";
                     43: if (!($s = oci_parse($c, $insert_sql))) {
                     44:     die("oci_parse(insert) failed!\n");
                     45: }
                     46: 
                     47: for ($i = 0; $i <= 500; $i++) {
                     48:     $val2 = 'test'.$i;
                     49:     oci_bind_by_name($s,':c1',$i);
                     50:     oci_bind_by_name($s,':c2',$val2);
                     51:     if (!oci_execute($s)) {
                     52:         die("oci_execute(insert) failed!\n");
                     53:     }
                     54: }
                     55: 
                     56: // Steps to Fetch from PHP . For every sub-test,the cursor is bound and then executed.
                     57: 
                     58: $sql1 = "begin refcurpkg.open_ref_cur(:cur1); end;";
                     59: $s1 = oci_parse($c,$sql1);
                     60: $cur1 = oci_new_cursor($c);
                     61: if (!oci_bind_by_name($s1,":cur1",$cur1,-1,SQLT_RSET)) {
                     62:     die("oci_bind_by_name(sql1) failed!\n");
                     63: }
                     64: 
                     65: 
                     66: // Steps to Fetch from PL/SQL . For every sub-test,the cursor is bound and then executed.
                     67: 
                     68: $sql2 = "begin refcurpkg.fetch_ref_cur(:curs1,:c1,:c2); end;";
                     69: $s2 = oci_parse($c,$sql2);
                     70: if (!oci_bind_by_name($s2, ":curs1", $cur1, -1, SQLT_RSET)) {
                     71:     die("oci_bind_by_name(sql2) failed!\n");
                     72: }
                     73: if (!oci_bind_by_name($s2, ":c1", $c1, -1, SQLT_INT)) {
                     74:     die("oci_bind_by_name(sql2) failed!\n");
                     75: }
                     76: if (!oci_bind_by_name($s2, ":c2", $c2, 20, SQLT_CHR)) {
                     77:     die("oci_bind_by_name(sql2) failed!\n");
                     78: }
                     79: 
                     80: 
                     81: echo "------Test 1- Check Roundtrips with  prefetch 0 and 5 -----------\n";
                     82: oci_execute($s1);
                     83: oci_execute($cur1);
                     84: $initial_rt = print_roundtrips($c);
                     85: oci_set_prefetch($cur1,0);
                     86: for ($i = 0;$i<5;$i++) {
                     87:     var_dump(oci_fetch_row($cur1));
                     88: }
                     89: 
                     90: $cnt = (print_roundtrips($c) - $initial_rt);
                     91: echo "Number of roundtrips made with prefetch count 0 for 5 rows is  $cnt\n";
                     92: 
                     93: $initial_rt = print_roundtrips($c);
                     94: oci_set_prefetch($cur1,5);
                     95: for ($i = 0;$i<5;$i++) {
                     96:     var_dump(oci_fetch_row($cur1));
                     97: }
                     98: 
                     99: $cnt = (print_roundtrips($c) - $initial_rt );
                    100: echo "Number of roundtrips made with prefetch count 5 for 5 rows is  $cnt\n";
                    101: 
                    102: echo "------Test 2 - Set Prefetch before PL/SQL fetch ----------\n";
                    103: // Fetch from PHP
                    104: $cur1 = oci_new_cursor($c);
                    105: if (!oci_bind_by_name($s1,":cur1",$cur1,-1,SQLT_RSET)) {
                    106:     die("oci_bind_by_name(sql1) failed!\n");
                    107: }
                    108: 
                    109: echo "Fetch Row from PHP\n";
                    110: oci_execute($s1);
                    111: oci_execute($cur1);
                    112: var_dump(oci_fetch_row($cur1));
                    113: oci_set_prefetch($cur1,5);
                    114: 
                    115: // Fetch from PL/SQL 
                    116: if (!oci_bind_by_name($s2,":curs1",$cur1,-1,SQLT_RSET)) {
                    117:     die("oci_bind_by_name(sql2) failed!\n");
                    118: }
                    119: oci_execute($s2);
                    120: echo "Fetch Row from PL/SQL\n";
                    121: var_dump($c1);
                    122: var_dump($c2);
                    123: 
                    124: function  print_roundtrips($c) {
                    125:     $sql_stmt = "select value from v\$mystat a,v\$statname c where
                    126:         a.statistic#=c.statistic# and c.name='SQL*Net roundtrips to/from client'";
                    127:     $s = oci_parse($c,$sql_stmt);
                    128:     oci_define_by_name($s,"VALUE",$value);
                    129:     oci_execute($s);
                    130:     oci_fetch($s);
                    131:     return $value;
                    132: }
                    133: 
                    134: // Clean up  here
                    135: 
                    136: $stmtarray = array(
                    137:     "drop package refcurpkg",
                    138:     "drop table refcurtest"
                    139: );
                    140: 
                    141: oci8_test_sql_execute($c, $stmtarray);
                    142: 
                    143: echo "Done\n";
                    144: ?>
                    145: --EXPECTF--
                    146: ------Test 1- Check Roundtrips with  prefetch 0 and 5 -----------
                    147: array(2) {
                    148:   [0]=>
                    149:   string(1) "0"
                    150:   [1]=>
                    151:   string(5) "test0"
                    152: }
                    153: array(2) {
                    154:   [0]=>
                    155:   string(1) "1"
                    156:   [1]=>
                    157:   string(5) "test1"
                    158: }
                    159: array(2) {
                    160:   [0]=>
                    161:   string(1) "2"
                    162:   [1]=>
                    163:   string(5) "test2"
                    164: }
                    165: array(2) {
                    166:   [0]=>
                    167:   string(1) "3"
                    168:   [1]=>
                    169:   string(5) "test3"
                    170: }
                    171: array(2) {
                    172:   [0]=>
                    173:   string(1) "4"
                    174:   [1]=>
                    175:   string(5) "test4"
                    176: }
                    177: Number of roundtrips made with prefetch count 0 for 5 rows is  6
                    178: array(2) {
                    179:   [0]=>
                    180:   string(1) "5"
                    181:   [1]=>
                    182:   string(5) "test5"
                    183: }
                    184: array(2) {
                    185:   [0]=>
                    186:   string(1) "6"
                    187:   [1]=>
                    188:   string(5) "test6"
                    189: }
                    190: array(2) {
                    191:   [0]=>
                    192:   string(1) "7"
                    193:   [1]=>
                    194:   string(5) "test7"
                    195: }
                    196: array(2) {
                    197:   [0]=>
                    198:   string(1) "8"
                    199:   [1]=>
                    200:   string(5) "test8"
                    201: }
                    202: array(2) {
                    203:   [0]=>
                    204:   string(1) "9"
                    205:   [1]=>
                    206:   string(5) "test9"
                    207: }
                    208: Number of roundtrips made with prefetch count 5 for 5 rows is  2
                    209: ------Test 2 - Set Prefetch before PL/SQL fetch ----------
                    210: Fetch Row from PHP
                    211: array(2) {
                    212:   [0]=>
                    213:   string(1) "0"
                    214:   [1]=>
                    215:   string(5) "test0"
                    216: }
                    217: Fetch Row from PL/SQL
                    218: int(101)
                    219: string(%d) "test101"
                    220: Done

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>