Annotation of embedaddon/php/ext/oci8/tests/refcur_prefetch_2.phpt, revision 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>