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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|- 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 (*)