{"record":{"id":"99ca13dff39ea320","repo":"apache/cassandra","slug":"secondary-indexes-on-materialized-views-aren-t-sup","errorCode":null,"errorMessage":"Secondary indexes on materialized views aren't supported","messagePattern":"Secondary indexes on materialized views aren't supported","errorType":"validation","errorClass":"InvalidRequestException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/cql3/statements/schema/CreateIndexStatement.java","lineNumber":175,"sourceCode":"            throw ire(KEYSPACE_DOES_NOT_EXIST, keyspaceName);\n\n        TableMetadata table = keyspace.getTableOrViewNullable(tableName);\n        if (null == table)\n            throw ire(TABLE_DOES_NOT_EXIST, tableName);\n\n        if (null != indexName && keyspace.hasIndex(indexName))\n        {\n            if (ifNotExists)\n                return schema;\n\n            throw ire(INDEX_ALREADY_EXISTS, indexName);\n        }\n\n        if (table.isCounter())\n            throw ire(COUNTER_TABLES_NOT_SUPPORTED);\n\n        if (table.isView())\n            throw ire(MATERIALIZED_VIEWS_NOT_SUPPORTED);\n\n        if (keyspace.replicationStrategy.hasTransientReplicas())\n            throw new InvalidRequestException(TRANSIENTLY_REPLICATED_KEYSPACE_NOT_SUPPORTED);\n\n        // guardrails to limit number of secondary indexes per table.\n        Guardrails.secondaryIndexesPerTable.guard(table.indexes.size() + 1,\n                                                  Strings.isNullOrEmpty(indexName)\n                                                  ? String.format(\"on table %s\", table.name)\n                                                  : String.format(\"%s on table %s\", indexName, table.name),\n                                                  false,\n                                                  state);\n\n        List<IndexTarget> indexTargets = Lists.newArrayList(transform(rawIndexTargets, t -> t.prepare(table)));\n\n        if (indexTargets.isEmpty() && !attrs.isCustom)\n            throw ire(CUSTOM_CREATE_WITHOUT_COLUMN);\n\n        if (indexTargets.size() > 1)","sourceCodeStart":157,"sourceCodeEnd":193,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/cql3/statements/schema/CreateIndexStatement.java#L157-L193","documentation":"Thrown while applying CREATE INDEX when the target relation resolved via getTableOrViewNullable() turns out to be a materialized view (table.isView()). Secondary indexes can only be created on base tables; indexing a view is not supported, so the statement is rejected with this sentinel error (MATERIALIZED_VIEWS_NOT_SUPPORTED) rather than attempting index creation.","triggerScenarios":"Thrown at src/java/org/apache/cassandra/cql3/statements/schema/CreateIndexStatement.java:175 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Create the index on the base table instead, or model the lookup as another materialized view."],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-17T15:17:12.973Z"}