コード例 #1
0
        public TableMetadata(
            string tableName,
            string eplExpression,
            string statementName,
            Type[] keyTypes,
            IDictionary<string, TableMetadataColumn> tableColumns,
            TableStateRowFactory rowFactory,
            int numberMethodAggregations,
            StatementContext createTableStatementContext,
            ObjectArrayEventType internalEventType,
            ObjectArrayEventType publicEventType,
            TableMetadataInternalEventToPublic eventToPublic,
            bool queryPlanLogging)
        {
            _tableName = tableName;
            _eplExpression = eplExpression;
            _statementName = statementName;
            _keyTypes = keyTypes;
            _tableColumns = tableColumns;
            _rowFactory = rowFactory;
            _numberMethodAggregations = numberMethodAggregations;
            _statementContextCreateTable = createTableStatementContext;
            _internalEventType = internalEventType;
            _publicEventType = publicEventType;
            _eventToPublic = eventToPublic;
            _queryPlanLogging = queryPlanLogging;

            if (keyTypes.Length > 0)
            {
                var pair = TableServiceUtil.GetIndexMultikeyForKeys(tableColumns, internalEventType);
                var queryPlanIndexItem = QueryPlanIndexItem.FromIndexMultikeyTablePrimaryKey(pair.Second);
                _eventTableIndexMetadataRepo.AddIndexExplicit(true, pair.Second, tableName, queryPlanIndexItem, createTableStatementContext.StatementName);
                _tableRowKeyFactory = new TableRowKeyFactory(pair.First);
            }
        }
コード例 #2
0
        public void RegisterIndex(
            IndexCompileTimeKey indexKey,
            IndexDetail indexDetail)
        {
            EventTableIndexMetadata indexMetadata = null;
            if (indexKey.IsNamedWindow) {
                NamedWindowMetaData localNamedWindow = moduleNamedWindows.Get(indexKey.InfraName);
                if (localNamedWindow != null) {
                    indexMetadata = localNamedWindow.IndexMetadata;
                }
                else {
                    if (indexKey.Visibility == NameAccessModifier.PUBLIC) {
                        NamedWindowMetaData pathNamedWindow = pathNamedWindows.GetWithModule(
                            indexKey.InfraName,
                            indexKey.InfraModuleName);
                        if (pathNamedWindow != null) {
                            indexMetadata = pathNamedWindow.IndexMetadata;
                        }
                    }
                }

                if (indexMetadata == null) {
                    throw new EPException("Failed to find named window '" + indexKey.InfraName + "'");
                }
            }
            else {
                TableMetaData localTable = moduleTables.Get(indexKey.InfraName);
                if (localTable != null) {
                    indexMetadata = localTable.IndexMetadata;
                }
                else {
                    if (indexKey.Visibility == NameAccessModifier.PUBLIC) {
                        TableMetaData pathTable = pathTables.GetWithModule(
                            indexKey.InfraName,
                            indexKey.InfraModuleName);
                        if (pathTable != null) {
                            indexMetadata = pathTable.IndexMetadata;
                        }
                    }
                }

                if (indexMetadata == null) {
                    throw new EPException("Failed to find table '" + indexKey.InfraName + "'");
                }
            }

            try {
                indexMetadata.AddIndexExplicit(
                    false,
                    indexDetail.IndexMultiKey,
                    indexKey.IndexName,
                    indexKey.InfraModuleName,
                    indexDetail.QueryPlanIndexItem,
                    "");
            }
            catch (ExprValidationException ex) {
                throw new EPException(ex.Message, ex);
            }
        }
コード例 #3
0
 public void ValidateAddIndex(string statementName, string explicitIndexName, QueryPlanIndexItem explicitIndexDesc, IndexMultiKey imk)
 {
     _eventTableIndexMetadataRepo.AddIndexExplicit(false, imk, explicitIndexName, explicitIndexDesc, statementName);
 }