Sitelet https://github.com/databricks/databricks-sql-nodejs/issues/264
Skip to content

TypeError: Cannot read properties of undefined (reading '0') using client.openSession(); #264

Description

@scott16lloyd

Previously working code causing a TypeError: Cannot read properties of undefined (reading '0'). This code is from the following example: https://github.com/databricks/databricks-sql-nodejs/blob/HEAD/examples/usage.js

const { DBSQLClient } = require('@databricks/sql');
import { DBSQLLogger, LogLevel } from '@databricks/sql';
import { NextResponse } from "next/server";



export async function POST(){

const logger = new DBSQLLogger({ filepath: 'log.txt', level: LogLevel.debug });
    
    
const client = new DBSQLClient({ logger: logger });
console.log("CREATED CLIENT");

client
  .connect({
    host: process.env.DATABRICKS_SERVER_HOSTNAME,
    path: process.env.DATABRICKS_HTTP_PATH,
    token: process.env.DATABRICKS_TOKEN,
  })
  .then(async (client: { openSession: () => any; close: () => any; }) => {
    const session = await client.openSession();
    console.log("SESSION CREATED");

    const queryOperation = await session.executeStatement('SELECT "Hello, World!"');
    const result = await queryOperation.fetchAll();
    await queryOperation.close();

    console.table(result);

    await session.close();
    await client.close();
    return NextResponse.json(result);
  })
  .catch((error: any) => {
    console.log(error);
    if (error instanceof Error) {  
        console.error("Error executing query: ", error);  
        return NextResponse.json(  
          { error: "Failed to execute query: ", details: error.message },  
          { status: 500 }  
        );  
      }  
  });
}

Console output:

{"level":"info","message":"Created DBSQLClient"}
CREATED CLIENT
TypeError: Cannot read properties of undefined (reading '0')
    at isInsideNodeModules (node:internal/util:508:17)
    at showFlaggedDeprecation (node:buffer:178:8)
    at new Buffer (node:buffer:266:3)
    at new module.exports (webpack-internal:///(rsc)/./node_modules/node-int64/Int64.js:65:34)
    at DBSQLClient.eval (webpack-internal:///(rsc)/./node_modules/@databricks/sql/dist/DBSQLClient.js:197:111)
    at Generator.next (<anonymous>)
    at eval (webpack-internal:///(rsc)/./node_modules/@databricks/sql/dist/DBSQLClient.js:31:71)
    at new Promise (<anonymous>)
    at __awaiter (webpack-internal:///(rsc)/./node_modules/@databricks/sql/dist/DBSQLClient.js:27:12)
    at DBSQLClient.openSession (webpack-internal:///(rsc)/./node_modules/@databricks/sql/dist/DBSQLClient.js:196:16)
    at eval (webpack-internal:///(rsc)/./app/api/databricks-test/route.ts:25:38)
Error executing query:  TypeError: Cannot read properties of undefined (reading '0')
    at isInsideNodeModules (node:internal/util:508:17)
    at showFlaggedDeprecation (node:buffer:178:8)
    at new Buffer (node:buffer:266:3)
    at new module.exports (webpack-internal:///(rsc)/./node_modules/node-int64/Int64.js:65:34)
    at DBSQLClient.eval (webpack-internal:///(rsc)/./node_modules/@databricks/sql/dist/DBSQLClient.js:197:111)
    at Generator.next (<anonymous>)
    at eval (webpack-internal:///(rsc)/./node_modules/@databricks/sql/dist/DBSQLClient.js:31:71)
    at new Promise (<anonymous>)
    at __awaiter (webpack-internal:///(rsc)/./node_modules/@databricks/sql/dist/DBSQLClient.js:27:12)
    at DBSQLClient.openSession (webpack-internal:///(rsc)/./node_modules/@databricks/sql/dist/DBSQLClient.js:196:16)
    at eval (webpack-internal:///(rsc)/./app/api/databricks-test/route.ts:25:38)
 ⨯ Error: No response is returned from route handler '/home/slloyd/database_ai_assistant/app/api/databricks-test/route.ts'. Ensure you return a `Response` or a `NextResponse` in all branches of your handler.
    at /home/slloyd/database_ai_assistant/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:53611
    at async e_.execute (/home/slloyd/database_ai_assistant/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:44747)
    at async e_.handle (/home/slloyd/database_ai_assistant/node_modules/next/dist/compiled/next-server/app-route.runtime.dev.js:6:54700)
    at async doRender (/home/slloyd/database_ai_assistant/node_modules/next/dist/server/base-server.js:1377:42)
    at async cacheEntry.responseCache.get.routeKind (/home/slloyd/database_ai_assistant/node_modules/next/dist/server/base-server.js:1599:28)
 POST /api/databricks-test 500 in 133ms

The only change made was adding:

webpack: (config) => {
       config.resolve.alias.lz4 = false;
    
       return config;
     },

to my next.config.js to prevent the following error:

Module not found: Can't resolve '../build/Release/xxhash'```

Activity

  1. kravets-levko commented on Aug 14, 2024

    @kravets-levko
    Contributor

    Hi @scott16lloyd! Which Node version you use? Seems that your error is caused by this change to Node's utils module: nodejs/node#52147 Also, it would help if you share your devloop setup. If you're using Webpack, it may polyfill some native Nodejs APIs and sometimes break things

  2. kravets-levko commented on Aug 14, 2024

    @kravets-levko
    Contributor

    Also, seems somebody already stumbled at similar error, but the code wasn't properly fixed: nodejs/node#53089

  3. scott16lloyd commented on Aug 15, 2024

    @scott16lloyd
    Author

    Thank you for your reply @kravets-levko , I was running LTS version 20.16.0 so I tried 21.7.3 where I got:
    Error: Module did not self-register: '/home/slloyd/database_ai_assistant/node_modules/lz4/build/Release/xxhash.node'. and node:419153) [DEP0040] DeprecationWarning: The punycode module is deprecated. Please use a userland alternative instead.

    so I tried the current version 22.6.0 which did run my code but there is 2 deprecation warnings:

    (node:420067) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
    (node:420067) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead
    

    punycode warning seems to be an issue with eslint:
    npm ls punycode

    project_name@0.1.0 /home/slloyd/project_name
    └─┬ eslint@8.57.0
      └─┬ ajv@6.12.6
        └─┬ uri-js@4.4.1
          └── punycode@2.3.1
    

    and the Buffer() issue seems to link to lz4:

    npm ls buffer
    project_name@0.1.0 /home/slloyd/project_name
    └─┬ lz4@0.6.5
      └── buffer@5.7.
    

    I assume this is out of your control and we must wait for an update from eslint and lz4 but is it possible to create a version that will support an LTS version of Node? Or warn users that the current version must be used?

  4. kravets-levko commented on Aug 15, 2024

    @kravets-levko
    Contributor

    @scott16lloyd Thank you for those details! I need to check if we can do anything on our side. I think upgrading eslint should be painless, and if it doesn't depend on punycode anymore - I'll do that. For Buffer warnings - new Buffer(...) is also widely used in node-int64 which is quite old and doesn't receive updates, but thrift heavily depends on it. While those are just warnings and don't disrupt your workflow - you can ignore them for now. I'll get back to you when I have any updates

  5. edgarlcs commented on Aug 27, 2024

    @edgarlcs

    I am getting the same error on newer Node JS versions (20.16.0) But the error goes away on an earlier version (18.18.2)

  6. manuel-barreiro commented on Dec 16, 2024

    @manuel-barreiro

    Having the same problem using Next JS 14. Any solution?

  7. alangabrielbs commented on Apr 9, 2025

    @alangabrielbs

    Has anyone managed to solve this?

  8. alangabrielbs commented on Jul 8, 2025

    @alangabrielbs

    Having the same problem using Next JS 14. Any solution?

    Did you find any solution to use in nextjs?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions