@@ -37,6 +37,7 @@ const dbConfig = require('./dbconfig.js');
3737const fs = require ( 'fs' ) ;
3838const fsPromises = require ( 'fs/promises' ) ;
3939const random = require ( './random.js' ) ;
40+ const { Readable } = require ( 'stream' ) ;
4041
4142describe ( '80. lobBindAsStringBuffer.js' , function ( ) {
4243 let connection ;
@@ -486,6 +487,57 @@ describe('80. lobBindAsStringBuffer.js', function() {
486487 assert . strictEqual ( result . outBinds . blob . toString ( 'utf8' , ( resultLength2 - specStrLength ) , resultLength2 ) , specialStr ) ;
487488 } ) ; // 80.3.2
488489
490+ it ( '80.3.3 PLSQL, BIND_INOUT, bind a 32K string using temp lob and a 32K buffer' , async function ( ) {
491+ const specialStr = "80.3.3" ;
492+ const size = 32768 ;
493+ const bigStr = random . getRandomString ( size , specialStr ) ;
494+ const clob = await connection . createLob ( oracledb . CLOB ) ;
495+ const inStream = Readable . from ( [ bigStr ] ) ;
496+ inStream . pipe ( clob ) ;
497+ await new Promise ( ( resolve , reject ) => {
498+ inStream . on ( "error" , reject ) ;
499+ clob . on ( "error" , reject ) ;
500+ clob . on ( "finish" , resolve ) ;
501+ } ) ;
502+ const bufferStr = Buffer . from ( bigStr , "utf-8" ) ;
503+ const blob = await connection . createLob ( oracledb . CLOB ) ;
504+ const inStream2 = Readable . from ( [ bufferStr ] ) ;
505+ inStream2 . pipe ( blob ) ;
506+ await new Promise ( ( resolve , reject ) => {
507+ inStream . on ( "error" , reject ) ;
508+ blob . on ( "error" , reject ) ;
509+ blob . on ( "finish" , resolve ) ;
510+ } ) ;
511+
512+ const bindVar = {
513+ clob : { dir : oracledb . BIND_INOUT , type : oracledb . CLOB , val : clob } ,
514+ blob : { dir : oracledb . BIND_INOUT , type : oracledb . BUFFER , val : bufferStr ,
515+ maxSize : size }
516+ } ;
517+ const result = await connection . execute ( sqlRun , bindVar ) ;
518+ const cloboutstr = await result . outBinds . clob . getData ( ) ;
519+ const specStrLength = specialStr . length ;
520+ const resultLength1 = result . outBinds . clob . length ;
521+ assert . strictEqual ( resultLength1 , size ) ;
522+ assert . strictEqual ( cloboutstr . substring ( 0 , specStrLength ) , specialStr ) ;
523+ assert . strictEqual ( cloboutstr . substring ( resultLength1 - specStrLength ,
524+ resultLength1 ) , specialStr ) ;
525+ const resultLength2 = result . outBinds . blob . length ;
526+ assert . strictEqual ( resultLength2 , size ) ;
527+ assert . strictEqual ( result . outBinds . blob . toString ( 'utf8' ,
528+ 0 , specStrLength ) , specialStr ) ;
529+ assert . strictEqual ( result . outBinds . blob . toString ( 'utf8' ,
530+ ( resultLength2 - specStrLength ) , resultLength2 ) , specialStr ) ;
531+ await new Promise ( ( resolve ) => {
532+ clob . once ( 'close' , resolve ) ;
533+ clob . destroy ( ) ;
534+ } ) ;
535+ await new Promise ( ( resolve ) => {
536+ blob . once ( 'close' , resolve ) ;
537+ blob . destroy ( ) ;
538+ } ) ;
539+ } ) ; // 80.3.3
540+
489541 } ) ; // 80.3
490542
491543} ) ;
0 commit comments