Node-oracledb: Metadata is empty when resultSet:true

Created on 18 May 2016  路  9Comments  路  Source: oracle/node-oracledb

In 1.9.1 metadata is empty when resultSet:true. We kind of need this.

I didn't notice any API change. Is there some flag to resurrect this metadata? It's coming back as an empty array.

Thanks!

bug

Most helpful comment

@sanfords @sagiegurari Fixed in 1.9.2.

All 9 comments

@sanfords Got a testcase? I modified the resultset2.js example:

cjones@mac:~/n$ diff -u ~/n/node-oracledb/examples/resultset2.js resultset2.js 
--- /Users/cjones/n/dataaccess_node-oracledb/examples/resultset2.js 2016-05-03 18:08:35.000000000 +1000
+++ resultset2.js   2016-05-19 08:32:09.000000000 +1000
@@ -66,12 +66,14 @@
           return;
         }
         // console.log(result);
+        console.log('Top Level: ' + JSON.stringify(result.resultSet.metaData));
         fetchRowsFromRS(connection, result.resultSet, numRows);
       });
   });

 function fetchRowsFromRS(connection, resultSet, numRows)
 {
+  console.log('in fetchRowsFromRS: ' + JSON.stringify(resultSet.metaData));
   resultSet.getRows(
     numRows,  // get this many rows
     function (err, rows)

This produced:

cjones@mac:~/n$ node resultset2.js
Top Level: [{"name":"EMPLOYEE_ID"},{"name":"LAST_NAME"}]
in fetchRowsFromRS: [{"name":"EMPLOYEE_ID"},{"name":"LAST_NAME"}]
fetchRowsFromRS(): Got 10 rows
[ [ 100, 'King' ],
  [ 101, 'Kochhar' ],
  [ 102, 'De Haan' ],
  [ 103, 'Hunold' ],
  [ 104, 'Ernst' ],
  [ 105, 'Austin' ],
  [ 106, 'Pataballa' ],
  [ 107, 'Lorentz' ],
  [ 108, 'Greenberg' ],
  [ 109, 'Faviet' ] ]
in fetchRowsFromRS: [{"name":"EMPLOYEE_ID"},{"name":"LAST_NAME"}]
fetchRowsFromRS(): Got 10 rows
[ [ 110, 'Chen' ],
  [ 111, 'Sciarra' ],
  [ 112, 'Urman' ],
  [ 113, 'Popp' ],
  [ 114, 'Raphaely' ],
  [ 115, 'Khoo' ],
  [ 116, 'Baida' ],
  [ 117, 'Tobias' ],
  [ 118, 'Himuro' ],
  [ 119, 'Colmenares' ] ]
in fetchRowsFromRS: [{"name":"EMPLOYEE_ID"},{"name":"LAST_NAME"}]
fetchRowsFromRS(): Got 4 rows
[ [ 120, 'Weiss' ],
  [ 121, 'Fripp' ],
  [ 122, 'Kaufling' ],
  [ 123, 'Vollman' ] ]
cjones@mac:~/n$

I tried a query from v$session i.e. more columns, and got:

Top Level: [{"name":"SADDR"},{"name":"SID"},{"name":"SERIAL#"},{"name":"AUDSID"},{"name":"PADDR"},{"name":"USER#"},{"name":"USERNAME"},{"name":"COMMAND"},{"name":"OWNERID"},{"name":"TADDR"},{"name":"LOCKWAIT"},{"name":"STATUS"},{"name":"SERVER"},{"name":"SCHEMA#"},{"name":"SCHEMANAME"},{"name":"OSUSER"},{"name":"PROCESS"},{"name":"MACHINE"},{"name":"PORT"},{"name":"TERMINAL"},{"name":"PROGRAM"},{"name":"TYPE"},{"name":"SQL_ADDRESS"},{"name":"SQL_HASH_VALUE"},{"name":"SQL_ID"},{"name":"SQL_CHILD_NUMBER"},{"name":"SQL_EXEC_START"},{"name":"SQL_EXEC_ID"},{"name":"PREV_SQL_ADDR"},{"name":"PREV_HASH_VALUE"},{"name":"PREV_SQL_ID"},{"name":"PREV_CHILD_NUMBER"},{"name":"PREV_EXEC_START"},{"name":"PREV_EXEC_ID"},{"name":"PLSQL_ENTRY_OBJECT_ID"},{"name":"PLSQL_ENTRY_SUBPROGRAM_ID"},{"name":"PLSQL_OBJECT_ID"},{"name":"PLSQL_SUBPROGRAM_ID"},{"name":"MODULE"},{"name":"MODULE_HASH"},{"name":"ACTION"},{"name":"ACTION_HASH"},{"name":"CLIENT_INFO"},{"name":"FIXED_TABLE_SEQUENCE"},{"name":"ROW_WAIT_OBJ#"},{"name":"ROW_WAIT_FILE#"},{"name":"ROW_WAIT_BLOCK#"},{"name":"ROW_WAIT_ROW#"},{"name":"TOP_LEVEL_CALL#"},{"name":"LOGON_TIME"},{"name":"LAST_CALL_ET"},{"name":"PDML_ENABLED"},{"name":"FAILOVER_TYPE"},{"name":"FAILOVER_METHOD"},{"name":"FAILED_OVER"},{"name":"RESOURCE_CONSUMER_GROUP"},{"name":"PDML_STATUS"},{"name":"PDDL_STATUS"},{"name":"PQ_STATUS"},{"name":"CURRENT_QUEUE_DURATION"},{"name":"CLIENT_IDENTIFIER"},{"name":"BLOCKING_SESSION_STATUS"},{"name":"BLOCKING_INSTANCE"},{"name":"BLOCKING_SESSION"},{"name":"FINAL_BLOCKING_SESSION_STATUS"},{"name":"FINAL_BLOCKING_INSTANCE"},{"name":"FINAL_BLOCKING_SESSION"},{"name":"SEQ#"},{"name":"EVENT#"},{"name":"EVENT"},{"name":"P1TEXT"},{"name":"P1"},{"name":"P1RAW"},{"name":"P2TEXT"},{"name":"P2"},{"name":"P2RAW"},{"name":"P3TEXT"},{"name":"P3"},{"name":"P3RAW"},{"name":"WAIT_CLASS_ID"},{"name":"WAIT_CLASS#"},{"name":"WAIT_CLASS"},{"name":"WAIT_TIME"},{"name":"SECONDS_IN_WAIT"},{"name":"STATE"},{"name":"WAIT_TIME_MICRO"},{"name":"TIME_REMAINING_MICRO"},{"name":"TIME_SINCE_LAST_WAIT_MICRO"},{"name":"SERVICE_NAME"},{"name":"SQL_TRACE"},{"name":"SQL_TRACE_WAITS"},{"name":"SQL_TRACE_BINDS"},{"name":"SQL_TRACE_PLAN_STATS"},{"name":"SESSION_EDITION_ID"},{"name":"CREATOR_ADDR"},{"name":"CREATOR_SERIAL#"},{"name":"ECID"},{"name":"SQL_TRANSLATION_PROFILE_ID"},{"name":"PGA_TUNABLE_MEM"},{"name":"CON_ID"},{"name":"EXTERNAL_NAME"}]
in fetchRowsFromRS: [{"name":"SADDR"},{"name":"SID"},{"name":"SERIAL#"},{"name":"AUDSID"},{"name":"PADDR"},{"name":"USER#"},{"name":"USERNAME"},{"name":"COMMAND"},{"name":"OWNERID"},{"name":"TADDR"},{"name":"LOCKWAIT"},{"name":"STATUS"},{"name":"SERVER"},{"name":"SCHEMA#"},{"name":"SCHEMANAME"},{"name":"OSUSER"},{"name":"PROCESS"},{"name":"MACHINE"},{"name":"PORT"},{"name":"TERMINAL"},{"name":"PROGRAM"},{"name":"TYPE"},{"name":"SQL_ADDRESS"},{"name":"SQL_HASH_VALUE"},{"name":"SQL_ID"},{"name":"SQL_CHILD_NUMBER"},{"name":"SQL_EXEC_START"},{"name":"SQL_EXEC_ID"},{"name":"PREV_SQL_ADDR"},{"name":"PREV_HASH_VALUE"},{"name":"PREV_SQL_ID"},{"name":"PREV_CHILD_NUMBER"},{"name":"PREV_EXEC_START"},{"name":"PREV_EXEC_ID"},{"name":"PLSQL_ENTRY_OBJECT_ID"},{"name":"PLSQL_ENTRY_SUBPROGRAM_ID"},{"name":"PLSQL_OBJECT_ID"},{"name":"PLSQL_SUBPROGRAM_ID"},{"name":"MODULE"},{"name":"MODULE_HASH"},{"name":"ACTION"},{"name":"ACTION_HASH"},{"name":"CLIENT_INFO"},{"name":"FIXED_TABLE_SEQUENCE"},{"name":"ROW_WAIT_OBJ#"},{"name":"ROW_WAIT_FILE#"},{"name":"ROW_WAIT_BLOCK#"},{"name":"ROW_WAIT_ROW#"},{"name":"TOP_LEVEL_CALL#"},{"name":"LOGON_TIME"},{"name":"LAST_CALL_ET"},{"name":"PDML_ENABLED"},{"name":"FAILOVER_TYPE"},{"name":"FAILOVER_METHOD"},{"name":"FAILED_OVER"},{"name":"RESOURCE_CONSUMER_GROUP"},{"name":"PDML_STATUS"},{"name":"PDDL_STATUS"},{"name":"PQ_STATUS"},{"name":"CURRENT_QUEUE_DURATION"},{"name":"CLIENT_IDENTIFIER"},{"name":"BLOCKING_SESSION_STATUS"},{"name":"BLOCKING_INSTANCE"},{"name":"BLOCKING_SESSION"},{"name":"FINAL_BLOCKING_SESSION_STATUS"},{"name":"FINAL_BLOCKING_INSTANCE"},{"name":"FINAL_BLOCKING_SESSION"},{"name":"SEQ#"},{"name":"EVENT#"},{"name":"EVENT"},{"name":"P1TEXT"},{"name":"P1"},{"name":"P1RAW"},{"name":"P2TEXT"},{"name":"P2"},{"name":"P2RAW"},{"name":"P3TEXT"},{"name":"P3"},{"name":"P3RAW"},{"name":"WAIT_CLASS_ID"},{"name":"WAIT_CLASS#"},{"name":"WAIT_CLASS"},{"name":"WAIT_TIME"},{"name":"SECONDS_IN_WAIT"},{"name":"STATE"},{"name":"WAIT_TIME_MICRO"},{"name":"TIME_REMAINING_MICRO"},{"name":"TIME_SINCE_LAST_WAIT_MICRO"},{"name":"SERVICE_NAME"},{"name":"SQL_TRACE"},{"name":"SQL_TRACE_WAITS"},{"name":"SQL_TRACE_BINDS"},{"name":"SQL_TRACE_PLAN_STATS"},{"name":"SESSION_EDITION_ID"},{"name":"CREATOR_ADDR"},{"name":"CREATOR_SERIAL#"},{"name":"ECID"},{"name":"SQL_TRANSLATION_PROFILE_ID"},{"name":"PGA_TUNABLE_MEM"},{"name":"CON_ID"},{"name":"EXTERNAL_NAME"}]

. . . 

I see same issue.
For some reason the metaData is now part of the resultset inside the result object and not part of the callback result object itself.
Was this suppose to be like that?

to be more accurate, on top result object, the metaData is now an empty array and in the resultSet object inside the top result object, it is actually holding the col names.
So thats a bug.

yep :(

Thank you, @sagiegurari! Yes, this is what we're seeing. We were just about to roll an example. Should we pivot our code to the new location or wait for a hotfix?

We can test a fix relatively quickly. Is there anything else we need to look at?

Maybe check your docs to see if they're consistent. We've already adjusted our code. I'm not quite sure which behavior you want for the next 10 years. It's easy for us to jockey back and forth. (To and fro?)

@sanfords @sagiegurari Fixed in 1.9.2.

+1 on the quick fix in a patch version and not waiting for a full minor version

Was this page helpful?
0 / 5 - 0 ratings