Source:
<code>public TaskReport run(TaskSource taskSource, Schema schema, int taskIndex, PageOutput output) { PluginTask task = taskSource.loadTask(getTaskClass()); PreparedQuery builtQuery = task.getBuiltQuery(); JdbcSchema querySchema = task.getQuerySchema(); BufferAllocator allocator = task.getBufferAllocator(); PageBuilder pageBuilder = new PageBuilder(allocator, schema, output); long totalRows = 0; LastRecordStore lastRecordStore = null; try (JdbcInputConnection con = newConnection(task)) { <START> con.before_load(); <END> List<ColumnGetter> getters = newColumnGetters(con, task, querySchema, pageBuilder); try (BatchSelect cursor = con.newSelectCursor(builtQuery, getters, task.getFetchRows(), task.getSocketTimeout())) { while (true) { long rows = fetch(cursor, getters, pageBuilder); if (rows <= 0L) { break; } totalRows += rows; } } if (task.getIncremental() && totalRows > 0) { lastRecordStore = new LastRecordStore(task.getIncrementalColumnIndexes(), task.getIncrementalColumns()); lastRecordStore.accept(getters); } pageBuilder.finish(); if (task.getAfterSelect().isPresent()) { con.executeUpdate(task.getAfterSelect().get()); con.connection.commit(); } } catch (SQLException ex) { throw Throwables.propagate(ex); } TaskReport report = Exec.newTaskReport(); if (lastRecordStore != null) { report.set("last_record", lastRecordStore.getList()); } return report; }</code><technical_language>newConnection is called AbstractJdbcInputPlugin#transaction first, called AbstractJdbcInputPlugin#run. check timezone in transaction method. <pre> @Override public ConfigDiff transaction(ConfigSource config, InputPlugin.Control control) { ... Schema schema; try (JdbcInputConnection con = newConnection(task)) { // TODO incremental_columns is set => get primary key schema = setupTask(con, task); } catch (SQLException ex) { throw Throwables.propagate(ex); } return buildNextConfigDiff(task, control.run(task.dump(), schema, 1)); } </pre> setupTask method is private, I method is check timezone if is changed protected</technical_language>

Target:
public TaskReport run(TaskSource taskSource, Schema schema, int taskIndex, PageOutput output) { PluginTask task = taskSource.loadTask(getTaskClass()); PreparedQuery builtQuery = task.getBuiltQuery(); JdbcSchema querySchema = task.getQuerySchema(); BufferAllocator allocator = task.getBufferAllocator(); PageBuilder pageBuilder = new PageBuilder(allocator, schema, output); long totalRows = 0; LastRecordStore lastRecordStore = null; try (JdbcInputConnection con = newConnection(task)) { List<ColumnGetter> getters = newColumnGetters(con, task, querySchema, pageBuilder); try (BatchSelect cursor = con.newSelectCursor(builtQuery, getters, task.getFetchRows(), task.getSocketTimeout())) { while (true) { long rows = fetch(cursor, getters, pageBuilder); if (rows <= 0L) { break; } totalRows += rows; } } if (task.getIncremental() && totalRows > 0) { lastRecordStore = new LastRecordStore(task.getIncrementalColumnIndexes(), task.getIncrementalColumns()); lastRecordStore.accept(getters); } pageBuilder.finish(); if (task.getAfterSelect().isPresent()) { con.executeUpdate(task.getAfterSelect().get()); con.connection.commit(); } } catch (SQLException ex) { throw Throwables.propagate(ex); } TaskReport report = Exec.newTaskReport(); if (lastRecordStore != null) { report.set("last_record", lastRecordStore.getList()); } return report; }