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)
37
38
39
40
41
42
43
44
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
monetdb/database_statements.rb
|- DatabaseStatements
|- select_value (*)
|- select_values (*)
|- select_rows (*)
|- execute (!)
|- exec_query (!)
|- exec_insert (!)
|- 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 (*)