protected void onUpdateError(ComplexEventChunk<StateEvent> updatingEventChunk, CompiledCondition compiledCondition,
                                 CompiledUpdateSet compiledUpdateSet, Exception e) {
        OnErrorAction errorAction = onErrorAction;
        if (e instanceof ConnectionUnavailableException) {
            isConnected.set(false);
            if (errorAction == OnErrorAction.STORE) {
                updatingEventChunk.reset();
                ErroneousEvent erroneousEvent = new ErroneousEvent(
                        new ReplayableTableRecord(updatingEventChunk, compiledCondition, compiledUpdateSet), e,
                        e.getMessage());
                erroneousEvent.setOriginalPayload(ErrorHandlerUtils.constructErrorRecordString(updatingEventChunk,
                        isObjectColumnPresent, tableDefinition, e));
                ErrorStoreHelper.storeErroneousEvent(siddhiAppContext.getSiddhiContext().getErrorStore(),
                        ErrorOccurrence.STORE_ON_TABLE_UPDATE, siddhiAppContext.getName(), erroneousEvent,
                        tableDefinition.getId());
                LOG.error("Error on '" + siddhiAppContext.getName() + "' while performing update for events  " +
                        "at '" + tableDefinition.getId() + "'. Events saved '" + updatingEventChunk.toString() +
                        "'");
                if (LOG.isDebugEnabled()) {
                    LOG.debug(e);
                }
                if (!isTryingToConnect.get()) {
                    connectWithRetry();
                }
            } else {
                if (isTryingToConnect.get()) {
                    LOG.warn("Error on '" + siddhiAppContext.getName() + "' while performing update for " +
                            "events '" + updatingEventChunk + "', operation busy waiting at Table '" +
                            tableDefinition.getId() + "' as its trying to reconnect!");
                    waitWhileConnect();
                    LOG.info("SiddhiApp '" + siddhiAppContext.getName() + "' table '" + tableDefinition.getId()
                            + "' has become available for update operation for events '" + updatingEventChunk
                            + "'");
                    update(updatingEventChunk, compiledCondition, compiledUpdateSet);
                } else {
                    connectWithRetry();
                    update(updatingEventChunk, compiledCondition, compiledUpdateSet);
                }
            }
        } else if (e instanceof DatabaseRuntimeException) {
            if (errorAction == OnErrorAction.STORE) {
                updatingEventChunk.reset();
                ReplayableTableRecord record = new ReplayableTableRecord(updatingEventChunk, compiledCondition,
                        compiledUpdateSet);
                record.setFromConnectionUnavailableException(false);
                ErroneousEvent erroneousEvent = new ErroneousEvent(record, e, e.getMessage());
                erroneousEvent.setOriginalPayload(ErrorHandlerUtils.constructErrorRecordString(updatingEventChunk,
                        isObjectColumnPresent, tableDefinition, e));
                ErrorStoreHelper.storeErroneousEvent(siddhiAppContext.getSiddhiContext().getErrorStore(),
                        ErrorOccurrence.STORE_ON_TABLE_UPDATE, siddhiAppContext.getName(), erroneousEvent,
                        tableDefinition.getId());
                LOG.error("Error on '" + siddhiAppContext.getName() + "' while performing update for events  " +
                        "at '" + tableDefinition.getId() + "'. Events saved '" + updatingEventChunk.toString() +
                        "'");
                if (LOG.isDebugEnabled()) {
                    LOG.debug(e);
                }
            }
        }
    }
Interface class to represent Tables in Siddhi. There are multiple implementations. Ex: {@link InMemoryTable}. Table
will support basic operations of add, delete, update, update or add and contains. *
modules/siddhi-core/src/main/java/io/siddhi/core/table/Table.java