0. Requisitos A documentação dos adaptadores do ActiveRecord [0], em especial do AbstractAdapter, fornece exemplos interessantes e a interface a ser implementada por conectores. A conexão com o MonetDB é gerenciada pela gem MonetDB, disponibilizada no repositório oficial, cujo fork pode ser encontrado em [1]. [0] https://github.com/rails/rails/tree/4-2-stable/activerecord/lib/active_record/connection_adapters [1] https://gitlab.c3sl.ufpr.br/simcaq/monetdb-sql 1. Sobre o projeto A ideia do projeto é implementar inicialmente um adaptador Rails para o SGBD MonetDB com o mínimo de funções necessárias para o funcionamento correto no ActiveRecord a partir da versão 4. Assim que tivermos um protótipo funcional, disponibilizá-lo para a comunidade via RubyGems. Depois disso, implementar as demais funcionalidades suportadas pelo banco e pelo próprio ActiveRecord. 2. Métodos a serem implementados na versão inicial Métodos marcados com: - (!) devem ser implementados, seguindo a interface do ActiveRecord::AbstractAdapter - (*) devem ser verificados no MonetDB. Se as funções do AbstractAdapter funcionarem, não é necessário implementá-las na versão inicial do adaptador Módulo (namespace): ActiveRecord::ConnectionAdapters::MonetDB monetdb_adapter.rb - implementar uma classe explain e mudar a função supports_explain? (próxima versão) - implementar uma forma de suportar extensões do banco e mudar supports_extensions? (próxima versão) - implementar classes de tipos "extras" e adicioná-las no register_type_map (JSON, UUID e URL) (versão futura) monetdb/database_statements.rb |- DatabaseStatements |- select_value (*) |- select_values (*) |- select_rows (*) |- execute (!) - OK |- exec_query (!) - OK Just without cache. We need to implement this later |- exec_insert (!) - OK |- exec_delete (!) |- truncate (!) |- exec_update (!) |- insert_sql (!) |- update_sql (!) |- delete_sql (!) |- sql_for_insert (!) monetdb/schema_statements.rb |- SchemaStatements |- native_database_types (*) |- data_sources (!) |- data_source_exists? (!) |- table_exists? (!) |- columns (!) |- column_exists? (!) |- rename_table (!) |- drop_table (*) |- add_column (!) |- remove_columns (*) |- remove_column (*) |- change_column (!) |- change_column_default (!) |- change_column_null (!) |- rename_column (!) |- add_index (*) |- remove_index (*) |- remove_index! (*) |- rename_index (*) |- index_name (*) |- index_name_exists? (*) |- add_reference (*) |- remove_reference (*) |- foreign_keys (!) |- add_foreign_key (*) |- remove_foreign_key (*) |- foreign_key_column_for (*) |- type_to_sql (*) |- columns_for_distinct (*) |- quoted_columns_for_index (*) monetdb/schema_creation.rb |- SchemaCreation (*) |- accept (*) |- visit_AddColumn (*) |- visit_AlterTable (*) |- visit_ColumnDefinition (*) |- visit_TableDefinition (*) |- visit_AddForeignKey (*) |- visit_DropForeignKey (*) |- column_options (*) |- quote_column_name (*) |- quote_table_name (*) |- type_to_sql (*) |- add_column_options! (*) |- quote_value (*) |- options_include_default? (*) |- action_sql (*) |- type_for_column (*) monetdb/schema_definitions.rb |- IndexDefinition (*) |- ColumnDefinition (*) |- ForeignKeyDefinition (*)