{"record":{"id":"0c9bf00b369cf456","repo":"apache/shardingsphere","slug":"get-character-stream","errorCode":null,"errorMessage":"Get Character stream","messagePattern":"Get Character stream","errorType":"exception","errorClass":"SQLFeatureNotSupportedException","httpStatus":null,"severity":"error","filePath":"infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/memory/MemoryMergedResult.java","lineNumber":98,"sourceCode":"        return result;\n    }\n    \n    @Override\n    public final Object getCalendarValue(final int columnIndex, final Class<?> type, @SuppressWarnings(\"UseOfObsoleteDateTimeApi\") final Calendar calendar) {\n        // TODO implement with calendar\n        Object result = currentResultSetRow.getCell(columnIndex);\n        wasNull = null == result;\n        return result;\n    }\n    \n    @Override\n    public final InputStream getInputStream(final int columnIndex, final String type) throws SQLException {\n        throw new SQLFeatureNotSupportedException(String.format(\"Get input stream from `%s`\", type));\n    }\n    \n    @Override\n    public Reader getCharacterStream(final int columnIndex) throws SQLException {\n        throw new SQLFeatureNotSupportedException(\"Get Character stream\");\n    }\n    \n    @Override\n    public final boolean wasNull() {\n        return wasNull;\n    }\n}\n","sourceCodeStart":80,"sourceCodeEnd":106,"githubUrl":"https://github.com/apache/shardingsphere/blob/e952770a215630a3659c75d64369168cd3e26b82/infra/merge/src/main/java/org/apache/shardingsphere/infra/merge/result/impl/memory/MemoryMergedResult.java#L80-L106","documentation":"MemoryMergedResult.getCharacterStream(columnIndex) throws SQLFeatureNotSupportedException('Get Character stream'). When results are materialized for in-memory merging, cells are plain objects with no character-stream backend, so Reader access is intentionally unsupported.","triggerScenarios":"Calling rs.getCharacterStream(i) on a memory-merged result set — SELECTs with GROUP BY / aggregates / cross-shard ORDER BY / LIMIT that ShardingSphere merged in memory.","commonSituations":"Text-heavy columns (CLOB/TEXT) read via Reader in shared data-access layers; queries that became memory-merged after adding aggregation or ordering; frameworks auto-selecting character-stream reads for java.sql.Types.LONGVARCHAR columns.","solutions":["Use rs.getString(i) for text columns on memory-merged results.","Split LOB retrieval from the aggregated query into a plain SELECT by primary key that bypasses memory merge.","Catch SQLFeatureNotSupportedException and fall back to getString."],"exampleFix":"// before\nReader text = resultSet.getCharacterStream(2);\n\n// after\nString text = resultSet.getString(2);","handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"try (Reader r = rs.getCharacterStream(i)) { ... } catch (SQLFeatureNotSupportedException e) { String text = rs.getString(i); ... }","preventionTips":["Use getString for text columns on memory-merged results.","Split CLOB retrieval from aggregated queries."],"tags":["jdbc","merge","memory-merge","character-stream"],"backgroundTag":null,"analyzedSha":"e952770a215630a3659c75d64369168cd3e26b82","analyzedAt":"2026-08-14T13:54:53.392Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}