/**************************************************************
 *
 * 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.
 *
 *************************************************************/



#include "dbu_uno.hrc"

String STR_CTW_NO_VIEWS_SUPPORT
{
    Text [ en-US ] = "The destination database does not support views.";
};

String STR_CTW_NO_PRIMARY_KEY_SUPPORT
{
    Text [ en-US ] = "The destination database does not support primary keys.";
};

String STR_CTW_INVALID_DATA_ACCESS_DESCRIPTOR
{
    Text [ en-US ] = "no data access descriptor found, or no data access descriptor able to provide all necessary information";
};

String STR_CTW_ONLY_TABLES_AND_QUERIES_SUPPORT
{
    Text [ en-US ] = "Only tables and queries are supported at the moment.";
};

String STR_CTW_COPY_SOURCE_NEEDS_BOOKMARKS
{
    Text [ en-US ] = "The copy source's result set must support bookmarks.";
};

String STR_CTW_UNSUPPORTED_COLUMN_TYPE
{
    Text [ en-US ] = "Unsupported source column type ($type$) at column position $pos$.";
};

String STR_CTW_ILLEGAL_PARAMETER_COUNT
{
    Text [ en-US ] = "Illegal number of initialization parameters.";
};

String STR_CTW_ERROR_DURING_INITIALIZATION
{
    Text [ en-US ] = "An error occurred during initialization.";
};
String STR_CTW_ERROR_UNSUPPORTED_SETTING
{
    Text [ en-US ] = "Unsupported setting in the copy source descriptor: $name$.";
};
String STR_CTW_ERROR_NO_QUERY
{
    Text [ en-US ] = "To copy a query, your connection must be able to provide queries.";
};
String STR_CTW_ERROR_INVALID_INTERACTIONHANDLER
{
    Text [ en-US ] = "The given interaction handler is invalid.";
};
