/*
 * Copyright (c) 2002-2004, Index Data.
 * See the file LICENSE for details.
 *
 * $Id: diagsrw.c,v 1.1 2004/11/21 21:56:28 adam Exp $
 */
/**
 * \file diagsrw.c
 * \brief SRW/SRU Diagnostic messages.
 */

#include <yaz/srw.h>

static struct {
    int code;
    const char *msg;
} yaz_srw_codes [] = {
{1, "Permanent system error"}, 
{2, "System temporarily unavailable"}, 
{3, "Authentication error"}, 
{4, "Unsupported operation"},
{5, "Unsupported version"},
{6, "Unsupported parameter value"},
{7, "Mandatory parameter not supplied"},
{8, "Unsupported parameter"},
/* Diagnostics Relating to CQL */
{10, "Query syntax error"}, 
{11, "Unsupported query type"}, 
{12, "Too many characters in query"}, 
{13, "Invalid or unsupported use of parentheses"}, 
{14, "Invalid or unsupported use of quotes"}, 
{15, "Unsupported context set"}, 
{16, "Unsupported index"}, 
{17, "Unsupported combination of index and context set"}, 
{18, "Unsupported combination of indexes"}, 
{19, "Unsupported relation"}, 
{20, "Unsupported relation modifier"}, 
{21, "Unsupported combination of relation modifers"}, 
{22, "Unsupported combination of relation and index"}, 
{23, "Too many characters in term"}, 
{24, "Unsupported combination of relation and term"}, 
{25, "Special characters not quoted in term"}, 
{26, "Non special character escaped in term"}, 
{27, "Empty term unsupported"}, 
{28, "Masking character not supported"}, 
{29, "Masked words too short"}, 
{30, "Too many masking characters in term"}, 
{31, "Anchoring character not supported"}, 
{32, "Anchoring character in unsupported position"}, 
{33, "Combination of proximity/adjacency and masking characters not supported"}, 
{34, "Combination of proximity/adjacency and anchoring characters not supported"}, 
{35, "Terms only exclusion stopwords"}, 
{36, "Term in invalid format for index or relation"}, 
{37, "Unsupported boolean operator"}, 
{38, "Too many boolean operators in query"}, 
{39, "Proximity not supported"}, 
{40, "Unsupported proximity relation"}, 
{41, "Unsupported proximity distance"}, 
{42, "Unsupported proximity unit"}, 
{43, "Unsupported proximity ordering"}, 
{44, "Unsupported combination of proximity modifiers"}, 
{45, "Prefix assigned to multiple identifiers"}, 
{46, "Unsupported boolean modifier"},
{47, "Cannot process query; reason unknown"},
{48, "Query feature unsupported"},
{49, "Masking character in unsupported position"},
/* Diagnostics Relating to Result Sets */
{50, "Result sets not supported"}, 
{51, "Result set does not exist"},
{52, "Result set temporarily unavailable"}, 
{53, "Result sets only supported for retrieval"}, 
{54, "Retrieval may only occur from an existing result set"}, 
{55, "Combination of result sets with search terms not supported"}, 
{56, "Only combination of single result set with search terms supported"}, 
{57, "Result set created but no records available"}, 
{58, "Result set created with unpredictable partial results available"}, 
{59, "Result set created with valid partial results available"}, 
{60, "Result set no created: too many records retrieved"}, 
/* Diagnostics Relating to Records */
{61, "First record position out of range"}, 
{62, "Negative number of records requested"}, 
{63, "System error in retrieving records"}, 
{64, "Record temporarily unavailable"}, 
{65, "Record does not exist"}, 
{66, "Unknown schema for retrieval"}, 
{67, "Record not available in this schema"}, 
{68, "Not authorised to send record"}, 
{69, "Not authorised to send record in this schema"}, 
{70, "Record too large to send"}, 
{71, "Unsupported record packing"},
{72, "XPath retrieval unsupported"},
{73, "XPath expression contains unsupported feature"},
{74, "Unable to evaluate XPath expression"},
/* Diagnostics Relating to Sorting */
{80, "Sort not supported"}, 
{81, "Unsupported sort type"}, 
{82, "Unsupported sort sequence"}, 
{83, "Too many records to sort"}, 
{84, "Too many sort keys to sort"}, 
{85, "Duplicate sort keys"}, 
{86, "Cannot sort: incompatible record formats"}, 
{87, "Unsupported schema for sort"}, 
{88, "Unsupported path for sort"}, 
{89, "Path unsupported for schema"}, 
{90, "Unsupported direction value"}, 
{91, "Unsupported case value"}, 
{92, "Unsupported missing value action"}, 
/* Diagnostics Relating to Explain */
{100, "Explain not supported"}, 
{101, "Explain request type not supported (SOAP vs GET)"}, 
{102, "Explain record temporarily unavailable"},
/* Diagnostics Relating to Stylesheets */
{110, "Stylesheets not supported"},
{111, "Unsupported stylesheet"},
/* Diagnostics relating to Scan */
{120, "Response position out of range"},
{121, "Too many terms requested"},
{0, 0}
};

const char *yaz_diag_srw_str (int code)
{
    int i;
    for (i = 0; yaz_srw_codes[i].code; i++)
        if (yaz_srw_codes[i].code == code)
            return yaz_srw_codes[i].msg;
    return 0;
}

