2018-02-09 16:51:13 +08:00
/* Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved. */
2017-06-14 08:21:00 +08:00
/ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* You may not use the identified files except in compliance with the Apache
* License , Version 2.0 ( the "License." )
*
* You may obtain a copy of the License at
* http : //www.apache.org/licenses/LICENSE-2.0.
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an "AS IS" BASIS , WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
*
* See the License for the specific language governing permissions and
* limitations under the License .
*
* The node - oracledb test suite uses 'mocha' , 'should' and 'async' .
* See LICENSE . md for relevant licenses .
*
* NAME
* 107. rowidDMLBindAsString . js
*
* DESCRIPTION
* Testing rowid binding as String with DML .
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * /
'use strict' ;
var oracledb = require ( 'oracledb' ) ;
var should = require ( 'should' ) ;
var async = require ( 'async' ) ;
var dbConfig = require ( './dbconfig.js' ) ;
2017-06-14 08:53:11 +08:00
var sql = require ( './sql.js' ) ;
2017-06-14 08:21:00 +08:00
describe ( '107. rowidDMLBindAsString.js' , function ( ) {
var connection = null ;
var tableName = "nodb_bind_rowid" ;
var insertID = 1 ;
var proc _create _table = "BEGIN \n" +
2017-06-14 08:53:11 +08:00
" DECLARE \n" +
" e_table_missing EXCEPTION; \n" +
" PRAGMA EXCEPTION_INIT(e_table_missing, -00942);\n" +
2017-06-14 08:50:39 +08:00
" BEGIN \n" +
2017-06-14 08:53:11 +08:00
" EXECUTE IMMEDIATE ('DROP TABLE " + tableName + " PURGE' ); \n" +
2017-06-14 08:50:39 +08:00
" EXCEPTION \n" +
2017-06-14 08:53:11 +08:00
" WHEN e_table_missing \n" +
" THEN NULL; \n" +
2017-06-14 08:50:39 +08:00
" END; \n" +
" EXECUTE IMMEDIATE ( ' \n" +
2017-06-14 08:53:11 +08:00
" CREATE TABLE " + tableName + " ( \n" +
" ID NUMBER, \n" +
" content ROWID \n" +
" ) \n" +
" '); \n" +
2017-06-14 08:50:39 +08:00
"END; " ;
2017-06-14 08:21:00 +08:00
var drop _table = "DROP TABLE " + tableName + " PURGE" ;
before ( 'get connection and create table' , function ( done ) {
async . series ( [
function ( cb ) {
oracledb . getConnection ( dbConfig , function ( err , conn ) {
should . not . exist ( err ) ;
connection = conn ;
cb ( ) ;
} ) ;
} ,
function ( cb ) {
2017-06-14 08:53:11 +08:00
sql . executeSql ( connection , proc _create _table , { } , { } , cb ) ;
2017-06-14 08:21:00 +08:00
}
] , done ) ;
} ) ;
after ( 'release connection' , function ( done ) {
async . series ( [
function ( cb ) {
2017-06-14 08:53:11 +08:00
sql . executeSql ( connection , drop _table , { } , { } , cb ) ;
2017-06-14 08:21:00 +08:00
} ,
function ( cb ) {
connection . release ( function ( err ) {
should . not . exist ( err ) ;
cb ( ) ;
} ) ;
}
] , done ) ;
} ) ;
beforeEach ( function ( done ) {
insertID ++ ;
done ( ) ;
} ) ;
describe ( '107.1 INSERT & SELECT' , function ( ) {
2017-06-14 08:50:39 +08:00
it ( '107.1.1 works with null' , function ( done ) {
2017-06-14 08:21:00 +08:00
var content = null ;
var bindVar = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content , dir : oracledb . BIND _IN , type : oracledb . STRING }
} ;
dmlInsert ( bindVar , content , done ) ;
} ) ;
2017-06-14 08:50:39 +08:00
it ( '107.1.2 works with empty string' , function ( done ) {
2017-06-14 08:21:00 +08:00
var content = "" ;
var expected = null ;
var bindVar = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content , dir : oracledb . BIND _IN , type : oracledb . STRING }
} ;
dmlInsert ( bindVar , expected , done ) ;
} ) ;
it ( '107.1.3 works with extended rowid' , function ( done ) {
// Extended rowids use a base 64 encoding of the physical address for each row selected.
// The encoding characters are A-Z, a-z, 0-9, +, and /
var content = "AAABoqAADAAAAwPAAA" ;
var bindVar = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content , dir : oracledb . BIND _IN , type : oracledb . STRING }
} ;
dmlInsert ( bindVar , content , done ) ;
} ) ;
it ( '107.1.4 works with restricted rowid' , function ( done ) {
var content = "00000DD5.0000.0001" ;
var bindVar = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content , dir : oracledb . BIND _IN , type : oracledb . STRING }
} ;
dmlInsert ( bindVar , content , done ) ;
} ) ;
it ( '107.1.5 throws error with number 0' , function ( done ) {
var content = 0 ;
var sql _insert = "insert into " + tableName + "(id, content) values (:i, CHARTOROWID(:c))" ;
var bindVar = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content , dir : oracledb . BIND _IN , type : oracledb . STRING }
} ;
connection . execute (
sql _insert ,
bindVar ,
function ( err ) {
should . exist ( err ) ;
( err . message ) . should . equal ( "NJS-011: encountered bind value and type mismatch" ) ;
done ( ) ;
}
2017-06-14 08:22:07 +08:00
) ;
2017-06-14 08:21:00 +08:00
} ) ;
it ( '107.1.6 works with string 0' , function ( done ) {
var content = "0" ;
var expected = "00000000.0000.0000" ;
var bindVar = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content , dir : oracledb . BIND _IN , type : oracledb . STRING }
} ;
dmlInsert ( bindVar , expected , done ) ;
} ) ;
it ( '107.1.7 works with substr' , function ( done ) {
var content = "AAAA8+AALAAAAQ/AAA" ;
dmlInsert _substr ( content , done ) ;
} ) ;
2017-06-14 08:50:39 +08:00
it ( '107.1.8 bind null with default type/dir - named bind' , function ( done ) {
2017-06-14 08:21:00 +08:00
var content = null ;
var bindVar _1 = {
i : insertID ,
c : content
} ;
dmlInsert ( bindVar _1 , content , done ) ;
} ) ;
2017-06-14 08:50:39 +08:00
it ( '107.1.9 bind null with default type/dir - positional bind' , function ( done ) {
2017-06-14 08:21:00 +08:00
var content = null ;
var bindVar _1 = [ insertID , content ] ;
dmlInsert ( bindVar _1 , content , done ) ;
} ) ;
it ( '107.1.10 bind extented rowid with default type/dir - named bind' , function ( done ) {
var content = "AAAA8+AALAAAAQ/AAA" ;
var bindVar _1 = {
i : insertID ,
c : content
} ;
dmlInsert ( bindVar _1 , content , done ) ;
} ) ;
it ( '107.1.11 bind extented rowid with default type/dir - positional bind' , function ( done ) {
var content = "AAAA8+AALAAAAQ/AAA" ;
var bindVar _1 = [ insertID , content ] ;
dmlInsert ( bindVar _1 , content , done ) ;
} ) ;
2017-06-14 08:50:39 +08:00
it ( '107.1.12 works with undefined' , function ( done ) {
var content = undefined ;
var bindVar = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content , dir : oracledb . BIND _IN , type : oracledb . STRING }
} ;
dmlInsert ( bindVar , null , done ) ;
} ) ;
it ( '107.1.13 bind undefined with default type/dir - named bind' , function ( done ) {
var content = undefined ;
var bindVar _1 = {
i : insertID ,
c : content
} ;
dmlInsert ( bindVar _1 , null , done ) ;
} ) ;
it ( '107.1.14 bind undefined with default type/dir - positional bind' , function ( done ) {
var content = undefined ;
var bindVar _1 = [ insertID , content ] ;
dmlInsert ( bindVar _1 , null , done ) ;
} ) ;
it ( '107.1.15 works with NaN' , function ( done ) {
var content = NaN ;
var sql _insert = "insert into " + tableName + "(id, content) values (:i, CHARTOROWID(:c))" ;
var bindVar = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content , dir : oracledb . BIND _IN , type : oracledb . STRING }
} ;
connection . execute (
sql _insert ,
bindVar ,
function ( err ) {
should . exist ( err ) ;
( err . message ) . should . equal ( "NJS-011: encountered bind value and type mismatch" ) ;
done ( ) ;
}
) ;
} ) ;
2017-06-14 08:21:00 +08:00
} ) ;
describe ( '107.2 UPDATE' , function ( ) {
it ( '107.2.1 UPDATE null column' , function ( done ) {
var content _insert = null ;
var content _update = "AAABiqAADAAAAwPAAA" ;
dmlUpdate ( content _insert , content _update , content _update , done ) ;
} ) ;
it ( '107.2.1 UPDATE extented rowid with restricted rowid' , function ( done ) {
var content _insert = "AAABioAADAAAAwPAAA" ;
var content _update = "00000DD5.0010.0001" ;
dmlUpdate ( content _insert , content _update , content _update , done ) ;
} ) ;
2017-06-14 08:50:39 +08:00
it ( '107.2.3 UPDATE restricted rowid with null' , function ( done ) {
2017-06-14 08:21:00 +08:00
var content _insert = "00000DD5.0010.0002" ;
var content _update = null ;
dmlUpdate ( content _insert , content _update , content _update , done ) ;
} ) ;
} ) ;
describe ( '107.3 RETURNING INTO' , function ( ) {
2017-06-14 08:50:39 +08:00
it ( '107.3.1 INSERT null' , function ( done ) {
2017-06-14 08:21:00 +08:00
var content = null ;
var bindVar = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content , dir : oracledb . BIND _IN , type : oracledb . STRING } ,
o : { dir : oracledb . BIND _OUT , type : oracledb . STRING }
} ;
insert _returning ( bindVar , content , done ) ;
} ) ;
it ( '107.3.2 INSERT extented rowid' , function ( done ) {
var content = "AAAA++AALAAAAQ/AAA" ;
var bindVar = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content , dir : oracledb . BIND _IN , type : oracledb . STRING } ,
o : { dir : oracledb . BIND _OUT , type : oracledb . STRING }
} ;
insert _returning ( bindVar , content , done ) ;
} ) ;
it ( '107.3.3 INSERT restricted rowid' , function ( done ) {
var content = "00000000.0100.0100" ;
var bindVar = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content , dir : oracledb . BIND _IN , type : oracledb . STRING } ,
o : { dir : oracledb . BIND _OUT , type : oracledb . STRING }
} ;
insert _returning ( bindVar , content , done ) ;
} ) ;
it ( '107.3.7 UPDATE null with extented rowid' , function ( done ) {
var content _insert = null ;
var content _update = "AAABiqAADAAAAwPAAA" ;
var bindVar _update = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content _update , dir : oracledb . BIND _IN , type : oracledb . STRING } ,
o : { dir : oracledb . BIND _OUT , type : oracledb . STRING }
} ;
update _returning ( content _insert , bindVar _update , content _update , done ) ;
} ) ;
2017-06-14 08:50:39 +08:00
it ( '107.3.8 UPDATE extented rowid with null' , function ( done ) {
2017-06-14 08:21:00 +08:00
var content _insert = "AAABiqAADAAAAwPAAA" ;
var content _update = null ;
var bindVar _update = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content _update , dir : oracledb . BIND _IN , type : oracledb . STRING } ,
o : { dir : oracledb . BIND _OUT , type : oracledb . STRING }
} ;
update _returning ( content _insert , bindVar _update , content _update , done ) ;
} ) ;
2017-06-14 08:50:39 +08:00
it ( '107.3.9 UPDATE restricted rowid with empty string' , function ( done ) {
2017-06-14 08:21:00 +08:00
var content _insert = "00000000.0100.0100" ;
var content _update = "" ;
var bindVar _update = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content _update , dir : oracledb . BIND _IN , type : oracledb . STRING } ,
o : { dir : oracledb . BIND _OUT , type : oracledb . STRING }
} ;
update _returning ( content _insert , bindVar _update , null , done ) ;
} ) ;
it ( '107.3.10 UPDATE restricted rowid with extented rowid' , function ( done ) {
var content _insert = "00000000.0100.0100" ;
var content _update = "AAABiqAADAAAAwPAAA" ;
var bindVar _update = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content _update , dir : oracledb . BIND _IN , type : oracledb . STRING } ,
o : { dir : oracledb . BIND _OUT , type : oracledb . STRING }
} ;
update _returning ( content _insert , bindVar _update , content _update , done ) ;
} ) ;
it ( '107.3.11 INSERT with default type/dir - named bind' , function ( done ) {
var content = "00000000.0100.0100" ;
var bindVar = {
i : insertID ,
c : content ,
o : { dir : oracledb . BIND _OUT , type : oracledb . STRING }
} ;
insert _returning ( bindVar , content , done ) ;
} ) ;
it ( '107.3.12 INSERT with default type/dir - positional bind' , function ( done ) {
var content = "00000000.0100.0100" ;
var bindVar = [ insertID , content , { dir : oracledb . BIND _OUT , type : oracledb . STRING } ] ;
insert _returning ( bindVar , content , done ) ;
} ) ;
it ( '107.3.13 UPDATE with default type/dir - named bind' , function ( done ) {
var content _insert = "00000000.0100.0100" ;
var content _update = "AAABiqAADAAAAwPAAA" ;
var bindVar _update = {
i : insertID ,
c : content _update ,
o : { dir : oracledb . BIND _OUT , type : oracledb . STRING }
} ;
update _returning ( content _insert , bindVar _update , content _update , done ) ;
} ) ;
it ( '107.3.14 UPDATE with default type/dir - positional bind' , function ( done ) {
var content _insert = "00000000.0100.0100" ;
var content _update = "AAABiqAADAAAAwPAAA" ;
var bindVar _update = [ content _update , insertID , { dir : oracledb . BIND _OUT , type : oracledb . STRING } ] ;
update _returning ( content _insert , bindVar _update , content _update , done ) ;
} ) ;
} ) ;
2017-06-14 08:53:11 +08:00
describe ( '107.4 WHERE' , function ( ) {
it ( '107.4.1 can bind in WHERE clause' , function ( done ) {
where _select ( done ) ;
} ) ;
} ) ;
2017-06-14 08:21:00 +08:00
var dmlInsert = function ( bindVar , expected , callback ) {
var sql _insert = "insert into " + tableName + "(id, content) values (:i, CHARTOROWID(:c))" ;
var sql _select = "select * from " + tableName + " where id = :i" ;
async . series ( [
function ( cb ) {
connection . execute (
sql _insert ,
bindVar ,
function ( err , result ) {
should . not . exist ( err ) ;
( result . rowsAffected ) . should . be . exactly ( 1 ) ;
cb ( ) ;
}
2017-06-14 08:22:07 +08:00
) ;
2017-06-14 08:21:00 +08:00
} ,
function ( cb ) {
connection . execute (
sql _select ,
{ i : insertID } ,
function ( err , result ) {
should . not . exist ( err ) ;
var resultVal = result . rows [ 0 ] [ 1 ] ;
should . strictEqual ( resultVal , expected ) ;
2017-06-14 08:50:39 +08:00
// should.strictEqual(typeof resultVal, "string");
2017-06-14 08:21:00 +08:00
cb ( ) ;
}
2017-06-14 08:22:07 +08:00
) ;
2017-06-14 08:21:00 +08:00
}
] , callback ) ;
} ;
var dmlInsert _substr = function ( content , callback ) {
var id = insertID ++ ;
var sql _insert = "insert into " + tableName + "(id, content) values (" + id + ", CHARTOROWID(:c))" ;
var sql _select = "select content, SUBSTR(content,1,6) , SUBSTR(content,7,3), SUBSTR(content,10,6), SUBSTR(content,16,3) from " + tableName + " where id = " + id ;
var bindVar = { c : { val : content , dir : oracledb . BIND _IN , type : oracledb . STRING } } ;
async . series ( [
function ( cb ) {
connection . execute (
sql _insert ,
bindVar ,
function ( err , result ) {
should . not . exist ( err ) ;
( result . rowsAffected ) . should . be . exactly ( 1 ) ;
cb ( ) ;
}
2017-06-14 08:22:07 +08:00
) ;
2017-06-14 08:21:00 +08:00
} ,
function ( cb ) {
connection . execute (
sql _select ,
function ( err , result ) {
should . not . exist ( err ) ;
var resultVal _rowid = result . rows [ 0 ] [ 0 ] ;
var resultVal _object = result . rows [ 0 ] [ 1 ] ;
var resultVal _file = result . rows [ 0 ] [ 2 ] ;
var resultVal _block = result . rows [ 0 ] [ 3 ] ;
var resultVal _row = result . rows [ 0 ] [ 4 ] ;
should . strictEqual ( typeof resultVal _rowid , "string" ) ;
should . strictEqual ( typeof resultVal _block , "string" ) ;
should . strictEqual ( typeof resultVal _row , "string" ) ;
should . strictEqual ( typeof resultVal _file , "string" ) ;
should . strictEqual ( typeof resultVal _object , "string" ) ;
should . strictEqual ( resultVal _rowid , content ) ;
should . strictEqual ( resultVal _object , content . substring ( 0 , 6 ) ) ;
should . strictEqual ( resultVal _file , content . substring ( 6 , 9 ) ) ;
should . strictEqual ( resultVal _block , content . substring ( 9 , 15 ) ) ;
should . strictEqual ( resultVal _row , content . substring ( 15 , 18 ) ) ;
cb ( ) ;
}
2017-06-14 08:22:07 +08:00
) ;
2017-06-14 08:21:00 +08:00
}
] , callback ) ;
} ;
var dmlUpdate = function ( content _insert , content _update , expected , callback ) {
var sql _insert = "insert into " + tableName + "(id, content) values (:i, CHARTOROWID(:c))" ;
var sql _update = "update " + tableName + " set content = :c where id = :i" ;
var sql _select = "select * from " + tableName + " where id = :i" ;
var bindVar _insert = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content _insert , dir : oracledb . BIND _IN , type : oracledb . STRING }
} ;
var bindVar _update = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content _update , dir : oracledb . BIND _IN , type : oracledb . STRING }
} ;
async . series ( [
function ( cb ) {
connection . execute (
sql _insert ,
bindVar _insert ,
function ( err , result ) {
should . not . exist ( err ) ;
( result . rowsAffected ) . should . be . exactly ( 1 ) ;
cb ( ) ;
}
2017-06-14 08:22:07 +08:00
) ;
2017-06-14 08:21:00 +08:00
} ,
function ( cb ) {
connection . execute (
sql _update ,
bindVar _update ,
function ( err , result ) {
should . not . exist ( err ) ;
( result . rowsAffected ) . should . be . exactly ( 1 ) ;
cb ( ) ;
}
2017-06-14 08:22:07 +08:00
) ;
2017-06-14 08:21:00 +08:00
} ,
function ( cb ) {
connection . execute (
sql _select ,
{ i : insertID } ,
function ( err , result ) {
should . not . exist ( err ) ;
var resultVal = result . rows [ 0 ] [ 1 ] ;
should . strictEqual ( resultVal , expected ) ;
2017-06-14 08:50:39 +08:00
// should.strictEqual(typeof resultVal, "string");
2017-06-14 08:21:00 +08:00
cb ( ) ;
}
2017-06-14 08:22:07 +08:00
) ;
2017-06-14 08:21:00 +08:00
}
] , callback ) ;
} ;
var insert _returning = function ( bindVar , expected , callback ) {
var sql _returning = "insert into " + tableName + "(id, content) values (:i, CHARTOROWID(:c)) returning content into :o" ;
connection . execute (
sql _returning ,
bindVar ,
function ( err , result ) {
should . not . exist ( err ) ;
var resultVal ;
if ( typeof ( result . outBinds . o ) === 'undefined' ) resultVal = result . outBinds [ 0 ] [ 0 ] ;
else resultVal = result . outBinds . o [ 0 ] ;
should . strictEqual ( resultVal , expected ) ;
2017-06-14 08:50:39 +08:00
// should.strictEqual(typeof resultVal, "string");
2017-06-14 08:21:00 +08:00
callback ( ) ;
}
2017-06-14 08:22:07 +08:00
) ;
2017-06-14 08:21:00 +08:00
} ;
var update _returning = function ( content _insert , bindVar _update , expected , callback ) {
var sql _insert = "insert into " + tableName + "(id, content) values (:i, CHARTOROWID(:c))" ;
var sql _update = "update " + tableName + " set content = :c where id = :i returning content into :o" ;
var bindVar _insert = {
i : { val : insertID , dir : oracledb . BIND _IN , type : oracledb . NUMBER } ,
c : { val : content _insert , dir : oracledb . BIND _IN , type : oracledb . STRING }
} ;
async . series ( [
function ( cb ) {
connection . execute (
sql _insert ,
bindVar _insert ,
function ( err , result ) {
should . not . exist ( err ) ;
( result . rowsAffected ) . should . be . exactly ( 1 ) ;
cb ( ) ;
}
2017-06-14 08:22:07 +08:00
) ;
2017-06-14 08:21:00 +08:00
} ,
function ( cb ) {
connection . execute (
sql _update ,
bindVar _update ,
function ( err , result ) {
should . not . exist ( err ) ;
var resultVal ;
if ( typeof ( result . outBinds . o ) === 'undefined' ) resultVal = result . outBinds [ 0 ] [ 0 ] ;
else resultVal = result . outBinds . o [ 0 ] ;
should . strictEqual ( resultVal , expected ) ;
2017-06-14 08:50:39 +08:00
// should.strictEqual(typeof resultVal, "string");
2017-06-14 08:21:00 +08:00
cb ( ) ;
}
2017-06-14 08:22:07 +08:00
) ;
2017-06-14 08:21:00 +08:00
}
] , callback ) ;
} ;
2017-06-14 08:53:11 +08:00
var where _select = function ( callback ) {
async . series ( [
function ( cb ) {
connection . execute (
2017-06-17 07:40:09 +08:00
"insert into " + tableName + " T (ID) values (" + insertID + ")" ,
function ( err , result ) {
should . not . exist ( err ) ;
( result . rowsAffected ) . should . be . exactly ( 1 ) ;
cb ( ) ;
}
) ;
2017-06-14 08:53:11 +08:00
} ,
function ( cb ) {
connection . execute (
2017-06-17 07:40:09 +08:00
"UPDATE " + tableName + " T SET content = T.ROWID where ID = " + insertID ,
function ( err , result ) {
should . not . exist ( err ) ;
( result . rowsAffected ) . should . be . exactly ( 1 ) ;
cb ( ) ;
}
) ;
2017-06-14 08:53:11 +08:00
} ,
function ( cb ) {
connection . execute (
2017-06-17 07:40:09 +08:00
"select content from " + tableName + " where ID = " + insertID ,
function ( err , result ) {
should . not . exist ( err ) ;
var resultVal = result . rows [ 0 ] [ 0 ] ;
connection . execute (
"select * from " + tableName + " where ROWID = CHARTOROWID(:c)" ,
{ c : { val : resultVal , dir : oracledb . BIND _IN , type : oracledb . STRING } } ,
function ( err _1 , result _1 ) {
should . not . exist ( err _1 ) ;
var resultVal _1 = result _1 . rows [ 0 ] [ 0 ] ;
var resultVal _2 = result _1 . rows [ 0 ] [ 1 ] ;
should . strictEqual ( resultVal _1 , insertID ) ;
should . strictEqual ( resultVal _2 , resultVal ) ;
cb ( ) ;
}
) ;
}
) ;
2017-06-14 08:53:11 +08:00
}
] , callback ) ;
} ;
2017-06-14 08:21:00 +08:00
} ) ;