public void add(Rendered r, GLState t) { if (curp == null) throw (new RuntimeException("Tried to set up relative slot with no parent")); Object seq = null; Buffer cos = null; if ((t == null) && (curp.statroot == null)) { seq = r.staticp(); curp.cs.copye(cos = new Buffer(cfg), GLState.Slot.Type.SYS); Cached c; if ((seq != null) && ((c = prevcache.get(new Cached(r, seq, cos, false))) != null)) { prevcache.remove(c); newcache.put(c, c); add(c, curp.cs); return; } } Slot s = getslot(); curp.cs.copy(s.os); if (t != null) t.prep(s.os); s.os.copy(s.cs); if (curp.statroot != null) { s.statroot = curp.statroot; } else if (seq != null) { s.statroot = new Cached(r, seq, cos); } setup(s, r); }
protected void render(GOut g, Rendered r) { try { r.draw(g); } catch (RLoad l) { if (ignload) return; else throw (l); } }
protected void setup(Slot s, Rendered r) { s.r = r; Slot pp = s.p = curp; if (pp == null) curref.set(this); try { curp = s; s.d = r.setup(this); } finally { if ((curp = pp) == null) curref.remove(); } }
@Override public final int execute() { if (isExecutable()) { // Get the attached configuration of this query Configuration c = configuration(); // [#1191] The following triggers a start event on all listeners. // This may be used to provide jOOQ with a JDBC connection, // in case this Query / Configuration was previously // deserialised DefaultExecuteContext ctx = new DefaultExecuteContext(c, this); ExecuteListener listener = new ExecuteListeners(ctx); int result = 0; try { // [#385] If a statement was previously kept open if (keepStatement() && statement != null) { ctx.sql(rendered.sql); ctx.statement(statement); // [#3191] Pre-initialise the ExecuteContext with a previous connection, if available. ctx.connection(c.connectionProvider(), statement.getConnection()); } // [#385] First time statement preparing else { listener.renderStart(ctx); rendered = getSQL0(ctx); ctx.sql(rendered.sql); listener.renderEnd(ctx); rendered.sql = ctx.sql(); // [#3234] Defer initialising of a connection until the prepare step // This optimises unnecessary ConnectionProvider.acquire() calls when // ControlFlowSignals are thrown if (ctx.connection() == null) { throw new DetachedException("Cannot execute query. No Connection configured"); } listener.prepareStart(ctx); prepare(ctx); listener.prepareEnd(ctx); statement = ctx.statement(); } // [#1856] [#4753] Set the query timeout onto the Statement int t = SettingsTools.getQueryTimeout(timeout, ctx.settings()); if (t != 0) { ctx.statement().setQueryTimeout(t); } if ( // [#1145] Bind variables only for true prepared statements // [#2414] Even if parameters are inlined here, child // QueryParts may override this behaviour! executePreparedStatements(c.settings()) && // [#1520] Renderers may enforce static statements, too !Boolean.TRUE.equals(ctx.data(DATA_FORCE_STATIC_STATEMENT))) { listener.bindStart(ctx); if (rendered.bindValues != null) using(c).bindContext(ctx.statement()).visit(rendered.bindValues); listener.bindEnd(ctx); } result = execute(ctx, listener); return result; } // [#3427] ControlFlowSignals must not be passed on to ExecuteListners catch (ControlFlowSignal e) { throw e; } catch (RuntimeException e) { ctx.exception(e); listener.exception(ctx); throw ctx.exception(); } catch (SQLException e) { ctx.sqlException(e); listener.exception(ctx); throw ctx.exception(); } finally { // [#2385] Successful fetchLazy() needs to keep open resources if (!keepResultSet() || ctx.exception() != null) { Tools.safeClose(listener, ctx, keepStatement()); } if (!keepStatement()) { statement = null; rendered = null; } } } else { if (log.isDebugEnabled()) log.debug("Query is not executable", this); return 0; } }