createTemp static method

Future<OracleLob> createTemp({
  1. required DpiOracle dpiOracle,
  2. required Pointer<dpiConn> connection,
  3. required Pointer<dpiContext> context,
  4. required LobType lobType,
})

Create a new temporary LOB

Implementation

static Future<OracleLob> createTemp({
  required DpiOracle dpiOracle,
  required Pointer<dpiConn> connection,
  required Pointer<dpiContext> context,
  required LobType lobType,
}) async {
  final memoryManager = MemoryManager();

  try {
    final lobPtr = memoryManager.allocate<Pointer<dpiLob>>(sizeOf<Pointer<dpiLob>>());
    final errorInfo = memoryManager.allocate<dpiErrorInfo>(sizeOf<dpiErrorInfo>());

    // Map LOB type to Oracle type
    final oracleType = _lobTypeToOracleType(lobType);

    // Create temporary LOB
    final result = dpiOracle.dpiConn_newTempLob(
      connection,
      oracleType,
      lobPtr,
    );

    if (result == DPI_FAILURE) {
      dpiOracle.dpiContext_getError(context, errorInfo);
      final errorMsg = StringUtils.fromNativeUtf8(errorInfo.ref.message.cast<Char>());

      throw OracleException(
        'Failed to create temporary LOB',
        errorMessage: errorMsg,
      );
    }

    return OracleLob._(
      dpiOracle,
      lobPtr.value,
      context,
      memoryManager,
      lobType,
      true, // isTemporary = true for createTemp
    );
  } catch (e) {
    memoryManager.dispose();
    if (e is OracleException) {
      rethrow;
    }
    throw OracleException('LOB creation failed: $e');
  }
}