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
This commit is contained in:
parent
057d879b4c
commit
afce2234c3
|
@ -15,10 +15,9 @@ main.o: ../../morm/src/dbexpression.h ../../morm/src/baseexpression.h
|
||||||
main.o: ../../morm/src/modelenv.h ../../morm/src/modeldata.h
|
main.o: ../../morm/src/modelenv.h ../../morm/src/modeldata.h
|
||||||
main.o: ../../morm/src/cursorhelper.h ../../morm/src/finderhelper.h
|
main.o: ../../morm/src/cursorhelper.h ../../morm/src/finderhelper.h
|
||||||
main.o: ../../morm/src/fieldvaluehelper.h ../../morm/src/flatexpression.h
|
main.o: ../../morm/src/fieldvaluehelper.h ../../morm/src/flatexpression.h
|
||||||
main.o: ../../morm/src/finder.h ../../pikotools/utf8/utf8.h
|
main.o: ../../morm/src/postgresqlqueryresult.h ../../morm/src/finder.h
|
||||||
main.o: ../../morm/src/cursor.h ../../morm/src/jsonexpression.h
|
main.o: ../../pikotools/utf8/utf8.h ../../morm/src/cursor.h
|
||||||
main.o: ../../morm/src/postgresqlexpression.h
|
main.o: ../../morm/src/jsonexpression.h ../../morm/src/postgresqlexpression.h
|
||||||
main.o: ../../morm/src/dochtmlexpression.h ../../morm/src/jsonconnector.h
|
main.o: ../../morm/src/dochtmlexpression.h ../../morm/src/jsonconnector.h
|
||||||
main.o: ../../morm/src/postgresqlconnector.h
|
main.o: ../../morm/src/postgresqlconnector.h
|
||||||
main.o: ../../morm/src/postgresqlqueryresult.h
|
|
||||||
main.o: ../../morm/src/dochtmlconnector.h person.h language.h attachment.h
|
main.o: ../../morm/src/dochtmlconnector.h person.h language.h attachment.h
|
||||||
|
|
|
@ -65,7 +65,17 @@ void make()
|
||||||
|
|
||||||
morm::Finder<Person> finder(model_connector);
|
morm::Finder<Person> finder(model_connector);
|
||||||
|
|
||||||
Person p = finder.select().where().eq(L"id", 110).get();
|
//Person p = finder.use_table_prefix(false).select().where().eq(L"id", 110).get();
|
||||||
|
|
||||||
|
Person p = finder.prepare_to_select().use_table_prefix(true).raw("select person.id as \"person.id\", person.first_name as \"person.first_name\", person.last_name as \"person.last_name\", person.email as \"person.email\", "
|
||||||
|
"language.id as \"language.id\", language.english_name as \"language.english_name\", language.local_name as \"language.local_name\", language.code_str as \"language.code_str\", language.code_int as \"language.code_int\", "
|
||||||
|
"attachment.id as \"attachment.id\", attachment.person_id as \"attachment.person_id\", attachment.name as \"attachment.name\", attachment.content as \"attachment.content\", attachment.some_flags as \"attachment.some_flags\", attachment.created_date as \"attachment.created_date\","
|
||||||
|
"language2.id as \"language2.id\", language2.english_name as \"language2.english_name\", language2.local_name as \"language2.local_name\", language2.code_str as \"language2.code_str\", language2.code_int as \"language2.code_int\""
|
||||||
|
"FROM public.person AS person "
|
||||||
|
"LEFT JOIN public.language AS language ON person.language_id = language.id "
|
||||||
|
"LEFT JOIN public.attachment AS attachment ON person.id = attachment.person_id "
|
||||||
|
"LEFT JOIN public.language AS language2 ON attachment.language_id = language.id "
|
||||||
|
"where person.id=110").get();
|
||||||
|
|
||||||
std::string str;
|
std::string str;
|
||||||
p.to_text(str, true, true);
|
p.to_text(str, true, true);
|
||||||
|
|
|
@ -7,11 +7,12 @@ baseexpression.o: ../../pikotools/date/date.h
|
||||||
baseexpression.o: ../../pikotools/convert/inttostr.h
|
baseexpression.o: ../../pikotools/convert/inttostr.h
|
||||||
baseexpression.o: ../../pikotools/membuffer/membuffer.h
|
baseexpression.o: ../../pikotools/membuffer/membuffer.h
|
||||||
baseexpression.o: ../../pikotools/textstream/types.h morm_types.h modelenv.h
|
baseexpression.o: ../../pikotools/textstream/types.h morm_types.h modelenv.h
|
||||||
baseexpression.o: modeldata.h cursorhelper.h queryresult.h finderhelper.h
|
baseexpression.o: modeldata.h cursorhelper.h queryresult.h
|
||||||
baseexpression.o: fieldvaluehelper.h model.h modelconnector.h clearer.h
|
baseexpression.o: ../../pikotools/log/log.h ../../pikotools/log/filelog.h
|
||||||
baseexpression.o: dbconnector.h ../../pikotools/log/log.h
|
baseexpression.o: finderhelper.h fieldvaluehelper.h model.h modelconnector.h
|
||||||
baseexpression.o: ../../pikotools/log/filelog.h flatconnector.h
|
baseexpression.o: clearer.h dbconnector.h flatconnector.h dbexpression.h
|
||||||
baseexpression.o: dbexpression.h flatexpression.h ../../pikotools/utf8/utf8.h
|
baseexpression.o: flatexpression.h postgresqlqueryresult.h
|
||||||
|
baseexpression.o: ../../pikotools/utf8/utf8.h
|
||||||
clearer.o: clearer.h ../../pikotools/date/date.h
|
clearer.o: clearer.h ../../pikotools/date/date.h
|
||||||
clearer.o: ../../pikotools/convert/inttostr.h model.h
|
clearer.o: ../../pikotools/convert/inttostr.h model.h
|
||||||
clearer.o: ../../pikotools/textstream/textstream.h
|
clearer.o: ../../pikotools/textstream/textstream.h
|
||||||
|
@ -21,7 +22,7 @@ clearer.o: ../../pikotools/textstream/types.h modelconnector.h dbconnector.h
|
||||||
clearer.o: ../../pikotools/log/log.h ../../pikotools/log/filelog.h
|
clearer.o: ../../pikotools/log/log.h ../../pikotools/log/filelog.h
|
||||||
clearer.o: queryresult.h flatconnector.h dbexpression.h baseexpression.h
|
clearer.o: queryresult.h flatconnector.h dbexpression.h baseexpression.h
|
||||||
clearer.o: morm_types.h modelenv.h modeldata.h cursorhelper.h finderhelper.h
|
clearer.o: morm_types.h modelenv.h modeldata.h cursorhelper.h finderhelper.h
|
||||||
clearer.o: fieldvaluehelper.h flatexpression.h
|
clearer.o: fieldvaluehelper.h flatexpression.h postgresqlqueryresult.h
|
||||||
dbconnector.o: dbconnector.h ../../pikotools/textstream/textstream.h
|
dbconnector.o: dbconnector.h ../../pikotools/textstream/textstream.h
|
||||||
dbconnector.o: ../../pikotools/space/space.h
|
dbconnector.o: ../../pikotools/space/space.h
|
||||||
dbconnector.o: ../../pikotools/textstream/types.h ../../pikotools/date/date.h
|
dbconnector.o: ../../pikotools/textstream/types.h ../../pikotools/date/date.h
|
||||||
|
@ -32,7 +33,8 @@ dbconnector.o: ../../pikotools/log/filelog.h queryresult.h dbexpression.h
|
||||||
dbconnector.o: baseexpression.h morm_types.h modelenv.h modeldata.h
|
dbconnector.o: baseexpression.h morm_types.h modelenv.h modeldata.h
|
||||||
dbconnector.o: cursorhelper.h finderhelper.h fieldvaluehelper.h model.h
|
dbconnector.o: cursorhelper.h finderhelper.h fieldvaluehelper.h model.h
|
||||||
dbconnector.o: modelconnector.h clearer.h flatconnector.h flatexpression.h
|
dbconnector.o: modelconnector.h clearer.h flatconnector.h flatexpression.h
|
||||||
dbconnector.o: ../../pikotools/utf8/utf8.h ../../pikotools/convert/convert.h
|
dbconnector.o: postgresqlqueryresult.h ../../pikotools/utf8/utf8.h
|
||||||
|
dbconnector.o: ../../pikotools/convert/convert.h
|
||||||
dbconnector.o: ../../pikotools/convert/inttostr.h
|
dbconnector.o: ../../pikotools/convert/inttostr.h
|
||||||
dbconnector.o: ../../pikotools/convert/patternreplacer.h
|
dbconnector.o: ../../pikotools/convert/patternreplacer.h
|
||||||
dbconnector.o: ../../pikotools/convert/strtoint.h
|
dbconnector.o: ../../pikotools/convert/strtoint.h
|
||||||
|
@ -45,8 +47,9 @@ dbexpression.o: ../../pikotools/date/date.h
|
||||||
dbexpression.o: ../../pikotools/convert/inttostr.h
|
dbexpression.o: ../../pikotools/convert/inttostr.h
|
||||||
dbexpression.o: ../../pikotools/membuffer/membuffer.h
|
dbexpression.o: ../../pikotools/membuffer/membuffer.h
|
||||||
dbexpression.o: ../../pikotools/textstream/types.h morm_types.h modelenv.h
|
dbexpression.o: ../../pikotools/textstream/types.h morm_types.h modelenv.h
|
||||||
dbexpression.o: modeldata.h cursorhelper.h queryresult.h finderhelper.h
|
dbexpression.o: modeldata.h cursorhelper.h queryresult.h
|
||||||
dbexpression.o: fieldvaluehelper.h
|
dbexpression.o: ../../pikotools/log/log.h ../../pikotools/log/filelog.h
|
||||||
|
dbexpression.o: finderhelper.h fieldvaluehelper.h
|
||||||
dochtmlconnector.o: dochtmlconnector.h flatconnector.h
|
dochtmlconnector.o: dochtmlconnector.h flatconnector.h
|
||||||
dochtmlconnector.o: ../../pikotools/textstream/textstream.h
|
dochtmlconnector.o: ../../pikotools/textstream/textstream.h
|
||||||
dochtmlconnector.o: ../../pikotools/space/space.h
|
dochtmlconnector.o: ../../pikotools/space/space.h
|
||||||
|
@ -56,8 +59,9 @@ dochtmlconnector.o: ../../pikotools/convert/inttostr.h
|
||||||
dochtmlconnector.o: ../../pikotools/membuffer/membuffer.h
|
dochtmlconnector.o: ../../pikotools/membuffer/membuffer.h
|
||||||
dochtmlconnector.o: ../../pikotools/textstream/types.h dochtmlexpression.h
|
dochtmlconnector.o: ../../pikotools/textstream/types.h dochtmlexpression.h
|
||||||
dochtmlconnector.o: flatexpression.h baseexpression.h morm_types.h modelenv.h
|
dochtmlconnector.o: flatexpression.h baseexpression.h morm_types.h modelenv.h
|
||||||
dochtmlconnector.o: modeldata.h cursorhelper.h queryresult.h finderhelper.h
|
dochtmlconnector.o: modeldata.h cursorhelper.h queryresult.h
|
||||||
dochtmlconnector.o: fieldvaluehelper.h
|
dochtmlconnector.o: ../../pikotools/log/log.h ../../pikotools/log/filelog.h
|
||||||
|
dochtmlconnector.o: finderhelper.h fieldvaluehelper.h
|
||||||
dochtmlexpression.o: dochtmlexpression.h flatexpression.h baseexpression.h
|
dochtmlexpression.o: dochtmlexpression.h flatexpression.h baseexpression.h
|
||||||
dochtmlexpression.o: ../../pikotools/textstream/textstream.h
|
dochtmlexpression.o: ../../pikotools/textstream/textstream.h
|
||||||
dochtmlexpression.o: ../../pikotools/space/space.h
|
dochtmlexpression.o: ../../pikotools/space/space.h
|
||||||
|
@ -67,6 +71,7 @@ dochtmlexpression.o: ../../pikotools/convert/inttostr.h
|
||||||
dochtmlexpression.o: ../../pikotools/membuffer/membuffer.h
|
dochtmlexpression.o: ../../pikotools/membuffer/membuffer.h
|
||||||
dochtmlexpression.o: ../../pikotools/textstream/types.h morm_types.h
|
dochtmlexpression.o: ../../pikotools/textstream/types.h morm_types.h
|
||||||
dochtmlexpression.o: modelenv.h modeldata.h cursorhelper.h queryresult.h
|
dochtmlexpression.o: modelenv.h modeldata.h cursorhelper.h queryresult.h
|
||||||
|
dochtmlexpression.o: ../../pikotools/log/log.h ../../pikotools/log/filelog.h
|
||||||
dochtmlexpression.o: finderhelper.h fieldvaluehelper.h
|
dochtmlexpression.o: finderhelper.h fieldvaluehelper.h
|
||||||
flatconnector.o: flatconnector.h ../../pikotools/textstream/textstream.h
|
flatconnector.o: flatconnector.h ../../pikotools/textstream/textstream.h
|
||||||
flatconnector.o: ../../pikotools/space/space.h
|
flatconnector.o: ../../pikotools/space/space.h
|
||||||
|
@ -76,10 +81,10 @@ flatconnector.o: ../../pikotools/convert/inttostr.h
|
||||||
flatconnector.o: ../../pikotools/membuffer/membuffer.h
|
flatconnector.o: ../../pikotools/membuffer/membuffer.h
|
||||||
flatconnector.o: ../../pikotools/textstream/types.h flatexpression.h
|
flatconnector.o: ../../pikotools/textstream/types.h flatexpression.h
|
||||||
flatconnector.o: baseexpression.h morm_types.h modelenv.h modeldata.h
|
flatconnector.o: baseexpression.h morm_types.h modelenv.h modeldata.h
|
||||||
flatconnector.o: cursorhelper.h queryresult.h finderhelper.h
|
flatconnector.o: cursorhelper.h queryresult.h ../../pikotools/log/log.h
|
||||||
|
flatconnector.o: ../../pikotools/log/filelog.h finderhelper.h
|
||||||
flatconnector.o: fieldvaluehelper.h model.h modelconnector.h clearer.h
|
flatconnector.o: fieldvaluehelper.h model.h modelconnector.h clearer.h
|
||||||
flatconnector.o: dbconnector.h ../../pikotools/log/log.h
|
flatconnector.o: dbconnector.h dbexpression.h postgresqlqueryresult.h
|
||||||
flatconnector.o: ../../pikotools/log/filelog.h dbexpression.h
|
|
||||||
flatexpression.o: flatexpression.h baseexpression.h
|
flatexpression.o: flatexpression.h baseexpression.h
|
||||||
flatexpression.o: ../../pikotools/textstream/textstream.h
|
flatexpression.o: ../../pikotools/textstream/textstream.h
|
||||||
flatexpression.o: ../../pikotools/space/space.h
|
flatexpression.o: ../../pikotools/space/space.h
|
||||||
|
@ -88,8 +93,9 @@ flatexpression.o: ../../pikotools/date/date.h
|
||||||
flatexpression.o: ../../pikotools/convert/inttostr.h
|
flatexpression.o: ../../pikotools/convert/inttostr.h
|
||||||
flatexpression.o: ../../pikotools/membuffer/membuffer.h
|
flatexpression.o: ../../pikotools/membuffer/membuffer.h
|
||||||
flatexpression.o: ../../pikotools/textstream/types.h morm_types.h modelenv.h
|
flatexpression.o: ../../pikotools/textstream/types.h morm_types.h modelenv.h
|
||||||
flatexpression.o: modeldata.h cursorhelper.h queryresult.h finderhelper.h
|
flatexpression.o: modeldata.h cursorhelper.h queryresult.h
|
||||||
flatexpression.o: fieldvaluehelper.h
|
flatexpression.o: ../../pikotools/log/log.h ../../pikotools/log/filelog.h
|
||||||
|
flatexpression.o: finderhelper.h fieldvaluehelper.h
|
||||||
jsonconnector.o: jsonconnector.h flatconnector.h
|
jsonconnector.o: jsonconnector.h flatconnector.h
|
||||||
jsonconnector.o: ../../pikotools/textstream/textstream.h
|
jsonconnector.o: ../../pikotools/textstream/textstream.h
|
||||||
jsonconnector.o: ../../pikotools/space/space.h
|
jsonconnector.o: ../../pikotools/space/space.h
|
||||||
|
@ -99,8 +105,9 @@ jsonconnector.o: ../../pikotools/convert/inttostr.h
|
||||||
jsonconnector.o: ../../pikotools/membuffer/membuffer.h
|
jsonconnector.o: ../../pikotools/membuffer/membuffer.h
|
||||||
jsonconnector.o: ../../pikotools/textstream/types.h jsonexpression.h
|
jsonconnector.o: ../../pikotools/textstream/types.h jsonexpression.h
|
||||||
jsonconnector.o: flatexpression.h baseexpression.h morm_types.h modelenv.h
|
jsonconnector.o: flatexpression.h baseexpression.h morm_types.h modelenv.h
|
||||||
jsonconnector.o: modeldata.h cursorhelper.h queryresult.h finderhelper.h
|
jsonconnector.o: modeldata.h cursorhelper.h queryresult.h
|
||||||
jsonconnector.o: fieldvaluehelper.h
|
jsonconnector.o: ../../pikotools/log/log.h ../../pikotools/log/filelog.h
|
||||||
|
jsonconnector.o: finderhelper.h fieldvaluehelper.h
|
||||||
jsonexpression.o: jsonexpression.h flatexpression.h baseexpression.h
|
jsonexpression.o: jsonexpression.h flatexpression.h baseexpression.h
|
||||||
jsonexpression.o: ../../pikotools/textstream/textstream.h
|
jsonexpression.o: ../../pikotools/textstream/textstream.h
|
||||||
jsonexpression.o: ../../pikotools/space/space.h
|
jsonexpression.o: ../../pikotools/space/space.h
|
||||||
|
@ -109,8 +116,9 @@ jsonexpression.o: ../../pikotools/date/date.h
|
||||||
jsonexpression.o: ../../pikotools/convert/inttostr.h
|
jsonexpression.o: ../../pikotools/convert/inttostr.h
|
||||||
jsonexpression.o: ../../pikotools/membuffer/membuffer.h
|
jsonexpression.o: ../../pikotools/membuffer/membuffer.h
|
||||||
jsonexpression.o: ../../pikotools/textstream/types.h morm_types.h modelenv.h
|
jsonexpression.o: ../../pikotools/textstream/types.h morm_types.h modelenv.h
|
||||||
jsonexpression.o: modeldata.h cursorhelper.h queryresult.h finderhelper.h
|
jsonexpression.o: modeldata.h cursorhelper.h queryresult.h
|
||||||
jsonexpression.o: fieldvaluehelper.h
|
jsonexpression.o: ../../pikotools/log/log.h ../../pikotools/log/filelog.h
|
||||||
|
jsonexpression.o: finderhelper.h fieldvaluehelper.h
|
||||||
model.o: model.h ../../pikotools/textstream/textstream.h
|
model.o: model.h ../../pikotools/textstream/textstream.h
|
||||||
model.o: ../../pikotools/space/space.h ../../pikotools/textstream/types.h
|
model.o: ../../pikotools/space/space.h ../../pikotools/textstream/types.h
|
||||||
model.o: ../../pikotools/date/date.h ../../pikotools/convert/inttostr.h
|
model.o: ../../pikotools/date/date.h ../../pikotools/convert/inttostr.h
|
||||||
|
@ -120,6 +128,7 @@ model.o: dbconnector.h ../../pikotools/log/log.h
|
||||||
model.o: ../../pikotools/log/filelog.h queryresult.h flatconnector.h
|
model.o: ../../pikotools/log/filelog.h queryresult.h flatconnector.h
|
||||||
model.o: dbexpression.h baseexpression.h morm_types.h modelenv.h modeldata.h
|
model.o: dbexpression.h baseexpression.h morm_types.h modelenv.h modeldata.h
|
||||||
model.o: cursorhelper.h finderhelper.h fieldvaluehelper.h flatexpression.h
|
model.o: cursorhelper.h finderhelper.h fieldvaluehelper.h flatexpression.h
|
||||||
|
model.o: postgresqlqueryresult.h
|
||||||
modelconnector.o: modelconnector.h clearer.h ../../pikotools/date/date.h
|
modelconnector.o: modelconnector.h clearer.h ../../pikotools/date/date.h
|
||||||
modelconnector.o: ../../pikotools/convert/inttostr.h dbconnector.h
|
modelconnector.o: ../../pikotools/convert/inttostr.h dbconnector.h
|
||||||
modelconnector.o: ../../pikotools/textstream/textstream.h
|
modelconnector.o: ../../pikotools/textstream/textstream.h
|
||||||
|
@ -156,12 +165,24 @@ postgresqlexpression.o: ../../pikotools/convert/inttostr.h
|
||||||
postgresqlexpression.o: ../../pikotools/membuffer/membuffer.h
|
postgresqlexpression.o: ../../pikotools/membuffer/membuffer.h
|
||||||
postgresqlexpression.o: ../../pikotools/textstream/types.h morm_types.h
|
postgresqlexpression.o: ../../pikotools/textstream/types.h morm_types.h
|
||||||
postgresqlexpression.o: modelenv.h modeldata.h cursorhelper.h queryresult.h
|
postgresqlexpression.o: modelenv.h modeldata.h cursorhelper.h queryresult.h
|
||||||
postgresqlexpression.o: finderhelper.h fieldvaluehelper.h
|
postgresqlexpression.o: ../../pikotools/log/log.h
|
||||||
|
postgresqlexpression.o: ../../pikotools/log/filelog.h finderhelper.h
|
||||||
|
postgresqlexpression.o: fieldvaluehelper.h
|
||||||
postgresqlqueryresult.o: postgresqlqueryresult.h queryresult.h
|
postgresqlqueryresult.o: postgresqlqueryresult.h queryresult.h
|
||||||
queryresult.o: queryresult.h ../../pikotools/utf8/utf8.h
|
postgresqlqueryresult.o: ../../pikotools/log/log.h
|
||||||
|
postgresqlqueryresult.o: ../../pikotools/textstream/textstream.h
|
||||||
|
postgresqlqueryresult.o: ../../pikotools/space/space.h
|
||||||
|
postgresqlqueryresult.o: ../../pikotools/textstream/types.h
|
||||||
|
postgresqlqueryresult.o: ../../pikotools/date/date.h
|
||||||
|
postgresqlqueryresult.o: ../../pikotools/convert/inttostr.h
|
||||||
|
postgresqlqueryresult.o: ../../pikotools/membuffer/membuffer.h
|
||||||
|
postgresqlqueryresult.o: ../../pikotools/textstream/types.h
|
||||||
|
postgresqlqueryresult.o: ../../pikotools/log/filelog.h
|
||||||
|
queryresult.o: queryresult.h ../../pikotools/log/log.h
|
||||||
queryresult.o: ../../pikotools/textstream/textstream.h
|
queryresult.o: ../../pikotools/textstream/textstream.h
|
||||||
queryresult.o: ../../pikotools/space/space.h
|
queryresult.o: ../../pikotools/space/space.h
|
||||||
queryresult.o: ../../pikotools/textstream/types.h ../../pikotools/date/date.h
|
queryresult.o: ../../pikotools/textstream/types.h ../../pikotools/date/date.h
|
||||||
queryresult.o: ../../pikotools/convert/inttostr.h
|
queryresult.o: ../../pikotools/convert/inttostr.h
|
||||||
queryresult.o: ../../pikotools/membuffer/membuffer.h
|
queryresult.o: ../../pikotools/membuffer/membuffer.h
|
||||||
queryresult.o: ../../pikotools/textstream/types.h
|
queryresult.o: ../../pikotools/textstream/types.h
|
||||||
|
queryresult.o: ../../pikotools/log/filelog.h ../../pikotools/utf8/utf8.h
|
||||||
|
|
33
src/cursor.h
33
src/cursor.h
|
@ -61,6 +61,7 @@ public:
|
||||||
model_connector = c.model_connector;
|
model_connector = c.model_connector;
|
||||||
model_data = c.model_data;
|
model_data = c.model_data;
|
||||||
has_autogenerated_select = c.has_autogenerated_select;
|
has_autogenerated_select = c.has_autogenerated_select;
|
||||||
|
use_table_prefix_for_fetching = c.use_table_prefix_for_fetching;
|
||||||
query_result = c.query_result;
|
query_result = c.query_result;
|
||||||
select_status = c.select_status;
|
select_status = c.select_status;
|
||||||
|
|
||||||
|
@ -71,6 +72,7 @@ public:
|
||||||
|
|
||||||
// helper doesn't have to be copied
|
// helper doesn't have to be copied
|
||||||
cursor_helper.clear();
|
cursor_helper.clear();
|
||||||
|
finder_helper.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -99,10 +101,11 @@ public:
|
||||||
model_connector = nullptr;
|
model_connector = nullptr;
|
||||||
model_data = nullptr;
|
model_data = nullptr;
|
||||||
has_autogenerated_select = false;
|
has_autogenerated_select = false;
|
||||||
|
use_table_prefix_for_fetching = false;
|
||||||
cursor_helper.clear();
|
cursor_helper.clear();
|
||||||
|
finder_helper.clear();
|
||||||
query_result = nullptr;
|
query_result = nullptr;
|
||||||
select_status = false;
|
select_status = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -136,6 +139,12 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
virtual void use_table_prefix(bool use_table_prefix_for_fetching)
|
||||||
|
{
|
||||||
|
this->use_table_prefix_for_fetching = use_table_prefix_for_fetching;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
virtual QueryResult * get_query_result()
|
virtual QueryResult * get_query_result()
|
||||||
{
|
{
|
||||||
return query_result;
|
return query_result;
|
||||||
|
@ -171,14 +180,22 @@ public:
|
||||||
ModelEnv model_env_local;
|
ModelEnv model_env_local;
|
||||||
result.model_env = &model_env_local;
|
result.model_env = &model_env_local;
|
||||||
result.model_env->cursor_helper = &cursor_helper;
|
result.model_env->cursor_helper = &cursor_helper;
|
||||||
|
result.model_env->finder_helper = &finder_helper;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
finder_helper.clear(); // at the moment used only for calculating table prefixes (indices)
|
||||||
cursor_helper.clear();
|
cursor_helper.clear();
|
||||||
cursor_helper.query_result = query_result;
|
cursor_helper.query_result = query_result;
|
||||||
cursor_helper.has_autogenerated_select = has_autogenerated_select;
|
cursor_helper.has_autogenerated_select = has_autogenerated_select;
|
||||||
|
cursor_helper.use_table_prefix_for_fetching_values = use_table_prefix_for_fetching;
|
||||||
result.model_env->model_data = model_data;
|
result.model_env->model_data = model_data;
|
||||||
|
|
||||||
|
if( !cursor_helper.has_autogenerated_select && cursor_helper.use_table_prefix_for_fetching_values )
|
||||||
|
{
|
||||||
|
result.prepare_table_names();
|
||||||
|
}
|
||||||
|
|
||||||
result.before_select();
|
result.before_select();
|
||||||
res = select_status;
|
res = select_status;
|
||||||
|
|
||||||
|
@ -285,7 +302,9 @@ protected:
|
||||||
ModelConnector * model_connector;
|
ModelConnector * model_connector;
|
||||||
ModelData * model_data;
|
ModelData * model_data;
|
||||||
bool has_autogenerated_select;
|
bool has_autogenerated_select;
|
||||||
|
bool use_table_prefix_for_fetching;
|
||||||
CursorHelper cursor_helper;
|
CursorHelper cursor_helper;
|
||||||
|
FinderHelper finder_helper; // may CursorHelper and FinderHelper should be one class?
|
||||||
QueryResult * query_result;
|
QueryResult * query_result;
|
||||||
bool select_status;
|
bool select_status;
|
||||||
|
|
||||||
|
@ -306,17 +325,27 @@ protected:
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
finder_helper.clear();
|
||||||
|
|
||||||
cursor_helper.clear();
|
cursor_helper.clear();
|
||||||
cursor_helper.query_result = query_result;
|
cursor_helper.query_result = query_result;
|
||||||
cursor_helper.has_autogenerated_select = has_autogenerated_select;
|
cursor_helper.has_autogenerated_select = has_autogenerated_select;
|
||||||
|
cursor_helper.use_table_prefix_for_fetching_values = use_table_prefix_for_fetching;
|
||||||
|
|
||||||
added_model.set_connector(model_connector);
|
added_model.set_connector(model_connector);
|
||||||
added_model.clear();
|
added_model.clear();
|
||||||
|
|
||||||
added_model.model_env = &model_env_local;
|
added_model.model_env = &model_env_local;
|
||||||
added_model.model_env->cursor_helper = &cursor_helper;
|
added_model.model_env->cursor_helper = &cursor_helper;
|
||||||
|
added_model.model_env->finder_helper = &finder_helper;
|
||||||
added_model.set_save_mode(Model::DO_UPDATE_ON_SAVE); // IMPROVE ME check if there is a primary key
|
added_model.set_save_mode(Model::DO_UPDATE_ON_SAVE); // IMPROVE ME check if there is a primary key
|
||||||
added_model.model_env->model_data = model_data;
|
added_model.model_env->model_data = model_data;
|
||||||
|
|
||||||
|
if( !cursor_helper.has_autogenerated_select && cursor_helper.use_table_prefix_for_fetching_values )
|
||||||
|
{
|
||||||
|
added_model.prepare_table_names();
|
||||||
|
}
|
||||||
|
|
||||||
added_model.before_select();
|
added_model.before_select();
|
||||||
added_model.map_values_from_query();
|
added_model.map_values_from_query();
|
||||||
added_model.after_select();
|
added_model.after_select();
|
||||||
|
|
|
@ -49,6 +49,10 @@ public:
|
||||||
QueryResult * query_result;
|
QueryResult * query_result;
|
||||||
int current_column;
|
int current_column;
|
||||||
|
|
||||||
|
// used if has_autogenerated_select is equal false
|
||||||
|
// if use_table_prefix_for_fetching_values is true we find a column in such a form: table.column_name instead of just column_name
|
||||||
|
bool use_table_prefix_for_fetching_values;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CursorHelper()
|
CursorHelper()
|
||||||
|
@ -67,6 +71,7 @@ public:
|
||||||
has_autogenerated_select = false;
|
has_autogenerated_select = false;
|
||||||
query_result = nullptr;
|
query_result = nullptr;
|
||||||
current_column = 0;
|
current_column = 0;
|
||||||
|
use_table_prefix_for_fetching_values = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
18
src/finder.h
18
src/finder.h
|
@ -152,6 +152,7 @@ public:
|
||||||
was_query_error = false;
|
was_query_error = false;
|
||||||
last_query_error.clear();
|
last_query_error.clear();
|
||||||
has_autogenerated_select = false;
|
has_autogenerated_select = false;
|
||||||
|
use_table_prefix_for_fetching = false;
|
||||||
|
|
||||||
if( model_connector )
|
if( model_connector )
|
||||||
{
|
{
|
||||||
|
@ -231,10 +232,7 @@ public:
|
||||||
|
|
||||||
if( model_connector && out_stream && db_expression )
|
if( model_connector && out_stream && db_expression )
|
||||||
{
|
{
|
||||||
model.table_name(model.model_env->table_name);
|
model.prepare_table_names();
|
||||||
db_expression->prepare_short_table_name(model.model_env->table_name, model.model_env->table_name_short);
|
|
||||||
|
|
||||||
model.model_env->table_index = finder_helper.add_join_table(model.model_env->table_name_short);
|
|
||||||
|
|
||||||
(*out_stream) << "SELECT ";
|
(*out_stream) << "SELECT ";
|
||||||
model.generate_select_columns(*out_stream);
|
model.generate_select_columns(*out_stream);
|
||||||
|
@ -272,6 +270,16 @@ public:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* used if we are not using auto generated selects
|
||||||
|
*/
|
||||||
|
Finder<ModelClass> & use_table_prefix(bool use_table_prefix_for_fetching)
|
||||||
|
{
|
||||||
|
this->use_table_prefix_for_fetching = use_table_prefix_for_fetching;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Finder<ModelClass> & where()
|
Finder<ModelClass> & where()
|
||||||
{
|
{
|
||||||
if( out_stream && db_expression )
|
if( out_stream && db_expression )
|
||||||
|
@ -500,6 +508,7 @@ public:
|
||||||
Cursor<ModelClass> cursor;
|
Cursor<ModelClass> cursor;
|
||||||
cursor.set_model_data(model_data);
|
cursor.set_model_data(model_data);
|
||||||
cursor.set_has_autogenerated_select(has_autogenerated_select);
|
cursor.set_has_autogenerated_select(has_autogenerated_select);
|
||||||
|
cursor.use_table_prefix(use_table_prefix_for_fetching);
|
||||||
|
|
||||||
if( model_connector && out_stream )
|
if( model_connector && out_stream )
|
||||||
{
|
{
|
||||||
|
@ -584,6 +593,7 @@ private:
|
||||||
FinderHelper finder_helper;
|
FinderHelper finder_helper;
|
||||||
ModelData * model_data;
|
ModelData * model_data;
|
||||||
bool has_autogenerated_select;
|
bool has_autogenerated_select;
|
||||||
|
bool use_table_prefix_for_fetching;
|
||||||
|
|
||||||
|
|
||||||
void set_db_expression()
|
void set_db_expression()
|
||||||
|
|
|
@ -752,5 +752,27 @@ bool Model::is_the_same_field(const wchar_t * field1, const wchar_t * field2)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void Model::prepare_table_names(bool prepare_table_index)
|
||||||
|
{
|
||||||
|
DbConnector * db_connector = model_connector->get_db_connector();
|
||||||
|
|
||||||
|
if( db_connector && model_env )
|
||||||
|
{
|
||||||
|
DbExpression * db_expression = db_connector->get_expression();
|
||||||
|
|
||||||
|
if( db_expression )
|
||||||
|
{
|
||||||
|
table_name(model_env->table_name);
|
||||||
|
db_expression->prepare_short_table_name(model_env->table_name, model_env->table_name_short);
|
||||||
|
|
||||||
|
if( prepare_table_index && model_env->finder_helper )
|
||||||
|
{
|
||||||
|
model_env->table_index = model_env->finder_helper->add_join_table(model_env->table_name_short);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
|
72
src/model.h
72
src/model.h
|
@ -47,7 +47,6 @@
|
||||||
#include "modelenv.h"
|
#include "modelenv.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace morm
|
namespace morm
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -1002,12 +1001,26 @@ protected:
|
||||||
{
|
{
|
||||||
if( !is_empty_field(db_field_name) )
|
if( !is_empty_field(db_field_name) )
|
||||||
{
|
{
|
||||||
// we need to test if the object is actually defined, test nulls on primary key?
|
DbExpression * db_expression = db_connector->get_expression();
|
||||||
|
|
||||||
field_model.before_select();
|
if( db_expression )
|
||||||
field_model.set_save_mode(Model::DO_UPDATE_ON_SAVE); // IMPROVE ME check if there is a primary key
|
{
|
||||||
field_model.map_values_from_query();
|
if( model_env->cursor_helper &&
|
||||||
field_model.after_select();
|
!model_env->cursor_helper->has_autogenerated_select &&
|
||||||
|
model_env->cursor_helper->use_table_prefix_for_fetching_values )
|
||||||
|
{
|
||||||
|
field_model.prepare_table_names();
|
||||||
|
}
|
||||||
|
|
||||||
|
// IMPROVE ME
|
||||||
|
// we need to test if the object is actually defined, test nulls on primary key?
|
||||||
|
// or check every field whether is it null?
|
||||||
|
|
||||||
|
field_model.before_select();
|
||||||
|
field_model.set_save_mode(Model::DO_UPDATE_ON_SAVE); // IMPROVE ME check if there is a primary key
|
||||||
|
field_model.map_values_from_query();
|
||||||
|
field_model.after_select();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1271,33 +1284,39 @@ protected:
|
||||||
template<typename FieldValue>
|
template<typename FieldValue>
|
||||||
void get_value_by_field_name(const wchar_t * field_name, FieldValue & field_value)
|
void get_value_by_field_name(const wchar_t * field_name, FieldValue & field_value)
|
||||||
{
|
{
|
||||||
if( model_env->cursor_helper && model_env->cursor_helper->query_result )
|
DbConnector * db_connector = model_connector->get_db_connector();
|
||||||
|
|
||||||
|
if( db_connector && model_env->cursor_helper && model_env->cursor_helper->query_result )
|
||||||
{
|
{
|
||||||
// std::wstring table_field_name;
|
const char * val_str = nullptr;
|
||||||
|
|
||||||
// CHECK what about escaping field names here?
|
if( model_env->cursor_helper->use_table_prefix_for_fetching_values && model_env->finder_helper )
|
||||||
|
{
|
||||||
|
// CHECK what about escaping field names here?
|
||||||
|
|
||||||
/*
|
std::wstring table_field_name;
|
||||||
* FIX ME
|
PT::TextStream table_field_name_str;
|
||||||
* we need the table name with correct prefix (index)
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
// model_env->table_name.to_string(table_field_name);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// table_field_name += '.';
|
|
||||||
// table_field_name += field_name;
|
|
||||||
|
|
||||||
const char * val_str = model_env->cursor_helper->query_result->get_field_string_value(field_name);
|
table_field_name_str = model_env->table_name_short;
|
||||||
|
|
||||||
|
if( model_env->table_index > 1 )
|
||||||
|
{
|
||||||
|
table_field_name_str << model_env->table_index;
|
||||||
|
}
|
||||||
|
|
||||||
|
table_field_name_str << '.';
|
||||||
|
table_field_name_str << field_name;
|
||||||
|
table_field_name_str.to_string(table_field_name);
|
||||||
|
val_str = model_env->cursor_helper->query_result->get_field_string_value(table_field_name.c_str());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
val_str = model_env->cursor_helper->query_result->get_field_string_value(field_name);
|
||||||
|
}
|
||||||
|
|
||||||
if( val_str )
|
if( val_str )
|
||||||
{
|
{
|
||||||
DbConnector * db_connector = model_connector->get_db_connector();
|
db_connector->get_value(val_str, field_value);
|
||||||
|
|
||||||
if( db_connector )
|
|
||||||
{
|
|
||||||
db_connector->get_value(val_str, field_value);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1455,6 +1474,7 @@ protected:
|
||||||
|
|
||||||
virtual bool is_empty_field(const wchar_t * value);
|
virtual bool is_empty_field(const wchar_t * value);
|
||||||
virtual bool is_the_same_field(const wchar_t * field1, const wchar_t * field2);
|
virtual bool is_the_same_field(const wchar_t * field1, const wchar_t * field2);
|
||||||
|
virtual void prepare_table_names(bool prepare_table_index = true);
|
||||||
|
|
||||||
template<typename ModelClass> friend class Finder;
|
template<typename ModelClass> friend class Finder;
|
||||||
template<typename ModelClass> friend class Cursor;
|
template<typename ModelClass> friend class Cursor;
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, Tomasz Sowa
|
* Copyright (c) 2018-2019, Tomasz Sowa
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -161,6 +161,20 @@ bool PostgreSQLQueryResult::is_null(int row, int col)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PostgreSQLQueryResult::dump_column_names(PT::Log & log)
|
||||||
|
{
|
||||||
|
if( psql_result )
|
||||||
|
{
|
||||||
|
int cols = PQnfields(psql_result);
|
||||||
|
|
||||||
|
for(int i = 0 ; i < cols ; ++i)
|
||||||
|
{
|
||||||
|
log << i << ' ' << PQfname(psql_result, i) << PT::Log::logend;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//int PostgreSQLQueryResult::Rows(PGresult * r)
|
//int PostgreSQLQueryResult::Rows(PGresult * r)
|
||||||
//{
|
//{
|
||||||
// // PQntuples - Returns the number of rows (tuples) in the query result. Because it returns
|
// // PQntuples - Returns the number of rows (tuples) in the query result. Because it returns
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, Tomasz Sowa
|
* Copyright (c) 2018-2019, Tomasz Sowa
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -66,6 +66,7 @@ struct PostgreSQLQueryResult : public QueryResult
|
||||||
|
|
||||||
bool is_null(int row, int col);
|
bool is_null(int row, int col);
|
||||||
|
|
||||||
|
void dump_column_names(PT::Log & log);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, Tomasz Sowa
|
* Copyright (c) 2018-2019, Tomasz Sowa
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -120,6 +120,10 @@ bool QueryResult::is_null(int row, int col)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void QueryResult::dump_column_names(PT::Log & log)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018, Tomasz Sowa
|
* Copyright (c) 2018-2019, Tomasz Sowa
|
||||||
* All rights reserved.
|
* All rights reserved.
|
||||||
*
|
*
|
||||||
* Redistribution and use in source and binary forms, with or without
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
@ -35,6 +35,7 @@
|
||||||
#ifndef headerfile_morm_queryresult
|
#ifndef headerfile_morm_queryresult
|
||||||
#define headerfile_morm_queryresult
|
#define headerfile_morm_queryresult
|
||||||
|
|
||||||
|
#include <log/log.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
|
@ -74,6 +75,7 @@ struct QueryResult
|
||||||
virtual int get_value_length(int row, int col);
|
virtual int get_value_length(int row, int col);
|
||||||
virtual bool is_null(int row, int col);
|
virtual bool is_null(int row, int col);
|
||||||
|
|
||||||
|
virtual void dump_column_names(PT::Log & log);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue