dm-metamapper 0.2.9 → 0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -40,15 +40,15 @@ module DataMapper
40
40
 
41
41
  def key_to_parent
42
42
  many_to_one.inject({}) do |hash, (r,m)|
43
- hash[m.child_key.first.name] = decolonize(m.parent_model_name)
43
+ hash[m.child_key.first.name] = decolonize(m.parent_model_name.to_const_string)
44
44
  hash
45
45
  end
46
46
  end
47
47
 
48
48
  def child_key(child_model)
49
- child_model.relationships.find {|k,m|
49
+ child_model.relationships.select {|m|
50
50
  m.class.name == 'DataMapper::Associations::ManyToOne::Relationship' && m.parent_model_name == model.name
51
- }[1].child_key.first.name.to_s
51
+ }.first.child_key.first.name.to_s
52
52
  end
53
53
 
54
54
  def output_path(model, template)
@@ -64,30 +64,29 @@ module DataMapper
64
64
 
65
65
  def many_to_one
66
66
  return unless model
67
- @many_to_one ||= model.relationships.select {|k,m|
67
+ @many_to_one ||= model.relationships.select {|m|
68
68
  m.class.name == 'DataMapper::Associations::ManyToOne::Relationship'
69
69
  }
70
-
71
70
  #in case of ruby < 1.9
72
- # if Array === @many_to_one
73
- # temp = @many_to_one
74
- # @many_to_one = {}
75
- # temp.each{|t| @many_to_one[t.name] = t}
76
- # end
71
+ if Array === @many_to_one
72
+ temp = @many_to_one
73
+ @many_to_one = {}
74
+ temp.each{|t| @many_to_one[t.name] = t}
75
+ end
77
76
 
78
77
  @many_to_one
79
78
  end
80
79
  def one_to_many
81
80
  return unless model
82
- @one_to_many ||= model.relationships.select {|k,m|
81
+ @one_to_many ||= model.relationships.select {|m|
83
82
  m.class.name == 'DataMapper::Associations::OneToMany::Relationship'
84
83
  }
85
84
  #in case of ruby < 1.9
86
- # if Array === @one_to_many
87
- # temp = @one_to_many
88
- # @one_to_many = {}
89
- # temp.each{|t| @one_to_many[t.name] = t}
90
- # end
85
+ if Array === @one_to_many
86
+ temp = @one_to_many
87
+ @one_to_many = {}
88
+ temp.each{|t| @one_to_many[t.name] = t}
89
+ end
91
90
 
92
91
  @one_to_many
93
92
  end
@@ -1,6 +1,6 @@
1
1
  module DataMapper
2
2
  module MetaMapper
3
- VERSION = "0.2.9" unless defined?(::DataMapper::MetaMapper::VERSION)
3
+ VERSION = "0.3" unless defined?(::DataMapper::MetaMapper::VERSION)
4
4
  end
5
5
 
6
6
  end
@@ -162,6 +162,38 @@ public:
162
162
  fields, rows);
163
163
  }
164
164
 
165
+ bool insertDirtyFields(std::vector<O_<%= class_name %>>::const_iterator begin,
166
+ std::vector<O_<%= class_name %>>::const_iterator end)
167
+ {
168
+ if (begin == end)
169
+ return true;
170
+ FieldsToRows fields2Rows;
171
+ for (std::vector<O_<%= class_name %>>::const_iterator it = begin;
172
+ it != end; ++it)
173
+ {
174
+ std::vector<std::string> fields;
175
+ std::vector<std::string> row;
176
+ <%- model.generated_properties.each do |property| -%>
177
+ <% if property.name != model.serial.name %>
178
+ if (it->_f_<%= property.name %>._dirty){
179
+ fields.push_back(std::string("<%= property.name %>"));
180
+ row.push_back(toSQLString(it->_<%= property.name %>()));
181
+ }
182
+ <%- end -%>
183
+ <%- end -%>
184
+ fields2Rows[fields].push_back(row);
185
+ }
186
+ bool ret = true;
187
+ for (FieldsToRows::const_iterator it = fields2Rows.begin();
188
+ it != fields2Rows.end(); ++it)
189
+ {
190
+ ret = DBFace::instance()->insert("<%= model.storage_name %>",
191
+ it->first, it->second) && ret;
192
+ }
193
+ return ret;
194
+ }
195
+
196
+
165
197
  Condition _constraint;
166
198
  std::vector<std::string> _tables;
167
199
  };
@@ -1,3 +1,4 @@
1
+ #include <boost/date_time/posix_time/posix_time.hpp>
1
2
  #include "dmmm_dbface.h"
2
3
  #include "dmmm_utils.hpp"
3
4
  using namespace mysqlpp;
@@ -41,11 +42,21 @@ DBFace::connect()
41
42
  }
42
43
  }
43
44
 
45
+ string
46
+ currentDateTime()
47
+ {
48
+ using namespace boost::posix_time;
49
+ ptime now = second_clock::local_time();
50
+
51
+ return to_iso_extended_string(now);
52
+ }
53
+
54
+
44
55
  void
45
56
  DBFace::log(const string& message)
46
57
  {
47
58
  if (_os)
48
- (*_os) << "DMMM: " << message << endl;
59
+ (*_os) << currentDateTime() << " DMMM " << message << endl;
49
60
  }
50
61
 
51
62
  void
@@ -7,6 +7,29 @@
7
7
  #include "dmmm_id.hpp"
8
8
 
9
9
  namespace DMMM {
10
+
11
+ typedef std::vector<std::string> FieldVector;
12
+ struct FieldVectorComp{
13
+ bool operator() (const FieldVector& f1, const FieldVector& f2) const
14
+ {
15
+ if (f1.size() < f2.size())
16
+ return true;
17
+ if (f1.size() > f2.size())
18
+ return false;
19
+ for (size_t i = 0; i < f1.size(); ++i){
20
+ if (f1[i] < f2[i])
21
+ return true;
22
+ if (f1[i] > f2[i])
23
+ return false;
24
+ }
25
+ return false;
26
+ }
27
+ };
28
+
29
+ typedef std::map<FieldVector,
30
+ std::vector<std::vector<std::string> >,
31
+ FieldVectorComp> FieldsToRows;
32
+
10
33
  namespace UTILS {
11
34
 
12
35
  template<class T>
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dm-metamapper
3
3
  version: !ruby/object:Gem::Version
4
- hash: 5
4
+ hash: 13
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 2
9
- - 9
10
- version: 0.2.9
8
+ - 3
9
+ version: "0.3"
11
10
  platform: ruby
12
11
  authors:
13
12
  - Jonah Honeyman
@@ -16,7 +15,7 @@ autorequire:
16
15
  bindir: bin
17
16
  cert_chain: []
18
17
 
19
- date: 2012-07-23 00:00:00 Z
18
+ date: 2012-09-06 00:00:00 Z
20
19
  dependencies: []
21
20
 
22
21
  description: C++ API for databases created with DM. Hard typing, compile time checked queries.