{"record":{"id":"5810c2ced92b7690","repo":"apache/cassandra","slug":"only-custom-indexes-can-be-created-without-specify","errorCode":null,"errorMessage":"Only CUSTOM indexes can be created without specifying a target column","messagePattern":"Only CUSTOM indexes can be created without specifying a target column","errorType":"validation","errorClass":"InvalidRequestException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/cql3/statements/schema/CreateIndexStatement.java","lineNumber":191,"sourceCode":"\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)\n        {\n            if (!attrs.isCustom)\n                throw ire(CUSTOM_MULTIPLE_COLUMNS);\n\n            Set<ColumnIdentifier> columns = new HashSet<>();\n            for (IndexTarget target : indexTargets)\n                if (!columns.add(target.column))\n                    throw ire(DUPLICATE_TARGET_COLUMN, target.column);\n        }\n\n        IndexMetadata.Kind kind = attrs.isCustom ? IndexMetadata.Kind.CUSTOM : IndexMetadata.Kind.COMPOSITES;\n\n        indexTargets.forEach(t -> validateIndexTarget(table, kind, t, attrs));\n\n        String name = null == indexName ? generateIndexName(keyspace, indexTargets) : indexName;\n","sourceCodeStart":173,"sourceCodeEnd":209,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/cql3/statements/schema/CreateIndexStatement.java#L173-L209","documentation":"CreateIndexStatement.apply validation: CREATE INDEX without a target column is only legal for custom index implementations (which manage their own targets); a plain composite index requires an explicit column target.","triggerScenarios":"Thrown at src/java/org/apache/cassandra/cql3/statements/schema/CreateIndexStatement.java:191 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Specify the column to index, e.g. CREATE INDEX ON tbl(col).","Add USING with a custom index class if a columnless custom index is intended."],"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"}