{"record":{"id":"275eb416d361ceda","repo":"cube-js/cube","slug":"this-constructor-driver-supports-only-rows-uplo-275eb4","errorCode":null,"errorMessage":"${this.constructor} driver supports only rows upload","messagePattern":"(.+?) driver supports only rows upload","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/cubejs-mysql-aurora-serverless-driver/driver/AuroraServerlessMySqlDriver.js","lineNumber":166,"sourceCode":"\n  toColumnValue(value, genericType) {\n    if (genericType === 'timestamp' && typeof value === 'string') {\n      return value && value.replace('Z', '');\n    }\n    if (genericType === 'boolean' && typeof value === 'string') {\n      if (value.toLowerCase() === 'true') {\n        return true;\n      }\n      if (value.toLowerCase() === 'false') {\n        return false;\n      }\n    }\n    return super.toColumnValue(value, genericType);\n  }\n\n  async uploadTableWithIndexes(table, columns, tableData, indexesSql) {\n    if (!tableData.rows) {\n      throw new Error(`${this.constructor} driver supports only rows upload`);\n    }\n    await this.createTable(table, columns);\n    try {\n      const batchSize = 1000; // TODO make dynamic?\n      for (let j = 0; j < Math.ceil(tableData.rows.length / batchSize); j++) {\n        const currentBatchSize = Math.min(tableData.rows.length - j * batchSize, batchSize);\n        const indexArray = Array.from({ length: currentBatchSize }, (v, i) => i);\n        const valueParamPlaceholders =\n          indexArray.map(i => `(${columns.map((c, paramIndex) => this.param(paramIndex + i * columns.length)).join(', ')})`).join(', ');\n        const params = indexArray.map(i => columns\n          .map(c => this.toColumnValue(tableData.rows[i + j * batchSize][c.name], c.type)))\n          .reduce((a, b) => a.concat(b), []);\n\n        await this.query(\n          `INSERT INTO ${table}\n            (${columns.map(c => this.quoteIdentifier(c.name)).join(', ')})\n          VALUES ${valueParamPlaceholders}`,\n          params","sourceCodeStart":148,"sourceCodeEnd":184,"githubUrl":"https://github.com/cube-js/cube/blob/7d981676b36392fec34088b9afab6bdcad40207c/packages/cubejs-mysql-aurora-serverless-driver/driver/AuroraServerlessMySqlDriver.js#L148-L184","documentation":"A capability guard in AuroraServerlessMySqlDriver.uploadTableWithIndexes: the Aurora Data API cannot perform bulk file/stream loads (no LOAD DATA), so table upload only supports the rows path (tableData.rows). Throwing when tableData.rows is absent (e.g. a CSV-file-based load was requested) prevents an unsupported upload strategy. The input at fault is a TableData carrying something other than row arrays, such as an export-bucket CSV reference.","triggerScenarios":"Thrown at packages/cubejs-mysql-aurora-serverless-driver/driver/AuroraServerlessMySqlDriver.js:166 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Provide tableData.rows (an in-memory rows array) instead of a CSV/stream when uploading to Aurora Serverless MySQL","Generate the rows payload upstream (e.g. from a query result set) since this driver cannot stream-upload via CSV"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"7d981676b36392fec34088b9afab6bdcad40207c","analyzedAt":"2026-09-02T03:45:10.400Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T15:18:49.778Z"}