On 2/8/18 10:57 AM, Nigel Jones wrote:
Newbie warning ...
I'm trying to figure out how I could determine the current username
when in a table function (in fact I'm writing some java code that
plugs into someone else's table function ...)
I was originally thinking of something like the snippet below. However
this doesn't work (I get an SQL Transient Exception).
I don't know derby well but saw some discussion around not exposing
the language context in any case (due to security concerns)
Given this can anyone suggest the simplest way to retrieve the
authorised user?
ContextManager contextMgr = ((EmbedConnection)
DriverManager.getConnection("jdbc:default:connection")).getContextManager();
LanguageConnectionContext languageContext =
(LanguageConnectionContext)contextMgr.getContext("LanguageConnectionContext");
StatementContext derbyStatementContext = languageContext.getStatementContext();
String localDerbyContextCurrentUser =
derbyStatementContext.getSQLSessionContext().getCurrentUser();
Many thanks
Nigel.
Hi Nigel,
You should be able to call current_user from inside a user-defined
function. Here's an example of how to do this via a scalar function.
Should work the same for a table function:
Run the following ij script...
connect 'jdbc:derby:memory:db1;create=true';
create function findUser() returns varchar(128)
language java
parameter style java
reads sql data
external name 'UserFinder.findUser';
values findUser();
...after compiling the following class...
import java.sql.*;
public class UserFinder
{
public static String findUser() throws SQLException
{
try (Connection conn =
DriverManager.getConnection("jdbc:default:connection"))
{
try (PreparedStatement ps = conn.prepareStatement("values
current_user"))
{
try (ResultSet rs = ps.executeQuery())
{
rs.next();
return rs.getString(1);
}
}
}
}
}