winix_fullmorm #4

Merged
tomasz.sowa merged 27 commits from winix_fullmorm into master 2021-05-27 10:49:46 +02:00
Owner

merge winix_fullmorm branch:

  • changed the way home table names are set
  • field() methods now takes FT field parameters (instead of booleans)
  • field method don't make a test for 'long format' now
  • fixes in escaping table names in Finder
  • added basic support for making migrations
  • has_primary_key flag in Model (I am not sure if this will be changed)
merge winix_fullmorm branch: - changed the way home table names are set - field() methods now takes FT field parameters (instead of booleans) - field method don't make a test for 'long format' now - fixes in escaping table names in Finder - added basic support for making migrations - has_primary_key flag in Model (I am not sure if this will be changed)
tomasz.sowa added 27 commits 2021-05-27 10:49:35 +02:00
133a45c84b Added flag has_primary_key_set to Model
Now we know whether the primary key is defined or not
and we do not allow to make update/remove if the key is not defined.

And when doing insert/update we can put NULL if child models don't have
the primary key set (fields with has_foreign_key set to true).

Now in after_select() we should also set has_primary_key_set flag
or just call get_last_sequence_for_primary_key instead of get_last_sequence.

fixed: added prefix +00 when serializing PT::Date to PostgreSQL (time zone)
(for a column with a time zone there was a wrong value saved)
fcf1d28b18 added FT class which is used in Model::field() methods
FT class has following types:
   enum FieldType
   {
	default_type = 0,
        primary_key = 1,
	foreign_key = 2,
	foreign_key_in_child = 4,
	no_insertable = 8,
	no_updatable = 16,
	no_fetchable = 32, /* not supported yet */
   };
an object of FT class are now used in Model::field() methods instead of insertable/updatable/is_primary_key/... boolean flags

changed the semantic of has_foreign_key (which was a bool) flag in child Models:
now on Models and list/vector of Models you should use either FT::foreign_key or FT::foreign_key_in_child
1. FT::foreign_key means that field with this flag is a foreign key and is pointing to the child object
   (it was the case when has_foreign_key was equal to true beforehand)
2. FT::foreign_key_in child means that the foreign key is in the child object and is pointing to the parent object
f7490594ad changed the way how the table name is set in a Model - added prepare_table() method
removed from Model:
virtual void table_name(PT::TextStream & stream);

added to Model:
virtual void prepare_table();
virtual void table(const wchar_t * table_name);
virtual void table(const wchar_t * schema_name, const wchar_t * table_name);
7bef1d5ead added support for PT::Space as a field in a Model
methods before_field_value_string() and after_field_value_string() moved
from DbExpression and JsonExpression to BaseExpression and made virtual
and now methods before_field_value(const std::wstring &) and after_field_value(const std::wstring &)
(and the rest of them with string arguments) can be removed from DbExpression, PostgreSqlExpression and JsonExpression
9a4fd9b050 fixed: add_field_for_select from Model incorrectly escaped a field string (column name)
fixed: Finder didn't use full table name (schema.table) in "from" clause
1c5d32551a fixed: a null was printed for id when serializing lists/vectors
in BaseExpression::put_field_value_list(): has_primary_key_set flag was not copied to model_env
c87afb40d2 use prepare_table() only with a database and not for flat strings
Model::prepare_table() will create a log: "you should provide the table name...."
and it is not needed if a Model object is used only for flat strings
009955a0fd added support for hex strings and binary strings
added FT::hexadecimal, FT::binary and FT::dont_use_utf8
c7797ff2f1 fixed #2: escape tables/columns names in Finder left join queries
some methods moved from model.h to model.cpp and from baseexpression.h to baseexpression.cpp
a1537cf8d5 BaseExpression: removed methods: put_long_field_name() and put_short_field_name()
now method put_field_name() is not making a test whether field_name is in long format
and only puts the field name (without table name),
this allows us to have a dot in the column name (field_name)
2ad6c8c258 changed the way how to quote schemas, tables and field names,
added escaping table names in insert/update/remove

removed methods from BaseExpression:
virtual void before_short_field_name();
virtual void after_short_field_name();
virtual void before_first_part_long_field_name();
virtual void after_first_part_long_field_name();
virtual void before_second_part_long_field_name();
virtual void after_second_part_long_field_name();

added methods to BaseExpression:
virtual void schema_table_separator();
virtual void table_field_separator();
virtual void before_schema_name();
virtual void after_schema_name();
virtual void before_table_name();
virtual void after_table_name();
virtual void before_field_name();
virtual void after_field_name();
de4abeb91c added to Finder: methods eq() and similar with table_name as an argument
Finder<ModelClass> & eq(const wchar_t * table_name, const wchar_t * field_name, const FieldValue & field_value)
Finder<ModelClass> & eq(const wchar_t * table_name, int table_index, const wchar_t * field_name, const FieldValue & field_value)
and similar for neq(), lt(), gt(), le(), ge() and in()
e0e3465673 fixed: such field types: no_insertable, no_updatable were not taken into account on Model child objects
added: field type: no_removable - it is used only with child Models objects
2f72bd29ec fixed: has_primary_key_set was always set to false in Model::insert()
and this prevented to insert a model which had a primary key set by hand
tomasz.sowa merged commit 284cbc5c66 into master 2021-05-27 10:49:46 +02:00
Sign in to join this conversation.
No reviewers
No Milestone
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: tomasz.sowa/morm#4
No description provided.