11package org .apache .arrow .datafusion ;
22
33import java .nio .file .Path ;
4+ import java .util .Optional ;
45import java .util .concurrent .CompletableFuture ;
56import java .util .function .Consumer ;
67import org .slf4j .Logger ;
@@ -19,6 +20,8 @@ static native void registerCsv(
1920 static native void registerParquet (
2021 long runtime , long context , String name , String path , Consumer <String > callback );
2122
23+ static native long registerTable (long context , String name , long tableProvider ) throws Exception ;
24+
2225 @ Override
2326 public CompletableFuture <DataFrame > sql (String sql ) {
2427 long runtime = getRuntime ().getPointer ();
@@ -64,6 +67,16 @@ public CompletableFuture<Void> registerParquet(String name, Path path) {
6467 return future ;
6568 }
6669
70+ @ Override
71+ public Optional <TableProvider > registerTable (String name , TableProvider tableProvider )
72+ throws Exception {
73+ long previouslyRegistered = registerTable (getPointer (), name , tableProvider .getPointer ());
74+ if (previouslyRegistered == 0 ) {
75+ return Optional .empty ();
76+ }
77+ return Optional .of (new DefaultTableProvider (previouslyRegistered ));
78+ }
79+
6780 private void voidCallback (CompletableFuture <Void > future , String errMessage ) {
6881 if (null != errMessage && !errMessage .isEmpty ()) {
6982 future .completeExceptionally (new RuntimeException (errMessage ));
0 commit comments