public S prepareIfNeeded(StatementSupplier<S> statementSupplier) throws SQLException {
		S s = getStatement();
		if (s != null) {
			return s;
		}
		s = statementSupplier.get();
		setStatement(s);
		return s;
	}
Get the associated cached {@link Statement} or prepare one via the specified 
{@code statementSupplier} if not yet established.  Tf the supplier is used
the owner thread for the statement will be established based on the 
{@link Thread#currentThread()}.

@param statementSupplier statement supplier function which must return a valid
instance or throw an exception.
@return statement
@throws SQLException if supplier fails to produce a statement
@throws RuntimeException if the current thread does not correspond to the owner
thread of a previously established statement.  This is considered a programming
error if this occurs.
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/tables/CachedStatement.java