DATASTORE

datastore.projects.allocateIds

valid {
    input.Body.databaseId == STRING
    input.Body.keys[_].partitionId.databaseId == STRING
    input.Body.keys[_].partitionId.namespaceId == STRING
    input.Body.keys[_].partitionId.projectId == STRING
    input.Body.keys[_].path[_].id == STRING
    input.Body.keys[_].path[_].kind == STRING
    input.Body.keys[_].path[_].name == STRING
    input.ReqMap.ProjectID == STRING
    input.ProviderMetadata.Region == STRING
    input.ProviderMetadata.ProjectID == STRING
}

datastore.projects.beginTransaction

valid {
    input.Body.databaseId == STRING
    input.Body.transactionOptions.readOnly.readTime == STRING
    input.Body.transactionOptions.readWrite.previousTransaction == STRING
    input.ReqMap.ProjectID == STRING
    input.ProviderMetadata.Region == STRING
    input.ProviderMetadata.ProjectID == STRING
}

datastore.projects.commit

enum_CommitRequestMode := [ "MODE_UNSPECIFIED", "TRANSACTIONAL", "NON_TRANSACTIONAL" ]
enum_ValueNullValue := [ "NULL_VALUE" ]

valid {
    input.Body.databaseId == STRING
    input.Body.mode == enum_CommitRequestMode[_]
    input.Body.mutations[_].baseVersion == STRING
    input.Body.mutations[_].delete.partitionId.databaseId == STRING
    input.Body.mutations[_].delete.partitionId.namespaceId == STRING
    input.Body.mutations[_].delete.partitionId.projectId == STRING
    input.Body.mutations[_].delete.path[_].id == STRING
    input.Body.mutations[_].delete.path[_].kind == STRING
    input.Body.mutations[_].delete.path[_].name == STRING
    input.Body.mutations[_].insert.key.partitionId.databaseId == STRING
    input.Body.mutations[_].insert.key.partitionId.namespaceId == STRING
    input.Body.mutations[_].insert.key.partitionId.projectId == STRING
    input.Body.mutations[_].insert.key.path[_].id == STRING
    input.Body.mutations[_].insert.key.path[_].kind == STRING
    input.Body.mutations[_].insert.key.path[_].name == STRING
    input.Body.mutations[_].insert.properties.STRING.arrayValue.values[_] == NESTED
    input.Body.mutations[_].insert.properties.STRING.blobValue == STRING
    input.Body.mutations[_].insert.properties.STRING.booleanValue == BOOLEAN
    input.Body.mutations[_].insert.properties.STRING.doubleValue == NUMBER
    input.Body.mutations[_].insert.properties.STRING.entityValue == NESTED
    input.Body.mutations[_].insert.properties.STRING.excludeFromIndexes == BOOLEAN
    input.Body.mutations[_].insert.properties.STRING.geoPointValue.latitude == NUMBER
    input.Body.mutations[_].insert.properties.STRING.geoPointValue.longitude == NUMBER
    input.Body.mutations[_].insert.properties.STRING.integerValue == STRING
    input.Body.mutations[_].insert.properties.STRING.keyValue.partitionId.databaseId == STRING
    input.Body.mutations[_].insert.properties.STRING.keyValue.partitionId.namespaceId == STRING
    input.Body.mutations[_].insert.properties.STRING.keyValue.partitionId.projectId == STRING
    input.Body.mutations[_].insert.properties.STRING.keyValue.path[_].id == STRING
    input.Body.mutations[_].insert.properties.STRING.keyValue.path[_].kind == STRING
    input.Body.mutations[_].insert.properties.STRING.keyValue.path[_].name == STRING
    input.Body.mutations[_].insert.properties.STRING.meaning == INTEGER
    input.Body.mutations[_].insert.properties.STRING.nullValue == enum_ValueNullValue[_]
    input.Body.mutations[_].insert.properties.STRING.stringValue == STRING
    input.Body.mutations[_].insert.properties.STRING.timestampValue == STRING
    input.Body.mutations[_].propertyMask.paths[_] == STRING
    input.Body.mutations[_].update.key.partitionId.databaseId == STRING
    input.Body.mutations[_].update.key.partitionId.namespaceId == STRING
    input.Body.mutations[_].update.key.partitionId.projectId == STRING
    input.Body.mutations[_].update.key.path[_].id == STRING
    input.Body.mutations[_].update.key.path[_].kind == STRING
    input.Body.mutations[_].update.key.path[_].name == STRING
    input.Body.mutations[_].update.properties.STRING.arrayValue.values[_] == NESTED
    input.Body.mutations[_].update.properties.STRING.blobValue == STRING
    input.Body.mutations[_].update.properties.STRING.booleanValue == BOOLEAN
    input.Body.mutations[_].update.properties.STRING.doubleValue == NUMBER
    input.Body.mutations[_].update.properties.STRING.entityValue == NESTED
    input.Body.mutations[_].update.properties.STRING.excludeFromIndexes == BOOLEAN
    input.Body.mutations[_].update.properties.STRING.geoPointValue.latitude == NUMBER
    input.Body.mutations[_].update.properties.STRING.geoPointValue.longitude == NUMBER
    input.Body.mutations[_].update.properties.STRING.integerValue == STRING
    input.Body.mutations[_].update.properties.STRING.keyValue.partitionId.databaseId == STRING
    input.Body.mutations[_].update.properties.STRING.keyValue.partitionId.namespaceId == STRING
    input.Body.mutations[_].update.properties.STRING.keyValue.partitionId.projectId == STRING
    input.Body.mutations[_].update.properties.STRING.keyValue.path[_].id == STRING
    input.Body.mutations[_].update.properties.STRING.keyValue.path[_].kind == STRING
    input.Body.mutations[_].update.properties.STRING.keyValue.path[_].name == STRING
    input.Body.mutations[_].update.properties.STRING.meaning == INTEGER
    input.Body.mutations[_].update.properties.STRING.nullValue == enum_ValueNullValue[_]
    input.Body.mutations[_].update.properties.STRING.stringValue == STRING
    input.Body.mutations[_].update.properties.STRING.timestampValue == STRING
    input.Body.mutations[_].updateTime == STRING
    input.Body.mutations[_].upsert.key.partitionId.databaseId == STRING
    input.Body.mutations[_].upsert.key.partitionId.namespaceId == STRING
    input.Body.mutations[_].upsert.key.partitionId.projectId == STRING
    input.Body.mutations[_].upsert.key.path[_].id == STRING
    input.Body.mutations[_].upsert.key.path[_].kind == STRING
    input.Body.mutations[_].upsert.key.path[_].name == STRING
    input.Body.mutations[_].upsert.properties.STRING.arrayValue.values[_] == NESTED
    input.Body.mutations[_].upsert.properties.STRING.blobValue == STRING
    input.Body.mutations[_].upsert.properties.STRING.booleanValue == BOOLEAN
    input.Body.mutations[_].upsert.properties.STRING.doubleValue == NUMBER
    input.Body.mutations[_].upsert.properties.STRING.entityValue == NESTED
    input.Body.mutations[_].upsert.properties.STRING.excludeFromIndexes == BOOLEAN
    input.Body.mutations[_].upsert.properties.STRING.geoPointValue.latitude == NUMBER
    input.Body.mutations[_].upsert.properties.STRING.geoPointValue.longitude == NUMBER
    input.Body.mutations[_].upsert.properties.STRING.integerValue == STRING
    input.Body.mutations[_].upsert.properties.STRING.keyValue.partitionId.databaseId == STRING
    input.Body.mutations[_].upsert.properties.STRING.keyValue.partitionId.namespaceId == STRING
    input.Body.mutations[_].upsert.properties.STRING.keyValue.partitionId.projectId == STRING
    input.Body.mutations[_].upsert.properties.STRING.keyValue.path[_].id == STRING
    input.Body.mutations[_].upsert.properties.STRING.keyValue.path[_].kind == STRING
    input.Body.mutations[_].upsert.properties.STRING.keyValue.path[_].name == STRING
    input.Body.mutations[_].upsert.properties.STRING.meaning == INTEGER
    input.Body.mutations[_].upsert.properties.STRING.nullValue == enum_ValueNullValue[_]
    input.Body.mutations[_].upsert.properties.STRING.stringValue == STRING
    input.Body.mutations[_].upsert.properties.STRING.timestampValue == STRING
    input.Body.singleUseTransaction.readOnly.readTime == STRING
    input.Body.singleUseTransaction.readWrite.previousTransaction == STRING
    input.Body.transaction == STRING
    input.ReqMap.ProjectID == STRING
    input.ProviderMetadata.Region == STRING
    input.ProviderMetadata.ProjectID == STRING
}

datastore.projects.export

valid {
    input.Body.entityFilter.kinds[_] == STRING
    input.Body.entityFilter.namespaceIds[_] == STRING
    input.Body.labels.STRING == STRING
    input.Body.outputUrlPrefix == STRING
    input.ReqMap.ProjectID == STRING
    input.ProviderMetadata.Region == STRING
    input.ProviderMetadata.ProjectID == STRING
}

datastore.projects.import

valid {
    input.Body.entityFilter.kinds[_] == STRING
    input.Body.entityFilter.namespaceIds[_] == STRING
    input.Body.inputUrl == STRING
    input.Body.labels.STRING == STRING
    input.ReqMap.ProjectID == STRING
    input.ProviderMetadata.Region == STRING
    input.ProviderMetadata.ProjectID == STRING
}

datastore.projects.indexes.create

enum_GoogleDatastoreAdminV1IndexAncestor := [ "ANCESTOR_MODE_UNSPECIFIED", "NONE", "ALL_ANCESTORS" ]
enum_GoogleDatastoreAdminV1IndexedPropertyDirection := [ "DIRECTION_UNSPECIFIED", "ASCENDING", "DESCENDING" ]

valid {
    input.Body.ancestor == enum_GoogleDatastoreAdminV1IndexAncestor[_]
    input.Body.kind == STRING
    input.Body.properties[_].direction == enum_GoogleDatastoreAdminV1IndexedPropertyDirection[_]
    input.Body.properties[_].name == STRING
    input.ReqMap.ProjectID == STRING
    input.ProviderMetadata.Region == STRING
    input.ProviderMetadata.ProjectID == STRING
}

datastore.projects.indexes.delete

valid {
    input.ReqMap.indexId == STRING
    input.ReqMap.ProjectID == STRING
    input.ProviderMetadata.Region == STRING
    input.ProviderMetadata.ProjectID == STRING
}

datastore.projects.indexes.get

valid {
    input.ReqMap.indexId == STRING
    input.ReqMap.ProjectID == STRING
    input.ProviderMetadata.Region == STRING
    input.ProviderMetadata.ProjectID == STRING
}

datastore.projects.indexes.list

valid {
    input.ReqMap.ProjectID == STRING
    input.Qs.filter == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.ProviderMetadata.Region == STRING
    input.ProviderMetadata.ProjectID == STRING
}

datastore.projects.lookup

enum_ReadOptionsReadConsistency := [ "READ_CONSISTENCY_UNSPECIFIED", "STRONG", "EVENTUAL" ]

valid {
    input.Body.databaseId == STRING
    input.Body.keys[_].partitionId.databaseId == STRING
    input.Body.keys[_].partitionId.namespaceId == STRING
    input.Body.keys[_].partitionId.projectId == STRING
    input.Body.keys[_].path[_].id == STRING
    input.Body.keys[_].path[_].kind == STRING
    input.Body.keys[_].path[_].name == STRING
    input.Body.propertyMask.paths[_] == STRING
    input.Body.readOptions.newTransaction.readOnly.readTime == STRING
    input.Body.readOptions.newTransaction.readWrite.previousTransaction == STRING
    input.Body.readOptions.readConsistency == enum_ReadOptionsReadConsistency[_]
    input.Body.readOptions.readTime == STRING
    input.Body.readOptions.transaction == STRING
    input.ReqMap.ProjectID == STRING
    input.ProviderMetadata.Region == STRING
    input.ProviderMetadata.ProjectID == STRING
}

datastore.projects.operations.cancel

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

datastore.projects.operations.delete

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

datastore.projects.operations.get

valid {
    input.ReqMap.name == STRING
    input.ProviderMetadata.Region == STRING
}

datastore.projects.operations.list

valid {
    input.ReqMap.name == STRING
    input.Qs.filter == STRING
    input.Qs.pageSize == INTEGER
    input.Qs.pageToken == STRING
    input.ProviderMetadata.Region == STRING
}

datastore.projects.reserveIds

valid {
    input.Body.databaseId == STRING
    input.Body.keys[_].partitionId.databaseId == STRING
    input.Body.keys[_].partitionId.namespaceId == STRING
    input.Body.keys[_].partitionId.projectId == STRING
    input.Body.keys[_].path[_].id == STRING
    input.Body.keys[_].path[_].kind == STRING
    input.Body.keys[_].path[_].name == STRING
    input.ReqMap.ProjectID == STRING
    input.ProviderMetadata.Region == STRING
    input.ProviderMetadata.ProjectID == STRING
}

datastore.projects.rollback

valid {
    input.Body.databaseId == STRING
    input.Body.transaction == STRING
    input.ReqMap.ProjectID == STRING
    input.ProviderMetadata.Region == STRING
    input.ProviderMetadata.ProjectID == STRING
}

datastore.projects.runAggregationQuery

enum_CompositeFilterOp := [ "OPERATOR_UNSPECIFIED", "AND", "OR" ]
enum_PropertyFilterOp := [ "OPERATOR_UNSPECIFIED", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL", "EQUAL", "IN", "NOT_EQUAL", "HAS_ANCESTOR", "NOT_IN" ]
enum_PropertyOrderDirection := [ "DIRECTION_UNSPECIFIED", "ASCENDING", "DESCENDING" ]
enum_ReadOptionsReadConsistency := [ "READ_CONSISTENCY_UNSPECIFIED", "STRONG", "EVENTUAL" ]
enum_ValueNullValue := [ "NULL_VALUE" ]

valid {
    input.Body.aggregationQuery.aggregations[_].alias == STRING
    input.Body.aggregationQuery.aggregations[_].avg.property.name == STRING
    input.Body.aggregationQuery.aggregations[_].count.upTo == STRING
    input.Body.aggregationQuery.aggregations[_].sum.property.name == STRING
    input.Body.aggregationQuery.nestedQuery.distinctOn[_].name == STRING
    input.Body.aggregationQuery.nestedQuery.endCursor == STRING
    input.Body.aggregationQuery.nestedQuery.filter.compositeFilter.filters[_] == NESTED
    input.Body.aggregationQuery.nestedQuery.filter.compositeFilter.op == enum_CompositeFilterOp[_]
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.op == enum_PropertyFilterOp[_]
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.property.name == STRING
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.arrayValue.values[_] == NESTED
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.blobValue == STRING
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.booleanValue == BOOLEAN
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.doubleValue == NUMBER
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.entityValue.key.partitionId.databaseId == STRING
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.entityValue.key.partitionId.namespaceId == STRING
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.entityValue.key.partitionId.projectId == STRING
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.entityValue.key.path[_].id == STRING
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.entityValue.key.path[_].kind == STRING
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.entityValue.key.path[_].name == STRING
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.entityValue.properties.STRING == NESTED
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.excludeFromIndexes == BOOLEAN
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.geoPointValue.latitude == NUMBER
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.geoPointValue.longitude == NUMBER
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.integerValue == STRING
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.keyValue.partitionId.databaseId == STRING
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.keyValue.partitionId.namespaceId == STRING
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.keyValue.partitionId.projectId == STRING
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.keyValue.path[_].id == STRING
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.keyValue.path[_].kind == STRING
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.keyValue.path[_].name == STRING
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.meaning == INTEGER
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.nullValue == enum_ValueNullValue[_]
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.stringValue == STRING
    input.Body.aggregationQuery.nestedQuery.filter.propertyFilter.value.timestampValue == STRING
    input.Body.aggregationQuery.nestedQuery.kind[_].name == STRING
    input.Body.aggregationQuery.nestedQuery.limit == INTEGER
    input.Body.aggregationQuery.nestedQuery.offset == INTEGER
    input.Body.aggregationQuery.nestedQuery.order[_].direction == enum_PropertyOrderDirection[_]
    input.Body.aggregationQuery.nestedQuery.order[_].property.name == STRING
    input.Body.aggregationQuery.nestedQuery.projection[_].property.name == STRING
    input.Body.aggregationQuery.nestedQuery.startCursor == STRING
    input.Body.databaseId == STRING
    input.Body.explainOptions.analyze == BOOLEAN
    input.Body.gqlQuery.allowLiterals == BOOLEAN
    input.Body.gqlQuery.namedBindings.STRING.cursor == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.arrayValue.values[_] == NESTED
    input.Body.gqlQuery.namedBindings.STRING.value.blobValue == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.booleanValue == BOOLEAN
    input.Body.gqlQuery.namedBindings.STRING.value.doubleValue == NUMBER
    input.Body.gqlQuery.namedBindings.STRING.value.entityValue.key.partitionId.databaseId == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.entityValue.key.partitionId.namespaceId == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.entityValue.key.partitionId.projectId == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.entityValue.key.path[_].id == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.entityValue.key.path[_].kind == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.entityValue.key.path[_].name == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.entityValue.properties.STRING == NESTED
    input.Body.gqlQuery.namedBindings.STRING.value.excludeFromIndexes == BOOLEAN
    input.Body.gqlQuery.namedBindings.STRING.value.geoPointValue.latitude == NUMBER
    input.Body.gqlQuery.namedBindings.STRING.value.geoPointValue.longitude == NUMBER
    input.Body.gqlQuery.namedBindings.STRING.value.integerValue == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.keyValue.partitionId.databaseId == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.keyValue.partitionId.namespaceId == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.keyValue.partitionId.projectId == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.keyValue.path[_].id == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.keyValue.path[_].kind == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.keyValue.path[_].name == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.meaning == INTEGER
    input.Body.gqlQuery.namedBindings.STRING.value.nullValue == enum_ValueNullValue[_]
    input.Body.gqlQuery.namedBindings.STRING.value.stringValue == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.timestampValue == STRING
    input.Body.gqlQuery.positionalBindings[_].cursor == STRING
    input.Body.gqlQuery.positionalBindings[_].value.arrayValue.values[_] == NESTED
    input.Body.gqlQuery.positionalBindings[_].value.blobValue == STRING
    input.Body.gqlQuery.positionalBindings[_].value.booleanValue == BOOLEAN
    input.Body.gqlQuery.positionalBindings[_].value.doubleValue == NUMBER
    input.Body.gqlQuery.positionalBindings[_].value.entityValue.key.partitionId.databaseId == STRING
    input.Body.gqlQuery.positionalBindings[_].value.entityValue.key.partitionId.namespaceId == STRING
    input.Body.gqlQuery.positionalBindings[_].value.entityValue.key.partitionId.projectId == STRING
    input.Body.gqlQuery.positionalBindings[_].value.entityValue.key.path[_].id == STRING
    input.Body.gqlQuery.positionalBindings[_].value.entityValue.key.path[_].kind == STRING
    input.Body.gqlQuery.positionalBindings[_].value.entityValue.key.path[_].name == STRING
    input.Body.gqlQuery.positionalBindings[_].value.entityValue.properties.STRING == NESTED
    input.Body.gqlQuery.positionalBindings[_].value.excludeFromIndexes == BOOLEAN
    input.Body.gqlQuery.positionalBindings[_].value.geoPointValue.latitude == NUMBER
    input.Body.gqlQuery.positionalBindings[_].value.geoPointValue.longitude == NUMBER
    input.Body.gqlQuery.positionalBindings[_].value.integerValue == STRING
    input.Body.gqlQuery.positionalBindings[_].value.keyValue.partitionId.databaseId == STRING
    input.Body.gqlQuery.positionalBindings[_].value.keyValue.partitionId.namespaceId == STRING
    input.Body.gqlQuery.positionalBindings[_].value.keyValue.partitionId.projectId == STRING
    input.Body.gqlQuery.positionalBindings[_].value.keyValue.path[_].id == STRING
    input.Body.gqlQuery.positionalBindings[_].value.keyValue.path[_].kind == STRING
    input.Body.gqlQuery.positionalBindings[_].value.keyValue.path[_].name == STRING
    input.Body.gqlQuery.positionalBindings[_].value.meaning == INTEGER
    input.Body.gqlQuery.positionalBindings[_].value.nullValue == enum_ValueNullValue[_]
    input.Body.gqlQuery.positionalBindings[_].value.stringValue == STRING
    input.Body.gqlQuery.positionalBindings[_].value.timestampValue == STRING
    input.Body.gqlQuery.queryString == STRING
    input.Body.partitionId.databaseId == STRING
    input.Body.partitionId.namespaceId == STRING
    input.Body.partitionId.projectId == STRING
    input.Body.readOptions.newTransaction.readOnly.readTime == STRING
    input.Body.readOptions.newTransaction.readWrite.previousTransaction == STRING
    input.Body.readOptions.readConsistency == enum_ReadOptionsReadConsistency[_]
    input.Body.readOptions.readTime == STRING
    input.Body.readOptions.transaction == STRING
    input.ReqMap.ProjectID == STRING
    input.ProviderMetadata.Region == STRING
    input.ProviderMetadata.ProjectID == STRING
}

datastore.projects.runQuery

enum_CompositeFilterOp := [ "OPERATOR_UNSPECIFIED", "AND", "OR" ]
enum_PropertyFilterOp := [ "OPERATOR_UNSPECIFIED", "LESS_THAN", "LESS_THAN_OR_EQUAL", "GREATER_THAN", "GREATER_THAN_OR_EQUAL", "EQUAL", "IN", "NOT_EQUAL", "HAS_ANCESTOR", "NOT_IN" ]
enum_PropertyOrderDirection := [ "DIRECTION_UNSPECIFIED", "ASCENDING", "DESCENDING" ]
enum_ReadOptionsReadConsistency := [ "READ_CONSISTENCY_UNSPECIFIED", "STRONG", "EVENTUAL" ]
enum_ValueNullValue := [ "NULL_VALUE" ]

valid {
    input.Body.databaseId == STRING
    input.Body.explainOptions.analyze == BOOLEAN
    input.Body.gqlQuery.allowLiterals == BOOLEAN
    input.Body.gqlQuery.namedBindings.STRING.cursor == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.arrayValue.values[_] == NESTED
    input.Body.gqlQuery.namedBindings.STRING.value.blobValue == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.booleanValue == BOOLEAN
    input.Body.gqlQuery.namedBindings.STRING.value.doubleValue == NUMBER
    input.Body.gqlQuery.namedBindings.STRING.value.entityValue.key.partitionId.databaseId == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.entityValue.key.partitionId.namespaceId == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.entityValue.key.partitionId.projectId == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.entityValue.key.path[_].id == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.entityValue.key.path[_].kind == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.entityValue.key.path[_].name == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.entityValue.properties.STRING == NESTED
    input.Body.gqlQuery.namedBindings.STRING.value.excludeFromIndexes == BOOLEAN
    input.Body.gqlQuery.namedBindings.STRING.value.geoPointValue.latitude == NUMBER
    input.Body.gqlQuery.namedBindings.STRING.value.geoPointValue.longitude == NUMBER
    input.Body.gqlQuery.namedBindings.STRING.value.integerValue == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.keyValue.partitionId.databaseId == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.keyValue.partitionId.namespaceId == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.keyValue.partitionId.projectId == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.keyValue.path[_].id == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.keyValue.path[_].kind == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.keyValue.path[_].name == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.meaning == INTEGER
    input.Body.gqlQuery.namedBindings.STRING.value.nullValue == enum_ValueNullValue[_]
    input.Body.gqlQuery.namedBindings.STRING.value.stringValue == STRING
    input.Body.gqlQuery.namedBindings.STRING.value.timestampValue == STRING
    input.Body.gqlQuery.positionalBindings[_].cursor == STRING
    input.Body.gqlQuery.positionalBindings[_].value.arrayValue.values[_] == NESTED
    input.Body.gqlQuery.positionalBindings[_].value.blobValue == STRING
    input.Body.gqlQuery.positionalBindings[_].value.booleanValue == BOOLEAN
    input.Body.gqlQuery.positionalBindings[_].value.doubleValue == NUMBER
    input.Body.gqlQuery.positionalBindings[_].value.entityValue.key.partitionId.databaseId == STRING
    input.Body.gqlQuery.positionalBindings[_].value.entityValue.key.partitionId.namespaceId == STRING
    input.Body.gqlQuery.positionalBindings[_].value.entityValue.key.partitionId.projectId == STRING
    input.Body.gqlQuery.positionalBindings[_].value.entityValue.key.path[_].id == STRING
    input.Body.gqlQuery.positionalBindings[_].value.entityValue.key.path[_].kind == STRING
    input.Body.gqlQuery.positionalBindings[_].value.entityValue.key.path[_].name == STRING
    input.Body.gqlQuery.positionalBindings[_].value.entityValue.properties.STRING == NESTED
    input.Body.gqlQuery.positionalBindings[_].value.excludeFromIndexes == BOOLEAN
    input.Body.gqlQuery.positionalBindings[_].value.geoPointValue.latitude == NUMBER
    input.Body.gqlQuery.positionalBindings[_].value.geoPointValue.longitude == NUMBER
    input.Body.gqlQuery.positionalBindings[_].value.integerValue == STRING
    input.Body.gqlQuery.positionalBindings[_].value.keyValue.partitionId.databaseId == STRING
    input.Body.gqlQuery.positionalBindings[_].value.keyValue.partitionId.namespaceId == STRING
    input.Body.gqlQuery.positionalBindings[_].value.keyValue.partitionId.projectId == STRING
    input.Body.gqlQuery.positionalBindings[_].value.keyValue.path[_].id == STRING
    input.Body.gqlQuery.positionalBindings[_].value.keyValue.path[_].kind == STRING
    input.Body.gqlQuery.positionalBindings[_].value.keyValue.path[_].name == STRING
    input.Body.gqlQuery.positionalBindings[_].value.meaning == INTEGER
    input.Body.gqlQuery.positionalBindings[_].value.nullValue == enum_ValueNullValue[_]
    input.Body.gqlQuery.positionalBindings[_].value.stringValue == STRING
    input.Body.gqlQuery.positionalBindings[_].value.timestampValue == STRING
    input.Body.gqlQuery.queryString == STRING
    input.Body.partitionId.databaseId == STRING
    input.Body.partitionId.namespaceId == STRING
    input.Body.partitionId.projectId == STRING
    input.Body.propertyMask.paths[_] == STRING
    input.Body.query.distinctOn[_].name == STRING
    input.Body.query.endCursor == STRING
    input.Body.query.filter.compositeFilter.filters[_] == NESTED
    input.Body.query.filter.compositeFilter.op == enum_CompositeFilterOp[_]
    input.Body.query.filter.propertyFilter.op == enum_PropertyFilterOp[_]
    input.Body.query.filter.propertyFilter.property.name == STRING
    input.Body.query.filter.propertyFilter.value.arrayValue.values[_] == NESTED
    input.Body.query.filter.propertyFilter.value.blobValue == STRING
    input.Body.query.filter.propertyFilter.value.booleanValue == BOOLEAN
    input.Body.query.filter.propertyFilter.value.doubleValue == NUMBER
    input.Body.query.filter.propertyFilter.value.entityValue.key.partitionId.databaseId == STRING
    input.Body.query.filter.propertyFilter.value.entityValue.key.partitionId.namespaceId == STRING
    input.Body.query.filter.propertyFilter.value.entityValue.key.partitionId.projectId == STRING
    input.Body.query.filter.propertyFilter.value.entityValue.key.path[_].id == STRING
    input.Body.query.filter.propertyFilter.value.entityValue.key.path[_].kind == STRING
    input.Body.query.filter.propertyFilter.value.entityValue.key.path[_].name == STRING
    input.Body.query.filter.propertyFilter.value.entityValue.properties.STRING == NESTED
    input.Body.query.filter.propertyFilter.value.excludeFromIndexes == BOOLEAN
    input.Body.query.filter.propertyFilter.value.geoPointValue.latitude == NUMBER
    input.Body.query.filter.propertyFilter.value.geoPointValue.longitude == NUMBER
    input.Body.query.filter.propertyFilter.value.integerValue == STRING
    input.Body.query.filter.propertyFilter.value.keyValue.partitionId.databaseId == STRING
    input.Body.query.filter.propertyFilter.value.keyValue.partitionId.namespaceId == STRING
    input.Body.query.filter.propertyFilter.value.keyValue.partitionId.projectId == STRING
    input.Body.query.filter.propertyFilter.value.keyValue.path[_].id == STRING
    input.Body.query.filter.propertyFilter.value.keyValue.path[_].kind == STRING
    input.Body.query.filter.propertyFilter.value.keyValue.path[_].name == STRING
    input.Body.query.filter.propertyFilter.value.meaning == INTEGER
    input.Body.query.filter.propertyFilter.value.nullValue == enum_ValueNullValue[_]
    input.Body.query.filter.propertyFilter.value.stringValue == STRING
    input.Body.query.filter.propertyFilter.value.timestampValue == STRING
    input.Body.query.kind[_].name == STRING
    input.Body.query.limit == INTEGER
    input.Body.query.offset == INTEGER
    input.Body.query.order[_].direction == enum_PropertyOrderDirection[_]
    input.Body.query.order[_].property.name == STRING
    input.Body.query.projection[_].property.name == STRING
    input.Body.query.startCursor == STRING
    input.Body.readOptions.newTransaction.readOnly.readTime == STRING
    input.Body.readOptions.newTransaction.readWrite.previousTransaction == STRING
    input.Body.readOptions.readConsistency == enum_ReadOptionsReadConsistency[_]
    input.Body.readOptions.readTime == STRING
    input.Body.readOptions.transaction == STRING
    input.ReqMap.ProjectID == STRING
    input.ProviderMetadata.Region == STRING
    input.ProviderMetadata.ProjectID == STRING
}