From 1ace47266dcd705ce782fa1d249bbaa205b31543 Mon Sep 17 00:00:00 2001 From: Tomasz Sowa Date: Tue, 31 May 2022 01:45:27 +0200 Subject: [PATCH] fix: correctly escape output stream buffer for models getters --- src/baseexpression.cpp | 4 ++++ src/baseexpression.h | 17 ++++++++++++++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/baseexpression.cpp b/src/baseexpression.cpp index d6a64d3..8e90cec 100644 --- a/src/baseexpression.cpp +++ b/src/baseexpression.cpp @@ -44,6 +44,10 @@ namespace morm BaseExpression::BaseExpression() { + /* + * may it would be better for the ModelConnector/JSONConnector/PostgreSQLConnector to provide one scratch buffer? + */ + scratch_buffer = &scratch_buffer_local; clear(); } diff --git a/src/baseexpression.h b/src/baseexpression.h index 91cc328..0a5efa9 100644 --- a/src/baseexpression.h +++ b/src/baseexpression.h @@ -63,6 +63,9 @@ public: BaseExpression(); virtual ~BaseExpression(); + BaseExpression(const BaseExpression &) = delete; + BaseExpression(BaseExpression &&) = delete; + virtual void set_work_mode(int work_mode); virtual int get_work_mode(); @@ -313,10 +316,10 @@ protected: int work_mode; /* what to do: generating fields list, values list or fields-values list */ bool is_first_field; - pt::TextStream * out_stream; - bool use_prefix; + pt::TextStream scratch_buffer_local; + pt::TextStream * scratch_buffer; virtual void generate_from_model(Model & model); @@ -348,7 +351,15 @@ protected: if( out_stream && model_env && model_env->model && getter_method ) { before_field_value_string(field_type); - (model_env->model->*getter_method)(*out_stream); + + if( scratch_buffer ) + { + scratch_buffer->clear(); + (model_env->model->*getter_method)(*scratch_buffer); + esc(*scratch_buffer, *out_stream, field_type); + scratch_buffer->clear(); + } + after_field_value_string(field_type); } }