From 86bc8de6efa01b7d75dcee2698f48cdfefa147c2 Mon Sep 17 00:00:00 2001 From: Miguel Branco Date: Tue, 13 Aug 2024 10:00:15 +0200 Subject: [PATCH] Add ErrorConfig to hold errors contacting locations. --- protocol/src/main/protobuf/raw/protocol/protocol.proto | 5 +++++ .../scala/raw/compiler/rql2/api/LocationDescription.scala | 2 ++ .../main/scala/raw/compiler/rql2/builtin/MySQLPackage.scala | 2 ++ .../scala/raw/compiler/rql2/builtin/OraclePackage.scala | 2 ++ .../scala/raw/compiler/rql2/builtin/PostgreSQLPackage.scala | 2 ++ .../scala/raw/compiler/rql2/builtin/SQLServerPackage.scala | 2 ++ .../scala/raw/compiler/rql2/builtin/SnowflakePackage.scala | 2 ++ .../src/main/java/raw/runtime/truffle/RawContext.java | 6 +++++- 8 files changed, 22 insertions(+), 1 deletion(-) diff --git a/protocol/src/main/protobuf/raw/protocol/protocol.proto b/protocol/src/main/protobuf/raw/protocol/protocol.proto index dfe089835..486a7ea2e 100644 --- a/protocol/src/main/protobuf/raw/protocol/protocol.proto +++ b/protocol/src/main/protobuf/raw/protocol/protocol.proto @@ -23,6 +23,7 @@ message LocationConfig { DropboxUsernamePasswordConfig dropboxUsernamePassword = 14; HttpHeadersConfig httpHeaders = 15; SecretConfig secret = 99; + ErrorConfig error = 9999; } } @@ -145,4 +146,8 @@ message HttpHeadersConfig { message SecretConfig { string name = 1; string value = 2; +} + +message ErrorConfig { + string message = 1; } \ No newline at end of file diff --git a/snapi-frontend/src/main/scala/raw/compiler/rql2/api/LocationDescription.scala b/snapi-frontend/src/main/scala/raw/compiler/rql2/api/LocationDescription.scala index 979ed1fb5..baf3df2fc 100644 --- a/snapi-frontend/src/main/scala/raw/compiler/rql2/api/LocationDescription.scala +++ b/snapi-frontend/src/main/scala/raw/compiler/rql2/api/LocationDescription.scala @@ -624,6 +624,7 @@ object LocationDescription extends StrictLogging { objectKey ) ) + case Some(l) if l.hasError => Left(l.getError.getMessage) case None => // Anonymous access. Right(S3PathLocationDescription(bucketName, None, None, None, objectKey)) @@ -651,6 +652,7 @@ object LocationDescription extends StrictLogging { path ) ) + case Some(l) if l.hasError => Left(l.getError.getMessage) case None => Left("missing Dropbox credential") } case _ => Left(s"unsupported protocol: $protocol") diff --git a/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/MySQLPackage.scala b/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/MySQLPackage.scala index 198a02b9b..e8afbbc36 100644 --- a/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/MySQLPackage.scala +++ b/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/MySQLPackage.scala @@ -150,6 +150,7 @@ class MySQLInferAndReadEntry extends SugarEntryExtension { new MySqlTableLocation(l1.getHost, l1.getPort, l1.getDatabase, l1.getUser, l1.getPassword, table)( programContext.settings ) + case Some(l) if l.hasError => Left(l.getError.getMessage) case Some(_) => return Left("not a MySQL server") case None => return Left(s"unknown credential: $db") } @@ -394,6 +395,7 @@ class MySQLInferAndQueryEntry extends SugarEntryExtension { new MySqlServerLocation(l1.getHost, l1.getPort, l1.getDatabase, l1.getUser, l1.getPassword)( programContext.settings ) + case Some(l) if l.hasError => Left(l.getError.getMessage) case Some(_) => return Left("not a MySQL server") case None => return Left(s"unknown credential: $db") } diff --git a/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/OraclePackage.scala b/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/OraclePackage.scala index 5475fc3cd..cafaf081e 100644 --- a/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/OraclePackage.scala +++ b/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/OraclePackage.scala @@ -170,6 +170,7 @@ class OracleInferAndReadEntry extends SugarEntryExtension { new OracleTableLocation(l1.getHost, l1.getPort, l1.getDatabase, l1.getUser, l1.getPassword, schema, table)( programContext.settings ) + case Some(l) if l.hasError => Left(l.getError.getMessage) case Some(_) => return Left("not an Oracle server") case None => return Left(s"unknown credential: $db") } @@ -423,6 +424,7 @@ class OracleInferAndQueryEntry extends SugarEntryExtension { new OracleServerLocation(l1.getHost, l1.getPort, l1.getDatabase, l1.getUser, l1.getPassword)( programContext.settings ) + case Some(l) if l.hasError => Left(l.getError.getMessage) case Some(_) => return Left("not an Oracle server") case None => return Left(s"unknown credential: $db") } diff --git a/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/PostgreSQLPackage.scala b/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/PostgreSQLPackage.scala index 3770f92ef..81f6cd9e0 100644 --- a/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/PostgreSQLPackage.scala +++ b/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/PostgreSQLPackage.scala @@ -178,6 +178,7 @@ class PostgreSQLInferAndReadEntry extends SugarEntryExtension { )( programContext.settings ) + case Some(l) if l.hasError => Left(l.getError.getMessage) case Some(_) => return Left("not a PostgreSQL server") case None => return Left(s"unknown credential: $db") } @@ -433,6 +434,7 @@ class PostgreSQLInferAndQueryEntry extends SugarEntryExtension { new PostgresqlServerLocation(l1.getHost, l1.getPort, l1.getDatabase, l1.getUser, l1.getPassword)( programContext.settings ) + case Some(l) if l.hasError => Left(l.getError.getMessage) case Some(_) => return Left("not an Oracle server") case None => return Left(s"unknown credential: $db") } diff --git a/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/SQLServerPackage.scala b/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/SQLServerPackage.scala index 1f57e1aab..0db94f0e9 100644 --- a/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/SQLServerPackage.scala +++ b/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/SQLServerPackage.scala @@ -179,6 +179,7 @@ class SQLServerInferAndReadEntry extends SugarEntryExtension { )( programContext.settings ) + case Some(l) if l.hasError => Left(l.getError.getMessage) case Some(_) => return Left("not an Oracle server") case None => return Left(s"unknown credential: $db") } @@ -435,6 +436,7 @@ class SQLServerInferAndQueryEntry extends SugarEntryExtension { new SqlServerServerLocation(l1.getHost, l1.getPort, l1.getDatabase, l1.getUser, l1.getPassword)( programContext.settings ) + case Some(l) if l.hasError => Left(l.getError.getMessage) case Some(_) => return Left("not an Oracle server") case None => return Left(s"unknown credential: $db") } diff --git a/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/SnowflakePackage.scala b/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/SnowflakePackage.scala index fcbe1be09..a7a2dc9f3 100644 --- a/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/SnowflakePackage.scala +++ b/snapi-frontend/src/main/scala/raw/compiler/rql2/builtin/SnowflakePackage.scala @@ -211,6 +211,7 @@ class SnowflakeInferAndReadEntry extends SugarEntryExtension { )( programContext.settings ) + case Some(l) if l.hasError => Left(l.getError.getMessage) case Some(_) => return Left("not a Snowflake server") case None => return Left(s"unknown credential: $db") } @@ -501,6 +502,7 @@ class SnowflakeInferAndQueryEntry extends SugarEntryExtension { l1.getParametersMap, programContext.settings ) + case Some(l) if l.hasError => Left(l.getError.getMessage) case Some(_) => return Left("not a Snowflake server") case None => return Left(s"unknown credential: $db") } diff --git a/snapi-truffle/src/main/java/raw/runtime/truffle/RawContext.java b/snapi-truffle/src/main/java/raw/runtime/truffle/RawContext.java index 3d7f2476b..703329409 100644 --- a/snapi-truffle/src/main/java/raw/runtime/truffle/RawContext.java +++ b/snapi-truffle/src/main/java/raw/runtime/truffle/RawContext.java @@ -123,7 +123,11 @@ public LocationConfig getLocationConfig(String name) { if (maybeLocationConfig.isEmpty()) { throw new RawTruffleRuntimeException("unknown credential: " + name); } - return maybeLocationConfig.get(); + LocationConfig locationConfig = maybeLocationConfig.get(); + if (locationConfig.hasError()) { + throw new RawTruffleRuntimeException(locationConfig.getError().getMessage()); + } + return locationConfig; } @CompilerDirectives.TruffleBoundary