Commit Graph
100 Commits
Author SHA1 Message Date
tomasz.sowa 0ce05850b3 add FT::date_only, FT::time_only and FT::no_time_zone flags 2022-10-22 16:29:40 +02:00
tomasz.sowa 38e790c2ac fix: correctly delete child objects - use the original value from save_mode 2022-08-17 07:43:58 +02:00
tomasz.sowa bc92654be9 let Finder::page() takes a page number and not an offset 2022-08-04 14:54:04 +02:00
tomasz.sowa c54a5bed05 add Model::get_logger() 2022-08-01 03:58:07 +02:00
tomasz.sowa 8373f9e9d8 make depend 2022-07-30 03:32:33 +02:00
tomasz.sowa 43dfbd5d5a add possibility of calculating how many rows there were before LIMIT was applied
The Finder has get_rows_counter() method which returns how many rows there were
before LIMIT clause was applied. The select(...) method should be called with
Select::with_rows_counter flag in such a case.

while here:
- change the semantic of Finder, now the select(...) method takes a morm::Select flags,
  and we have such flags:
  - Select::no_auto_generated_columns - do not generate columns from models
  - with_rows_counter - add an additional column for the rows counter
- remove Finder::prepare_to_select() - now use select(...) with no_auto_generated_columns flag
2022-07-11 17:48:13 +02:00
tomasz.sowa 4e8f3af8fc (finder): take pt::TextStream by const ref in raw(...) method 2022-07-08 22:02:02 +02:00
tomasz.sowa 128f43482a make depend 2022-07-05 19:48:17 +02:00
tomasz.sowa 3ddeb78c97 add LICENSE file 2022-07-03 11:01:14 +02:00
tomasz.sowa ea6f9fd13e remove empty src/outstream.h file 2022-06-30 13:30:06 +02:00
tomasz.sowa 1ad3d89d52 change headerfile_morm_* macros to headerfile_morm_src_* 2022-06-30 13:28:38 +02:00
tomasz.sowa 576d537177 add src/version.h with macros: MORM_VERSION_MAJOR, MORM_VERSION_MINOR, MORM_VERSION_PATCH
Let the version be 0.7.0.
2022-06-30 13:19:55 +02:00
tomasz.sowa c89d4f76bc add global Makefile
src/Makefile uses now 'find' for looking for *.cpp files
and we don't need Makefile.o.dep anymore
2022-06-26 06:15:19 +02:00
tomasz.sowa fc50c8ca5e fixed: in Finder::select(PT::TextStream & out_stream, ModelConnector & model_connector)
and Finder::select(PT::TextStream & out_stream, ModelConnector * model_connector)
       there was 'out_stream' parameter ignored

merged from 0890f27fe5733ba8bcfe8ab13e3014b77659c7df
2022-06-25 18:30:53 +02:00
tomasz.sowa 1ace47266d fix: correctly escape output stream buffer for models getters 2022-05-31 01:45:27 +02:00
tomasz.sowa 21117e24c0 do Transaction::commit/rollback only on the same group for which a begin was called 2022-05-27 00:06:56 +02:00
tomasz.sowa dd04ee84b7 capitalize INSERT/UPDATE/DELETE sql statements 2022-05-26 20:19:05 +02:00
tomasz.sowa 1d4de8abe2 add support for nested transactions
while here:
- don't allow to copy/move DbConnector
2022-05-26 20:14:14 +02:00
tomasz.sowa 907f10671d do not allow to copy/move transactions objects 2022-05-26 00:45:49 +02:00
tomasz.sowa c5cf4a2672 add Transaction class as a wrapper for transactions 2022-05-26 00:34:17 +02:00
tomasz.sowa b32917afe7 use pikotools Log::put_multiline() method when printing PostgreSQL error messages 2022-05-25 19:58:13 +02:00
tomasz.sowa 0ce7578de3 fix: the way how we test if there is a connection issue
If there is a connection issue then PQexec returns a resultset now
- older versions of PostgreSQL returned null pointer.
2022-05-25 19:11:42 +02:00
tomasz.sowa 12232bf722 propagate status from childs in Model::insert, Model::update, Model::remove and Model::save 2022-05-24 23:27:07 +02:00
tomasz.sowa 1ad4cb4fbd trim white lines after PostgreSQL error message 2022-05-24 20:06:06 +02:00
tomasz.sowa 56cbebad4f add FT::numeric to be applied on string types 2022-05-16 13:42:51 +02:00
tomasz.sowa 3bde64e033 add possibility to set save status for the whole tree
add method:
void Model::set_save_mode2(SaveMode save_mode, bool update_whole_tree = true)
in the future it may be renamed to set_save_mode()
2022-05-12 00:21:42 +02:00
tomasz.sowa df44296c04 fix: only insert primary keys from the first descendant childs 2022-05-11 23:18:25 +02:00
tomasz.sowa 469294502e allow specify how many times we can try to connect to the database 2022-04-29 05:56:02 +02:00
tomasz.sowa d384929e75 allow to use host connection parameter 2022-04-28 06:03:40 +02:00
tomasz.sowa ac77abb8fd allow to use hostaddr, port or conn_string to connect to PostgreSQL 2022-04-20 18:36:06 +02:00
tomasz.sowa 0bdabfc7b4 fix: put 'char' type directly to the output stream
Char type was converted to wchar_t and then was serialized as utf-8 stream.
Let char type will always be one char, of course it need to be a valid utf-8 sequence.

Let FT::dont_use_utf8 apply only to wchar_t and std::wstring
but ignore it if FT::hexadecimal or FT::binary are defined.

Now we have bool BaseExpression::esc_char(wchar_t val, pt::TextStream & stream) method
which (in most cases) will be used in derived classes.

Let wchar_t (and std::wstring) will be stored as 8 hex digits when using FT::hexadecimal
or FT::binary (and ignore FT::dont_use_utf8 in such a case).
2022-02-08 12:47:34 +01:00
tomasz.sowa 48d515ea64 if pt::Space has FT::json type then let JSONExpression serialize it as json and not string 2022-02-03 11:18:01 +01:00
tomasz.sowa c25a5d2215 - code from JSONExpression::esc(char val, ...) moved to Pikotools (convert/misc.h)
- added ModelContainerWrapper::set_iterator_at_first_model() method
2021-10-12 19:59:19 +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
tomasz.sowa 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
2021-04-12 18:53:55 +02:00
tomasz.sowa 79fd642ef7 make depend 2021-04-09 17:50:23 +02:00
tomasz.sowa c85165b442 updated to the new api of Space from pikotools 2021-04-08 17:21:12 +02:00
tomasz.sowa d78aa325d3 fixed: prepare_to_select() should initialize 'model' but it was initialized only in select() 2021-04-08 17:19:52 +02:00
tomasz.sowa 1e2cbad6a7 make depend 2021-04-08 17:18:48 +02:00
tomasz.sowa 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
2021-03-11 18:40:32 +01:00
tomasz.sowa 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);
2021-03-11 12:22:37 +01:00
tomasz.sowa 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
2021-03-10 16:20:11 +01:00
tomasz.sowa 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)
2021-03-09 18:10:34 +01:00
tomasz.sowa ff551a64b8 in BaseExpression: changed the way how field names are escaped:
methods removed:
  virtual void before_field_name();
  virtual void after_field_name();
methods added:
  virtual void before_short_field_name();
  virtual void after_short_field_name();
  they are used for escaping column names in a case when using short form - just only column_name
  e.g.: [before_short_field_name]column_name[after_short_field_name]
methods added:
  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();
  they are used for escaping column names in a case when using long form: table_name.column_name
  e.g.: [before_first_part_long_field_name]table_name[after_first_part_long_field_name].[before_second_part_long_field_name]column_name[after_second_part_long_field_name]
methods added:
  virtual void esc(wchar_t val, PT::TextStream & stream);
2021-02-24 01:15:17 +01:00
tomasz.sowa 0843e384eb added get_connector() method to Model 2021-02-23 16:58:45 +01:00
tomasz.sowa b672b67e5c added get_vector() methods to Finder and Cursor
bool get_vector(std::vector<ModelClass> & result, bool clear_list = true);
  std::vector<ModelClass> get_vector();
2021-02-23 16:55:28 +01:00
tomasz.sowa c18bb48cc8 fixed: incorrect query was created when using neq() method with finder - there was no and or or conjunction 2021-02-23 16:51:43 +01:00
tomasz.sowa b0a277c0eb added 'using FlatExpression::esc' to JSONExpression in order to suppress clang warning:
'morm::JSONExpression::esc' hides overloaded virtual function [-Woverloaded-virtual]
2021-02-17 18:01:37 +01:00
tomasz.sowa 98536b3413 added .gitignore file 2021-02-17 17:06:51 +01:00
tomasz.sowa 7571535ff4 added comments to PostgreSQLQueryResult::get_value_from_result():
* in the future we can use single row mode:
 * https://www.postgresql.org/docs/10/libpq-single-row-mode.html
 *
 * or just cursors from database:
 * https://www.postgresql.org/docs/current/sql-fetch.html




git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1230 e52654a7-88a9-db11-a3e9-0013d4bc506e
2019-11-22 13:40:30 +00:00
tomasz.sowa d9dc49d699 added some comments (what to do)
git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1220 e52654a7-88a9-db11-a3e9-0013d4bc506e
2019-09-25 17:21:12 +00:00
tomasz.sowa ac67f0079a fixed: in Model::remove(ModelData & model_data, bool remove_whole_tree) we didn't use remove_whole_tree parameter
fixed: compilation erorr when inserting/updating a Model object which has child lists without Model objects such as std::list<int>
added: to Model: methods insert, update, remove and save with one argument: bool save_whole_tree




git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1217 e52654a7-88a9-db11-a3e9-0013d4bc506e
2019-09-25 16:20:37 +00:00
tomasz.sowa 334201fe15 fixed: a parent key was not properly set to simple childs (insert statements)
fixed: a parent key was not set in list of childs (insert statements)




git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1215 e52654a7-88a9-db11-a3e9-0013d4bc506e
2019-09-24 17:08:45 +00:00
tomasz.sowa cff4c1518e added support for UPDATE, INSERT and REMOVE for lists childs
(need some testing)




git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1214 e52654a7-88a9-db11-a3e9-0013d4bc506e
2019-09-24 11:09:11 +00:00
tomasz.sowa a5d5a81a57 removed: doc functionality (generating documentation from a model)
we can use our own class (based on FlatConnector and FlatExpression) to generate documentation




git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1213 e52654a7-88a9-db11-a3e9-0013d4bc506e
2019-09-18 15:55:42 +00:00
tomasz.sowa bb3f69fe8d refactoring: ModelEnv::model_connector_mode renamed to model_work_mode
ModelEnv::model_connector_submode renamed to model_work_submode
             and similarly macros MORM_MODEL_CONNECTOR_MODE.* -> MORM_MODEL_WORK_MODE_*
	     MORM_MODEL_CONNECTOR_SUBMODE.* -> MORM_MODEL_WORK_SUBMODE_*



git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1212 e52654a7-88a9-db11-a3e9-0013d4bc506e
2019-09-18 15:28:06 +00:00
tomasz.sowa 3d73a64f23 rafactoring in Model class (in field_generic and field_model methods)
added: ModelEnv::model_connector_submode (used in iterating through childs)




git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1211 e52654a7-88a9-db11-a3e9-0013d4bc506e
2019-09-18 14:36:13 +00:00
tomasz.sowa ba5f702257 fixed: in 'left join' statements there were not table indices used
added: now we set flag save_mode = DO_NOTHING_ON_SAVE for objects for which
       all fields from a database result set are null



git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1210 e52654a7-88a9-db11-a3e9-0013d4bc506e
2019-09-18 12:29:20 +00:00
tomasz.sowa afce2234c3 fixed: get_value_by_field_name() is able to correctly take values when
we do not use auto generated 'select' and when we are using prefixes for columns



git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1209 e52654a7-88a9-db11-a3e9-0013d4bc506e
2019-09-17 17:55:39 +00:00
tomasz.sowa 057d879b4c added: to Model::to_text() methods added dump_mode (bool) parameter
an additional field (model_save_mode) is printed
changed: if there is no an object the Cursor returns a Model with DO_NOTHING_ON_SAVE flag now
         (DO_INSERT_ON_SAVE was beforehand)
fixed:   when reading a result from db: for auto generated select there should be used
         get_value_by_field_index() method instead of get_value_by_field_name() 
changed: flat string (json) is generated only if a model has DO_INSERT_ON_SAVE
         or DO_UPDATE_ON_SAVE or is dump_mode turn on
         




git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1208 e52654a7-88a9-db11-a3e9-0013d4bc506e
2019-09-13 18:17:02 +00:00
tomasz.sowa c133e949ce changed: SetFieldValueHelper -> FieldValueHelper
it's a much simpler structure now
removed: FieldValueBase and FieldValueContainer




git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1207 e52654a7-88a9-db11-a3e9-0013d4bc506e
2019-09-11 18:16:22 +00:00
tomasz.sowa 0be9feda44 added support in Model for removing the whole tree
(without lists/vectors at the moment yet)




git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1206 e52654a7-88a9-db11-a3e9-0013d4bc506e
2019-09-05 16:32:35 +00:00