Commit Graph

129 Commits

Author SHA1 Message Date
Tomasz Sowa 758bd4909f ModelContainerWrapper: added size() method 2021-11-24 13:20:25 +01:00
Tomasz Sowa 330d945130 SpaceWrapper: last_for_loop_status has been removed 2021-11-23 19:43:56 +01:00
Tomasz Sowa c14b0eb626 removed Wrapper class 2021-11-22 15:45:44 +01:00
Tomasz Sowa 4a8fa0c34c removed MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER
removed Model::get_wrapper(...) method
2021-11-21 21:10:16 +01:00
Tomasz Sowa b9990e3b8c use MORM_MODEL_WORK_MODE_PUT_FIELD_RAW_VALUE_TO_STREAM instead of MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER when iterating through models containers 2021-11-08 00:43:01 +01:00
Tomasz Sowa f66f5b321c changed name: fun_info -> env 2021-11-05 22:23:54 +01:00
Tomasz Sowa 318d9d447f Merge branch 'ezc_types' of ssh://gitea.ttmath.org:2299/tomasz.sowa/morm into ezc_types 2021-11-05 09:44:14 +01:00
Tomasz Sowa 4ba0f7133b remove field(...) methods with void (ClassName::*method)(morm::Wrapper &) arguments
use new variables: ezc_var_space_local and ezc_var_date from ModelEnv
2021-11-05 09:40:16 +01:00
Tomasz Sowa 5328465e5e Model::get_raw_value: changed parameter: fun_info -> env 2021-10-27 14:24:48 +02:00
Tomasz Sowa df1bb0e56d Model::get_raw_value(...) method do not get pt::Stream& now, only Ezc::Env<>& 2021-10-20 08:29:38 +02:00
Tomasz Sowa 0fff26bf2f start working on types for ezc library (types branch): Ezc::FunInfo<> renamed to Ezc::Env<> 2021-09-08 15:34:40 +02:00
Tomasz Sowa e682e057ad added to SpaceWrapper class: void invalidate_iterators(size_t space_index_start) 2021-08-13 21:43:02 +02:00
Tomasz Sowa f94a9e27db added flags FT::json and FT::space for pt::Space class - serializing/parsing to/from json/space 2021-08-12 21:56:32 +02:00
Tomasz Sowa d162ca13bb fixed: in Model::add_field_for_select(...) there was a table name added 2021-07-07 01:06:01 +02:00
Tomasz Sowa f4d92bec5d added clearing of existing objects in Wrapper::operator=(...) 2021-07-01 23:22:49 +02:00
Tomasz Sowa dc6c70499c added: Wrapper class as a wrapper for: a model, model container (list/vector), Space or Date
added BaseObjectWrapper as base class for: SpaceWrapper and ModelContainerWrapper
removed: ModelWrapperModel, now one Model doesn't need a wrapper
renamed: ModelWrapperSpace -> SpaceWrapper, now as a base class it has BaseObjectWrapper
renamed: Model::get_model_wrapper() -> Model::get_wrapper() - now it returns Wrapper object
removed logging from Model::get_model() and Model::get_wrapper()
field() methods don't take ModelWrapper** but Wrapper& now
2021-07-01 22:55:56 +02:00
Tomasz Sowa 84fd351bfc fixed: in BaseExpression::put_field_value_list_model() model_env_local.model pointer was not set to the child object
reported by clang with -fsanitize=undefined
main.cpp:55:63: runtime error: member access within address 0x614000000040 which does not point to an object of type 'Krolik'
0x614000000040: note: object is of type 'Item'
 02 00 00 73  00 4e 75 00 00 00 00 00  a0 b9 ff ff ff 7f 00 00  c0 80 ff ff ff 7f 00 00  00 00 00 00
              ^~~~~~~~~~~~~~~~~~~~~~~
              vptr for 'Item'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior main.cpp:55:63 in
main.cpp:55:97: runtime error: member access within address 0x614000000040 which does not point to an object of type 'Krolik'
0x614000000040: note: object is of type 'Item'
 02 00 00 73  00 4e 75 00 00 00 00 00  a0 b9 ff ff ff 7f 00 00  c0 80 ff ff ff 7f 00 00  00 00 00 00
              ^~~~~~~~~~~~~~~~~~~~~~~
              vptr for 'Item'
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior main.cpp:55:97 in
2021-07-01 22:39:50 +02:00
Tomasz Sowa 097c09b9e3 added to Model: virtual bool db_query(const char ** raw_sql, size_t len); 2021-06-27 22:43:10 +02:00
Tomasz Sowa e35a1d09a5 added ModelWrapper::space_indices_table_size() method 2021-06-25 16:18:06 +02:00
Tomasz Sowa 89148de66d updated samples
- pikotools is in src subdirectory now
- map_fields() -> fields()
- prepare_table() -> table()
- instead of pt::MainSpaceParser we have pt::MainOptionsParser now
2021-06-24 21:14:29 +02:00
Tomasz Sowa 86bf9cf688 added ModelWrapperSpace for wrapping the pt::Space class 2021-06-22 17:59:44 +02:00
Tomasz Sowa e74575db42 fixed: in ModelWrapper::clear_childs() childs_map.clear() was called in the loop, should be at the end 2021-06-22 11:59:11 +02:00
Tomasz Sowa a8fe798279 fixed: getters method (Model::*getter_method)(pt::Stream &) produced boolean value when serializing to flat string
- changed in Model::field_list_generic(...): message "you should set FT::is_foreign_key or FT::is_foreign_key_in_child flag" print only
  for work mode MORM_MODEL_WORK_MODE_SET_PARENT_ID or MORM_MODEL_WORK_MODE_ITERATE_THROUGH_CHILDS_WITHOUT_FOREIGN_KEY
- pt::TextStream::to_string(...) is now pt::TextStream::to_str(...)
- in Model::get_raw_value() for ezc 'pt::TextStream & stream' changed to 'pt::Stream & stream' (a base class of pt::TextStream)
  similar in field(...) methods which take getters: void (Model::*getter_method)(pt::TextStream &) -> void (Model::*getter_method)(pt::Stream &)
2021-06-20 17:49:54 +02:00
Tomasz Sowa aba454a4bf methods Model::get_raw_value(...) now returns boolean - true if a field was found 2021-06-19 20:25:38 +02:00
Tomasz Sowa 9a142548d0 fixed in Model::field_generic_put_raw_value_to_stream() - a boolean status for ezc was not set
added to Model:
- method field() which can take a pointer to a member which returns bool:
  void field(const wchar_t * field_name, bool (ClassName::*method)(), const morm::FT & field_type = morm::FT::default_type)
- method field() which can take a pointer to a member which can set morm::ModelWrapper object
  void field(const wchar_t * field_name, void (ClassName::*method)(morm::ModelWrapper **), const morm::FT & field_type = morm::FT::default_type)
- methods: bool Model::convert_to_bool(...) - they are used for creating a result for ezc from local fields
2021-06-18 19:05:50 +02:00
Tomasz Sowa 5cf55ecce3 added basic support for containers with pointers to models
added to Model:
template<typename ContainerItemType>
void field(const wchar_t * db_field_name, const wchar_t * flat_field_name, std::list<ContainerItemType*> & field_value, const FT & field_type = FT::default_type);

template<typename ContainerItemType>
void field(const wchar_t * db_field_name, const wchar_t * flat_field_name, std::vector<ContainerItemType*> & field_value, const FT & field_type = FT::default_type);
2021-06-17 21:31:58 +02:00
Tomasz Sowa dc1c601eac in Model: added a test whether Model is a base class of ContainerItemType (list/vector) when doing MORM_MODEL_WORK_MODE_GET_MODEL_WRAPPER 2021-06-16 22:23:30 +02:00
Tomasz Sowa d8f7216a73 added .editorconfig file 2021-06-16 14:21:34 +02:00
Tomasz Sowa aeb02f82b1 changed the way how we get a specific field value - now we do not use expressions (BaseExpression), to get the raw value we don't need an expression object:
- removed MORM_WORK_MODE_GET_SPECIFIC_FIELD_VALUE from expression work mode
- removed: void BaseExpression::field(const wchar_t * field_name, void (Model::*getter_method)(pt::TextStream &), const FT & field_type, ModelEnv * model_env)
- removed from BaseExpression: template<typename FunInfoStreamType> void field(const wchar_t * field_name, void (Model::*fun)(Ezc::FunInfo<FunInfoStreamType> &), const FT & field_type, ModelEnv * model_env)
- removed: void FlatConnector::to_text(const wchar_t * flat_field_name, pt::TextStream & stream, Model & model)
- renamed/changed: Model::put_field_value(...) -> Model::get_raw_value()

added classes:
class ModelWrapper - base wrapper class for a model or a model container
class ModelWrapperModel : public ModelWrapper - wrapper for a model
template<typename VectorType> class ModelWrapperVector : public ModelWrapper - wrapper for vector of models
template<typename ListType> class ModelWrapperList : public ModelWrapper - wrapper for list of models
ModelWrapper... classes are used by ezc library for iterating through child models and for iterating in [for...] statements

added to Model:
Model * get_model(const wchar_t * db_field_name, const wchar_t * flat_field_name, bool put_log_if_not_found = true);
ModelWrapper * get_model_wrapper(const wchar_t * db_field_name, const wchar_t * flat_field_name, bool put_log_if_not_found = true);
2021-06-16 14:01:07 +02:00
Tomasz Sowa dd01fafa40 - added support for calling member functions (setters/getters) from Models
those functions can be used with databases and flat files
- removed support for calling static function
- if MORM_HAS_EZC_LIBRARY macro is defined then we can call a function
  which has a first argument Ezc::FunInfo<>& object
  (only for generating flat files)
2021-06-01 19:34:34 +02:00
Tomasz Sowa 515e806a50 start adding support for Ezc library - Ezc::Generator is able to get variable value and call a static function 2021-05-31 18:40:28 +02:00
Tomasz Sowa 284cbc5c66 Merge pull request 'winix_fullmorm' (#4) from winix_fullmorm into master
Reviewed-on: #4
2021-05-27 10:49:46 +02:00
Tomasz Sowa 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
2021-05-21 22:36:04 +02:00
Tomasz Sowa 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
2021-05-21 22:12:10 +02:00
Tomasz Sowa fcd2c4775b updated to the new pikotools api: snake_case names of methods from SpaceParser 2021-05-21 04:51:12 +02:00
Tomasz Sowa 9598cc4def updated to the new pikotools api: SpaceParser::SetSpace(...) methods have been removed 2021-05-21 01:35:16 +02:00
Tomasz Sowa 0ff900f626 updated to the new pikotools api: changed utf8 functions PascalCase to snake_case 2021-05-21 00:32:29 +02:00
Tomasz Sowa 34274ca230 namespace PT renamed to pt 2021-05-20 16:25:01 +02:00
Tomasz Sowa b12037a7e5 added basic support for making migrations 2021-05-14 03:24:53 +02:00
Tomasz Sowa 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()
2021-05-13 19:32:31 +02:00
Tomasz Sowa 6eaa9088e5 renamed in Model: map_fields() to fields(), prepare_table() to table() 2021-05-13 03:27:21 +02:00
Tomasz Sowa 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();
2021-05-13 02:32:03 +02:00
Tomasz Sowa 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)
2021-05-13 00:19:22 +02:00
Tomasz Sowa 179be2864f change FT field_type in PostgreSQLConnector 2021-05-12 05:39:31 +02:00
Tomasz Sowa aadc5be350 FT field_type changed to const FT & field_type in functions arguments 2021-05-12 04:53:23 +02:00
Tomasz Sowa 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
2021-05-12 00:27:35 +02:00
Tomasz Sowa 009955a0fd added support for hex strings and binary strings
added FT::hexadecimal, FT::binary and FT::dont_use_utf8
2021-05-11 22:11:31 +02:00
Tomasz Sowa 2afe111c57 escape table names in Finder (select sql statement)
WIP: #2
2021-04-30 01:23:22 +02:00
Tomasz Sowa 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
2021-04-14 17:46:19 +02:00
Tomasz Sowa 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
2021-04-14 16:21:10 +02:00