<?php
/**
 * Autoloader definition for the DatabaseSchema component.
 *
 * 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.
 *
 * @copyright Copyright (C) 2005-2010 eZ Systems AS. All rights reserved.
 * @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
 * @version //autogentag//
 * @filesource
 * @package DatabaseSchema
 */

return array(
    'ezcDbSchemaException'                       => 'DatabaseSchema/exceptions/exception.php',
    'ezcDbSchemaDropAllColumnsException'         => 'DatabaseSchema/exceptions/drop_all_columns_exception.php',
    'ezcDbSchemaInvalidDiffReaderClassException' => 'DatabaseSchema/exceptions/invalid_diff_reader_class.php',
    'ezcDbSchemaInvalidDiffWriterClassException' => 'DatabaseSchema/exceptions/invalid_diff_writer_class.php',
    'ezcDbSchemaInvalidReaderClassException'     => 'DatabaseSchema/exceptions/invalid_reader_class.php',
    'ezcDbSchemaInvalidSchemaException'          => 'DatabaseSchema/exceptions/invalid_schema.php',
    'ezcDbSchemaInvalidWriterClassException'     => 'DatabaseSchema/exceptions/invalid_writer_class.php',
    'ezcDbSchemaSqliteDropFieldException'        => 'DatabaseSchema/exceptions/sqlite_drop_field_exception.php',
    'ezcDbSchemaUnknownFormatException'          => 'DatabaseSchema/exceptions/unknown_format.php',
    'ezcDbSchemaUnsupportedTypeException'        => 'DatabaseSchema/exceptions/unsupported_type.php',
    'ezcDbSchemaDiffWriter'                      => 'DatabaseSchema/interfaces/schema_diff_writer.php',
    'ezcDbSchemaReader'                          => 'DatabaseSchema/interfaces/schema_reader.php',
    'ezcDbSchemaWriter'                          => 'DatabaseSchema/interfaces/schema_writer.php',
    'ezcDbSchemaDbReader'                        => 'DatabaseSchema/interfaces/db_reader.php',
    'ezcDbSchemaDbWriter'                        => 'DatabaseSchema/interfaces/db_writer.php',
    'ezcDbSchemaDiffDbWriter'                    => 'DatabaseSchema/interfaces/db_diff_writer.php',
    'ezcDbSchemaDiffReader'                      => 'DatabaseSchema/interfaces/schema_diff_reader.php',
    'ezcDbSchemaCommonSqlReader'                 => 'DatabaseSchema/handlers/common_sql_reader.php',
    'ezcDbSchemaCommonSqlWriter'                 => 'DatabaseSchema/handlers/common_sql_writer.php',
    'ezcDbSchemaDiffFileReader'                  => 'DatabaseSchema/interfaces/file_diff_reader.php',
    'ezcDbSchemaDiffFileWriter'                  => 'DatabaseSchema/interfaces/file_diff_writer.php',
    'ezcDbSchemaFileReader'                      => 'DatabaseSchema/interfaces/file_reader.php',
    'ezcDbSchemaFileWriter'                      => 'DatabaseSchema/interfaces/file_writer.php',
    'XMLWriter'                                  => 'DatabaseSchema/handlers/xml/xmlwritersubstitute.php',
    'ezcDbSchema'                                => 'DatabaseSchema/schema.php',
    'ezcDbSchemaAutoIncrementIndexValidator'     => 'DatabaseSchema/validators/auto_increment_index.php',
    'ezcDbSchemaComparator'                      => 'DatabaseSchema/comparator.php',
    'ezcDbSchemaDiff'                            => 'DatabaseSchema/schema_diff.php',
    'ezcDbSchemaField'                           => 'DatabaseSchema/structs/field.php',
    'ezcDbSchemaHandlerDataTransfer'             => 'DatabaseSchema/handlers/data_transfer.php',
    'ezcDbSchemaHandlerManager'                  => 'DatabaseSchema/handler_manager.php',
    'ezcDbSchemaIndex'                           => 'DatabaseSchema/structs/index.php',
    'ezcDbSchemaIndexField'                      => 'DatabaseSchema/structs/index_field.php',
    'ezcDbSchemaIndexFieldsValidator'            => 'DatabaseSchema/validators/index_fields.php',
    'ezcDbSchemaMysqlReader'                     => 'DatabaseSchema/handlers/mysql/reader.php',
    'ezcDbSchemaMysqlWriter'                     => 'DatabaseSchema/handlers/mysql/writer.php',
    'ezcDbSchemaOptions'                         => 'DatabaseSchema/options/schema.php',
    'ezcDbSchemaOracleHelper'                    => 'DatabaseSchema/handlers/oracle/helper.php',
    'ezcDbSchemaOracleReader'                    => 'DatabaseSchema/handlers/oracle/reader.php',
    'ezcDbSchemaOracleWriter'                    => 'DatabaseSchema/handlers/oracle/writer.php',
    'ezcDbSchemaPersistentClassWriter'           => 'DatabaseSchema/handlers/persistent/class_writer.php',
    'ezcDbSchemaPersistentWriter'                => 'DatabaseSchema/handlers/persistent/writer.php',
    'ezcDbSchemaPgsqlReader'                     => 'DatabaseSchema/handlers/pgsql/reader.php',
    'ezcDbSchemaPgsqlWriter'                     => 'DatabaseSchema/handlers/pgsql/writer.php',
    'ezcDbSchemaPhpArrayReader'                  => 'DatabaseSchema/handlers/php_array/reader.php',
    'ezcDbSchemaPhpArrayWriter'                  => 'DatabaseSchema/handlers/php_array/writer.php',
    'ezcDbSchemaSqliteReader'                    => 'DatabaseSchema/handlers/sqlite/reader.php',
    'ezcDbSchemaSqliteWriter'                    => 'DatabaseSchema/handlers/sqlite/writer.php',
    'ezcDbSchemaTable'                           => 'DatabaseSchema/structs/table.php',
    'ezcDbSchemaTableDiff'                       => 'DatabaseSchema/structs/table_diff.php',
    'ezcDbSchemaTypesValidator'                  => 'DatabaseSchema/validators/types.php',
    'ezcDbSchemaUniqueIndexNameValidator'        => 'DatabaseSchema/validators/unique_index_name.php',
    'ezcDbSchemaValidator'                       => 'DatabaseSchema/validator.php',
    'ezcDbSchemaXmlReader'                       => 'DatabaseSchema/handlers/xml/reader.php',
    'ezcDbSchemaXmlWriter'                       => 'DatabaseSchema/handlers/xml/writer.php',
);
?>
