From 3a748821ce849578e46e23e99f507c1ea3b28281 Mon Sep 17 00:00:00 2001 From: Daniele Teti Date: Mon, 27 Nov 2023 12:04:30 +0100 Subject: [PATCH] Aligned for foVersion --- lib/loggerpro/packages/d120/loggerproRT.dproj | 23 +++++++++++ lib/swagdoc/Source/SwagDoc.dproj | 25 ++++++++++++ packages/d120/dmvcframeworkDT.dproj | 23 +++++++++++ packages/d120/dmvcframeworkRT.dproj | 23 +++++++++++ samples/data/ACTIVERECORDDB.FDB | Bin 22679552 -> 22679552 bytes sources/MVCFramework.ActiveRecord.pas | 36 +++++++++++++++--- sources/MVCFramework.Serializer.Commons.pas | 1 + 7 files changed, 126 insertions(+), 5 deletions(-) diff --git a/lib/loggerpro/packages/d120/loggerproRT.dproj b/lib/loggerpro/packages/d120/loggerproRT.dproj index e65d4578..770d81ea 100644 --- a/lib/loggerpro/packages/d120/loggerproRT.dproj +++ b/lib/loggerpro/packages/d120/loggerproRT.dproj @@ -13,6 +13,16 @@ true + + true + Base + true + + + true + Base + true + true Base @@ -52,6 +62,16 @@ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=Daniele Teti;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 120 + + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + + + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) Debug @@ -1006,6 +1026,9 @@ + False + False + False True False diff --git a/lib/swagdoc/Source/SwagDoc.dproj b/lib/swagdoc/Source/SwagDoc.dproj index 6d10aa07..03ba1afb 100644 --- a/lib/swagdoc/Source/SwagDoc.dproj +++ b/lib/swagdoc/Source/SwagDoc.dproj @@ -13,6 +13,16 @@ true + + true + Base + true + + + true + Base + true + true Base @@ -54,6 +64,18 @@ true true + + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + false + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + + + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + false + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) Debug @@ -1019,6 +1041,9 @@ + False + False + False True False diff --git a/packages/d120/dmvcframeworkDT.dproj b/packages/d120/dmvcframeworkDT.dproj index 325cddf1..cb6d748f 100644 --- a/packages/d120/dmvcframeworkDT.dproj +++ b/packages/d120/dmvcframeworkDT.dproj @@ -13,6 +13,16 @@ true + + true + Base + true + + + true + Base + true + true Base @@ -63,6 +73,16 @@ DelphiMVCFramework IDE Expert 120 + + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + + + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) Debug @@ -1042,6 +1062,9 @@ + False + False + False True False diff --git a/packages/d120/dmvcframeworkRT.dproj b/packages/d120/dmvcframeworkRT.dproj index b49f027c..6b04eedf 100644 --- a/packages/d120/dmvcframeworkRT.dproj +++ b/packages/d120/dmvcframeworkRT.dproj @@ -13,6 +13,16 @@ true + + true + Base + true + + + true + Base + true + true Base @@ -64,6 +74,16 @@ DMVCFramework - CopyRight (2010-2020) Daniele Teti and the DMVCFramework Team 120 + + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + + + package=com.embarcadero.$(MSBuildProjectName);label=$(MSBuildProjectName);versionCode=1;versionName=1.0.0;persistent=False;restoreAnyVersion=False;installLocation=auto;largeHeap=False;theme=TitleBar;hardwareAccelerated=true;apiKey= + Debug + activity-1.7.2.dex.jar;annotation-experimental-1.3.0.dex.jar;annotation-jvm-1.6.0.dex.jar;annotations-13.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;billing-6.0.1.dex.jar;biometric-1.1.0.dex.jar;browser-1.4.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;concurrent-futures-1.1.0.dex.jar;core-1.10.1.dex.jar;core-common-2.2.0.dex.jar;core-ktx-1.10.1.dex.jar;core-runtime-2.2.0.dex.jar;cursoradapter-1.0.0.dex.jar;customview-1.0.0.dex.jar;documentfile-1.0.0.dex.jar;drawerlayout-1.0.0.dex.jar;error_prone_annotations-2.9.0.dex.jar;exifinterface-1.3.6.dex.jar;firebase-annotations-16.2.0.dex.jar;firebase-common-20.3.1.dex.jar;firebase-components-17.1.0.dex.jar;firebase-datatransport-18.1.7.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-encoders-proto-16.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.1.3.dex.jar;firebase-installations-interop-17.1.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-23.1.2.dex.jar;fmx.dex.jar;fragment-1.2.5.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;kotlin-stdlib-1.8.22.dex.jar;kotlin-stdlib-common-1.8.22.dex.jar;kotlin-stdlib-jdk7-1.8.22.dex.jar;kotlin-stdlib-jdk8-1.8.22.dex.jar;kotlinx-coroutines-android-1.6.4.dex.jar;kotlinx-coroutines-core-jvm-1.6.4.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.6.1.dex.jar;lifecycle-livedata-2.6.1.dex.jar;lifecycle-livedata-core-2.6.1.dex.jar;lifecycle-runtime-2.6.1.dex.jar;lifecycle-service-2.6.1.dex.jar;lifecycle-viewmodel-2.6.1.dex.jar;lifecycle-viewmodel-savedstate-2.6.1.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;okio-jvm-3.4.0.dex.jar;play-services-ads-22.2.0.dex.jar;play-services-ads-base-22.2.0.dex.jar;play-services-ads-identifier-18.0.0.dex.jar;play-services-ads-lite-22.2.0.dex.jar;play-services-appset-16.0.1.dex.jar;play-services-base-18.1.0.dex.jar;play-services-basement-18.1.0.dex.jar;play-services-cloud-messaging-17.0.1.dex.jar;play-services-location-21.0.1.dex.jar;play-services-maps-18.1.0.dex.jar;play-services-measurement-base-20.1.2.dex.jar;play-services-measurement-sdk-api-20.1.2.dex.jar;play-services-stats-17.0.2.dex.jar;play-services-tasks-18.0.2.dex.jar;print-1.0.0.dex.jar;profileinstaller-1.3.0.dex.jar;room-common-2.2.5.dex.jar;room-runtime-2.2.5.dex.jar;savedstate-1.2.1.dex.jar;sqlite-2.1.0.dex.jar;sqlite-framework-2.1.0.dex.jar;startup-runtime-1.1.1.dex.jar;tracing-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.1.8.dex.jar;transport-runtime-3.1.8.dex.jar;user-messaging-platform-2.0.0.dex.jar;vectordrawable-1.1.0.dex.jar;vectordrawable-animated-1.1.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.7.0.dex.jar + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;Bde;$(DCC_Namespace) Debug @@ -1092,6 +1112,9 @@ + False + False + False True False diff --git a/samples/data/ACTIVERECORDDB.FDB b/samples/data/ACTIVERECORDDB.FDB index b8bde9a5cd3797890ffbd349748bb2feb4b192bb..4fb9ce321920e959745ef9315cf31d7d40113134 100644 GIT binary patch delta 23095 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 H+av!6C$W16 delta 46830 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 D$*23^ diff --git a/sources/MVCFramework.ActiveRecord.pas b/sources/MVCFramework.ActiveRecord.pas index 0cba34e5..85f5e08f 100644 --- a/sources/MVCFramework.ActiveRecord.pas +++ b/sources/MVCFramework.ActiveRecord.pas @@ -689,7 +689,7 @@ type IMVCActiveRecordTableMap = interface ['{517A863F-8BAD-4F66-A520-205149228360}'] - procedure AddTableMap(const AR: TMVCActiveRecord; const TableName: String; const TableMap: TMVCTableMap); + procedure AddTableMap(const AR: TMVCActiveRecord; const TableName: String; var TableMap: TMVCTableMap); function TryGetValue(const AR: TMVCActiveRecord; const TableName: String; out TableMap: TMVCTableMap): Boolean; procedure ExecWithExclusiveLock(Proc: TProc); procedure FlushCache; @@ -748,7 +748,7 @@ type fTableMapDict: TObjectDictionary; function GetCacheKey(const AR: TMVCActiveRecord; const TableName: String): String; inline; protected - procedure AddTableMap(const AR: TMVCActiveRecord; const TableName: String; const TableMap: TMVCTableMap); + procedure AddTableMap(const AR: TMVCActiveRecord; const TableName: String; var TableMap: TMVCTableMap); function TryGetValue(const AR: TMVCActiveRecord; const TableName: String; out TableMap: TMVCTableMap): Boolean; procedure ExecWithExclusiveLock(Proc: TProc); procedure FlushCache; @@ -1583,11 +1583,26 @@ begin end; end; lTableMap.fMap.EndUpdates; + if (lPKCount + lTableMap.fMap.WritableFieldsCount + lTableMap.fMap.ReadableFieldsCount) = 0 then + begin raise EMVCActiveRecord.Create( 'No fields nor PKs defined in class ' + ClassName + '. [HINT] Use MVCTableField in private fields'); - lTableMap.fPartitionInfoInternal := nil; + end; + if lTableMap.fIsVersioned then + begin + lFieldInfo := lTableMap.fMap.GetInfoByFieldName(lTableMap.fVersionFieldName); + if not (lFieldInfo.Writeable and lFieldInfo.Readable) then + begin + raise EMVCActiveRecord + .CreateFmt('Field [%s], is marked as foVersion so must be a Read/Write field - ' + + '[HINT] This constraint is valid only for the field itself, a property mapped over this field can be defined "read-only", "write-only" or "read-write"', + [lTableMap.fVersionFieldName]); + end; + end; + + lTableMap.fPartitionInfoInternal := nil; ActiveRecordTableMapRegistry.AddTableMap(Self, aTableName, lTableMap); fTableMap := lTableMap; finally @@ -4511,11 +4526,22 @@ end; { TMVCTableMapRepository } -procedure TMVCTableMapRepository.AddTableMap(const AR: TMVCActiveRecord; const TableName: String; const TableMap: TMVCTableMap); +procedure TMVCTableMapRepository.AddTableMap(const AR: TMVCActiveRecord; const TableName: String; var TableMap: TMVCTableMap); +var + lKey: string; begin fMREW.BeginWrite; try - fTableMapDict.Add(GetCacheKey(AR, TableName), TableMap); + lKey := GetCacheKey(AR, TableName); + // if, due to multi-threading, the tablemap definition is already in the case, I free the passed TableMap + // and return the TableMap already present in the cache. + LogD(Format('ActiveRecord: Add "%s" to the metadata cache', [lKey])); + if not fTableMapDict.TryAdd(lKey, TableMap) then + begin + LogD(Format('ActiveRecord: Discarded new mapping - cache for "%s" already present', [lKey])); + TableMap.Free; + TableMap := fTableMapDict[lKey]; + end; finally fMREW.EndWrite; end; diff --git a/sources/MVCFramework.Serializer.Commons.pas b/sources/MVCFramework.Serializer.Commons.pas index 6ab4f607..10616d8a 100644 --- a/sources/MVCFramework.Serializer.Commons.pas +++ b/sources/MVCFramework.Serializer.Commons.pas @@ -161,6 +161,7 @@ type property SerializationType: TMVCSerializationType read FSerializationType; end; + //Used by TDataSetUtils MVCColumnAttribute = class(TCustomAttribute) private FFieldName: string;