| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.apache.solr.update; |
| |
| import org.apache.lucene.util.BytesRef; |
| import org.apache.lucene.util.BytesRefBuilder; |
| import org.apache.lucene.util.CharsRefBuilder; |
| import org.apache.solr.request.SolrQueryRequest; |
| import org.apache.solr.schema.IndexSchema; |
| import org.apache.solr.schema.SchemaField; |
| |
| /** |
| * |
| */ |
| public class DeleteUpdateCommand extends UpdateCommand { |
| public String id; // external (printable) id, for delete-by-id |
| public String query; // query string for delete-by-query |
| public BytesRef indexedId; |
| public int commitWithin = -1; |
| |
| |
| public DeleteUpdateCommand(SolrQueryRequest req) { |
| super(req); |
| } |
| |
| @Override |
| public String name() { |
| return "delete"; |
| } |
| |
| public boolean isDeleteById() { |
| return query == null; |
| } |
| |
| public void clear() { |
| id = null; |
| query = null; |
| indexedId = null; |
| version = 0; |
| } |
| |
| /** Returns the indexed ID for this delete. The returned BytesRef is retained across multiple calls, and should not be modified. */ |
| public BytesRef getIndexedId() { |
| if (indexedId == null) { |
| IndexSchema schema = req.getSchema(); |
| SchemaField sf = schema.getUniqueKeyField(); |
| if (sf != null && id != null) { |
| BytesRefBuilder b = new BytesRefBuilder(); |
| sf.getType().readableToIndexed(id, b); |
| indexedId = b.get(); |
| } |
| } |
| return indexedId; |
| } |
| |
| public String getId() { |
| if (id == null && indexedId != null) { |
| IndexSchema schema = req.getSchema(); |
| SchemaField sf = schema.getUniqueKeyField(); |
| if (sf != null) { |
| CharsRefBuilder ref = new CharsRefBuilder(); |
| sf.getType().indexedToReadable(indexedId, ref); |
| id = ref.toString(); |
| } |
| } |
| return id; |
| } |
| |
| public String getQuery() { |
| return query; |
| } |
| |
| public void setQuery(String query) { |
| this.query = query; |
| } |
| |
| public void setIndexedId(BytesRef indexedId) { |
| this.indexedId = indexedId; |
| this.id = null; |
| } |
| |
| public void setId(String id) { |
| this.id = id; |
| this.indexedId = null; |
| } |
| |
| @Override |
| public String toString() { |
| StringBuilder sb = new StringBuilder(super.toString()); |
| if (id!=null) sb.append(",id=").append(getId()); |
| if (indexedId!=null) sb.append(",indexedId=").append(getId()); |
| if (query != null) sb.append(",query=`").append(query).append('`'); |
| sb.append(",commitWithin=").append(commitWithin); |
| if (route != null) |
| sb.append(",_route_=").append(route); |
| sb.append('}'); |
| return sb.toString(); |
| } |
| |
| } |