Skip to content
Snippets Groups Projects
adapter_methods.txt 3.27 KiB
Newer Older
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 (*)