diff --git a/.github/workflows/lazarustestLinux.yml b/.github/workflows/lazarustestLinux.yml index 2485d718..98488830 100644 --- a/.github/workflows/lazarustestLinux.yml +++ b/.github/workflows/lazarustestLinux.yml @@ -4,37 +4,67 @@ on: pull_request: push: paths-ignore: - - "README.md" + - "README.md" branches: - dev jobs: build: runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false matrix: operating-system: [ubuntu-latest] lazarus-versions: [dist, stable, 2.2.4, 2.2.6] + steps: - - name: Checkout source code - uses: actions/checkout@v2 - - name: Install Lazarus - uses: gcarreno/setup-lazarus@v3 - with: - lazarus-version: ${{ matrix.lazarus-versions }} - include-packages: "Indy10, ZeosDBO" - with-cache: false - - name: Build the Main package on Linux - run: lazbuild -B "CORE/Packages/Lazarus/RESTDataWareComponents.lpk" - - - name: Build Indy package on Linux - run: lazbuild -B "CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySockets.lpk" - - - name: Build ShellServices package on Linux - run: lazbuild -B "CORE/Packages/Lazarus/ShellTools/RESTDWShellServices.lpk" - - - name: Build ZeosDriver package on Linux - run: lazbuild -B "CORE/Packages/Lazarus/Drivers/zeos/RESTDWZeosDriver.lpk" - - - name: Build LazarusDriver package on Linux - run: lazbuild -B "CORE/Packages/Lazarus/Drivers/lazdriver/RESTDWLazarusDriver.lpk" + - name: Checkout source code + uses: actions/checkout@v4 + + - name: Install Lazarus + uses: gcarreno/setup-lazarus@v3 + with: + lazarus-version: ${{ matrix.lazarus-versions }} + include-packages: "Indy10, ZeosDBO" + with-cache: false + + - name: Install TaurusTLS runtime package + shell: bash + run: | + set -euo pipefail + + sudo apt-get update + sudo apt-get install -y git libssl-dev + + git clone --depth 1 https://github.com/TurboPack/indy_extras.git "$RUNNER_TEMP/indy_extras" + + TAURUS_LAZ_DIR="$RUNNER_TEMP/indy_extras/TaurusTLS/Packages/lazarus" + + echo "Taurus Lazarus package dir: $TAURUS_LAZ_DIR" + + test -f "$TAURUS_LAZ_DIR/taurustlsrt.lpk" + + lazbuild --primary-config-path="$HOME/.lazarus" \ + --add-package-link="$TAURUS_LAZ_DIR/taurustlsrt.lpk" + + lazbuild --primary-config-path="$HOME/.lazarus" \ + -B "$TAURUS_LAZ_DIR/taurustlsrt.lpk" + + - name: Build the Main package on Linux + run: lazbuild -B "CORE/Packages/Lazarus/RESTDataWareComponents.lpk" + + - name: Build Indy package on Linux + run: lazbuild -B "CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySockets.lpk" + + - name: Build Taurus package on Linux + run: lazbuild -B "CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySocketsTaurus.lpk" + + - name: Build ShellServices package on Linux + run: lazbuild -B "CORE/Packages/Lazarus/ShellTools/RESTDWShellServices.lpk" + + - name: Build ZeosDriver package on Linux + run: lazbuild -B "CORE/Packages/Lazarus/Drivers/zeos/RESTDWZeosDriver.lpk" + + - name: Build LazarusDriver package on Linux + run: lazbuild -B "CORE/Packages/Lazarus/Drivers/lazdriver/RESTDWLazarusDriver.lpk" diff --git a/.github/workflows/lazarustestWindows.yml b/.github/workflows/lazarustestWindows.yml index c499691d..67543bbf 100644 --- a/.github/workflows/lazarustestWindows.yml +++ b/.github/workflows/lazarustestWindows.yml @@ -4,37 +4,64 @@ on: pull_request: push: paths-ignore: - - "README.md" + - "README.md" branches: - dev jobs: build: runs-on: ${{ matrix.operating-system }} + strategy: + fail-fast: false matrix: operating-system: [windows-latest] lazarus-versions: [dist, stable, 2.2.0] + steps: - - name: Checkout source code - uses: actions/checkout@v2 - - name: Install Lazarus - uses: gcarreno/setup-lazarus@v3.2 - with: - lazarus-version: ${{ matrix.lazarus-versions }} - include-packages: "Indy10, ZeosDBO" - with-cache: false - - name: Build the Main package on Windows - run: lazbuild -B "CORE/Packages/Lazarus/RESTDataWareComponents.lpk" - - - name: Build Indy package on Windows - run: lazbuild -B "CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySockets.lpk" - - - name: Build ShellServices package on Windows - run: lazbuild -B "CORE/Packages/Lazarus/ShellTools/RESTDWShellServices.lpk" - - - name: Build ZeosDriver package on Windows - run: lazbuild -B "CORE/Packages/Lazarus/Drivers/zeos/RESTDWZeosDriver.lpk" - - - name: Build LazarusDriver package on Windows - run: lazbuild -B "CORE/Packages/Lazarus/Drivers/lazdriver/RESTDWLazarusDriver.lpk" + - name: Checkout source code + uses: actions/checkout@v4 + + - name: Install Lazarus + uses: gcarreno/setup-lazarus@v3.2 + with: + lazarus-version: ${{ matrix.lazarus-versions }} + include-packages: "Indy10, ZeosDBO" + with-cache: false + + - name: Install TaurusTLS runtime package + shell: pwsh + run: | + $ErrorActionPreference = "Stop" + + git clone --depth 1 https://github.com/TurboPack/indy_extras.git "$env:RUNNER_TEMP\indy_extras" + + $TaurusLazDir = Join-Path $env:RUNNER_TEMP "indy_extras\TaurusTLS\Packages\lazarus" + $TaurusRtPkg = Join-Path $TaurusLazDir "taurustlsrt.lpk" + + Write-Host "Taurus Lazarus package dir: $TaurusLazDir" + + if (-not (Test-Path $TaurusRtPkg)) { + throw "Arquivo taurustlsrt.lpk não encontrado em: $TaurusRtPkg" + } + + lazbuild "--primary-config-path=$env:USERPROFILE\AppData\Local\lazarus" "--add-package-link=$TaurusRtPkg" + lazbuild "--primary-config-path=$env:USERPROFILE\AppData\Local\lazarus" -B "$TaurusRtPkg" + + - name: Build the Main package on Windows + run: lazbuild -B "CORE/Packages/Lazarus/RESTDataWareComponents.lpk" + + - name: Build Indy package on Windows + run: lazbuild -B "CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySockets.lpk" + + - name: Build Taurus package on Windows + run: lazbuild -B "CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySocketsTaurus.lpk" + + - name: Build ShellServices package on Windows + run: lazbuild -B "CORE/Packages/Lazarus/ShellTools/RESTDWShellServices.lpk" + + - name: Build ZeosDriver package on Windows + run: lazbuild -B "CORE/Packages/Lazarus/Drivers/zeos/RESTDWZeosDriver.lpk" + + - name: Build LazarusDriver package on Windows + run: lazbuild -B "CORE/Packages/Lazarus/Drivers/lazdriver/RESTDWLazarusDriver.lpk" diff --git a/CORE/Extras/TaurusTLS.zip b/CORE/Extras/TaurusTLS.zip new file mode 100644 index 00000000..beab1785 Binary files /dev/null and b/CORE/Extras/TaurusTLS.zip differ diff --git a/CORE/Packages/Delphi/Connectors/Ics/RESTDWSocketIcs.dproj b/CORE/Packages/Delphi/Connectors/Ics/RESTDWSocketIcs.dproj index a490ccf4..be023321 100644 --- a/CORE/Packages/Delphi/Connectors/Ics/RESTDWSocketIcs.dproj +++ b/CORE/Packages/Delphi/Connectors/Ics/RESTDWSocketIcs.dproj @@ -2,13 +2,14 @@ {A67F6316-69EF-47DE-B9B2-6F96F4AF1CEB} RESTDWSocketIcs.dpk - 19.5 + 20.3 None True Debug Win32 3 Package + RESTDWSocketIcs true @@ -48,6 +49,11 @@ Base true + + true + Base + true + true Base @@ -128,6 +134,13 @@ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 1033 + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + DEBUG;$(DCC_Define) true @@ -188,7 +201,7 @@ RESTDWSocketIcs.dpk - + @@ -217,16 +230,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -237,12 +240,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -295,6 +292,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -315,6 +322,76 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -325,6 +402,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -495,6 +582,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -672,6 +809,9 @@ 1 + + 1 + @@ -933,15 +1073,18 @@ + False False False False + False False True True + False 12 diff --git a/CORE/Packages/Delphi/Connectors/Ics/RESTDWSocketIcsDesign.dproj b/CORE/Packages/Delphi/Connectors/Ics/RESTDWSocketIcsDesign.dproj index e9ce317e..d9e411de 100644 --- a/CORE/Packages/Delphi/Connectors/Ics/RESTDWSocketIcsDesign.dproj +++ b/CORE/Packages/Delphi/Connectors/Ics/RESTDWSocketIcsDesign.dproj @@ -2,13 +2,14 @@ {645810E3-443D-4DFA-AC30-B0C8146C08FE} RESTDWSocketIcsDesign.dpk - 19.5 + 20.3 VCL True Debug - Win32 + Win64 3 Package + RESTDWSocketIcsDesign true @@ -33,6 +34,11 @@ Base true + + true + Base + true + true Base @@ -99,6 +105,13 @@ rtl;RESTDWSocketIndy;RESTDWSocketIcs;$(DCC_UsePackage) Debug + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + DEBUG;$(DCC_Define) true @@ -154,7 +167,7 @@ RESTDWSocketIcsDesign.dpk - + @@ -169,16 +182,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -189,12 +192,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -247,6 +244,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -267,6 +274,76 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -277,6 +354,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -447,6 +534,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -624,6 +761,9 @@ 1 + + 1 + @@ -885,12 +1025,14 @@ + False False True True + False 12 diff --git a/CORE/Packages/Delphi/Connectors/Indy/RESTDWSocketIndy.dpk b/CORE/Packages/Delphi/Connectors/Indy/RESTDWSocketIndy.dpk index 102993db..832192e5 100644 --- a/CORE/Packages/Delphi/Connectors/Indy/RESTDWSocketIndy.dpk +++ b/CORE/Packages/Delphi/Connectors/Indy/RESTDWSocketIndy.dpk @@ -33,7 +33,8 @@ requires RESTDWCore, IndySystem, IndyCore, - IndyProtocols; + IndyProtocols, + TaurusTLS_RT; contains uRESTDWIdBase in '..\..\..\..\Source\Sockets\Indy\uRESTDWIdBase.pas'; diff --git a/CORE/Packages/Delphi/Connectors/Indy/RESTDWSocketIndy.dproj b/CORE/Packages/Delphi/Connectors/Indy/RESTDWSocketIndy.dproj index 18dc2bfa..9ef5320d 100644 --- a/CORE/Packages/Delphi/Connectors/Indy/RESTDWSocketIndy.dproj +++ b/CORE/Packages/Delphi/Connectors/Indy/RESTDWSocketIndy.dproj @@ -2,13 +2,14 @@ {8B3C90C4-F0A2-4045-BF82-210E62FA85E0} RESTDWSocketIndy.dpk - 19.5 + 20.3 None True Debug Win32 33811 Package + RESTDWSocketIndy true @@ -53,6 +54,11 @@ Base true + + true + Base + true + true Base @@ -93,11 +99,11 @@ None annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug - 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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.0.dex.jar @@ -136,6 +142,13 @@ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 1033 + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + DEBUG;$(DCC_Define) true @@ -175,6 +188,7 @@ + Base @@ -200,7 +214,7 @@ RESTDWSocketIndy.dpk - + @@ -221,7 +235,8 @@ - + + RESTDWSocketIndy.bpl true @@ -235,16 +250,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -255,12 +260,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -313,6 +312,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -333,6 +342,76 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -343,6 +422,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -513,6 +602,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -690,6 +829,9 @@ 1 + + 1 + @@ -951,16 +1093,19 @@ + True True True False + False False False True True + False 12 diff --git a/CORE/Packages/Delphi/Connectors/Indy/RESTDWSocketIndyDesign.dproj b/CORE/Packages/Delphi/Connectors/Indy/RESTDWSocketIndyDesign.dproj index d49f3429..9393c7e6 100644 --- a/CORE/Packages/Delphi/Connectors/Indy/RESTDWSocketIndyDesign.dproj +++ b/CORE/Packages/Delphi/Connectors/Indy/RESTDWSocketIndyDesign.dproj @@ -2,13 +2,14 @@ {FD20C3A3-AC3B-448C-89FA-744644EB144E} RESTDWSocketIndyDesign.dpk - 19.5 + 20.3 None True Debug - Win32 + Win64 558099 Package + RESTDWSocketIndyDesign true @@ -43,6 +44,11 @@ Base true + + true + Base + true + true Base @@ -76,12 +82,12 @@ ..\..\..\..\compiled - 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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug activity-1.1.0.dex.jar;annotation-1.2.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;biometric-1.1.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.1.0.dex.jar;core-runtime-2.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.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;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.2.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.2.0.dex.jar;lifecycle-runtime-2.2.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.2.0.dex.jar;lifecycle-viewmodel-savedstate-2.2.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;savedstate-1.0.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.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.1.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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug activity-1.1.0.dex.jar;annotation-1.2.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;biometric-1.1.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.1.0.dex.jar;core-runtime-2.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.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;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.2.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.2.0.dex.jar;lifecycle-runtime-2.2.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.2.0.dex.jar;lifecycle-viewmodel-savedstate-2.2.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;savedstate-1.0.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.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.1.0.dex.jar @@ -113,6 +119,13 @@ rtl;RESTDWSocketIndy;$(DCC_UsePackage) Debug + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + DEBUG;$(DCC_Define) true @@ -168,7 +181,7 @@ RESTDWSocketIndyDesign.dpk - + @@ -196,16 +209,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -216,12 +219,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -274,6 +271,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -294,6 +301,76 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -304,6 +381,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -474,6 +561,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -651,6 +788,9 @@ 1 + + 1 + @@ -912,14 +1052,17 @@ + True True True True + False True True + False 12 diff --git a/CORE/Packages/Delphi/Drivers/AnyDAC/RESTDWAnyDACDriver.dproj b/CORE/Packages/Delphi/Drivers/AnyDAC/RESTDWAnyDACDriver.dproj index 5db129f9..a8417ffe 100644 --- a/CORE/Packages/Delphi/Drivers/AnyDAC/RESTDWAnyDACDriver.dproj +++ b/CORE/Packages/Delphi/Drivers/AnyDAC/RESTDWAnyDACDriver.dproj @@ -2,13 +2,14 @@ {5B6D7BDD-2939-4069-8FA3-FE2F16712918} RESTDWAnyDACDriver.dpk - 19.5 + 20.3 None True Debug - Win32 + Win64 693267 Package + RESTDWAnyDACDriver true @@ -53,6 +54,11 @@ Base true + + true + Base + true + true Base @@ -86,13 +92,13 @@ None annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug None annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug @@ -110,11 +116,11 @@ true - CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface Debug - CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface Debug @@ -131,6 +137,13 @@ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 1033 + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + DEBUG;$(DCC_Define) true @@ -189,7 +202,7 @@ (untitled) - + true @@ -205,12 +218,7 @@ true - - - RESTDWAnyDACDriver.bpl - true - - + 1 @@ -219,16 +227,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -239,12 +237,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -297,6 +289,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -317,6 +319,76 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -327,6 +399,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -497,6 +579,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -674,6 +806,9 @@ 1 + + 1 + @@ -934,16 +1069,19 @@ + True True True True + False True True True True + False 12 diff --git a/CORE/Packages/Delphi/Drivers/ApolloDB/RESTDWApolloDBDriver.dproj b/CORE/Packages/Delphi/Drivers/ApolloDB/RESTDWApolloDBDriver.dproj index 054ea4c6..885e6fab 100644 --- a/CORE/Packages/Delphi/Drivers/ApolloDB/RESTDWApolloDBDriver.dproj +++ b/CORE/Packages/Delphi/Drivers/ApolloDB/RESTDWApolloDBDriver.dproj @@ -2,13 +2,14 @@ {7514457C-7190-4D6E-A65D-950C052F0397} RESTDWApolloDBDriver.dpk - 19.5 + 20.3 None True Debug - Win32 + Win64 693267 Package + RESTDWApolloDBDriver true @@ -53,6 +54,11 @@ Base true + + true + Base + true + true Base @@ -86,13 +92,13 @@ None annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug None annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug @@ -110,11 +116,11 @@ true - CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface Debug - CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface Debug @@ -131,6 +137,13 @@ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 1033 + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + DEBUG;$(DCC_Define) true @@ -189,7 +202,7 @@ (untitled) - + true @@ -205,12 +218,7 @@ true - - - RESTDWApolloDBDriver.bpl - true - - + 1 @@ -219,16 +227,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -239,12 +237,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -297,6 +289,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -317,6 +319,76 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -327,6 +399,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -497,6 +579,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -674,6 +806,9 @@ 1 + + 1 + @@ -934,16 +1069,19 @@ + True True True True + False True True True True + False 12 diff --git a/CORE/Packages/Delphi/Drivers/FireDAC/RESTDWFireDACDriver.dproj b/CORE/Packages/Delphi/Drivers/FireDAC/RESTDWFireDACDriver.dproj index 77cc9b2a..22a34a81 100644 --- a/CORE/Packages/Delphi/Drivers/FireDAC/RESTDWFireDACDriver.dproj +++ b/CORE/Packages/Delphi/Drivers/FireDAC/RESTDWFireDACDriver.dproj @@ -2,13 +2,14 @@ {51492283-F4E3-4B42-AF62-715E4F0BADAF} RESTDWFireDACDriver.dpk - 19.5 + 20.3 None True Debug Win32 3 Package + RESTDWFireDACDriver true @@ -53,6 +54,11 @@ Base true + + true + Base + true + true Base @@ -130,6 +136,13 @@ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + DEBUG;$(DCC_Define) true @@ -189,7 +202,7 @@ Microsoft Office XP Sample Automation Server Wrapper Components - + @@ -218,16 +231,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -238,12 +241,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -296,6 +293,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -316,6 +323,76 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -326,6 +403,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -496,6 +583,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -673,6 +810,9 @@ 1 + + 1 + @@ -934,16 +1074,19 @@ + False False False False + False False False True True + False 12 diff --git a/CORE/Packages/Delphi/Drivers/IbDAC/RESTDWIBDACDriver.dproj b/CORE/Packages/Delphi/Drivers/IbDAC/RESTDWIBDACDriver.dproj index 77ee0128..66c83586 100644 --- a/CORE/Packages/Delphi/Drivers/IbDAC/RESTDWIBDACDriver.dproj +++ b/CORE/Packages/Delphi/Drivers/IbDAC/RESTDWIBDACDriver.dproj @@ -2,13 +2,14 @@ {BB3A9615-7326-47EE-94D6-DF450652CC5D} RESTDWIbDACDriver.dpk - 19.5 + 20.3 None True Debug - Win32 + Win64 693267 Package + RESTDWIbDACDriver true @@ -53,6 +54,11 @@ Base true + + true + Base + true + true Base @@ -89,11 +95,11 @@ None android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png - 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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug - 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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.0.dex.jar RESTDWCore;RESTDWSocketIndy;dac280;ibdac280;$(DCC_UsePackage) @@ -114,12 +120,12 @@ true - CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface Debug dac280;ibdac280;$(DCC_UsePackage) - CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface Debug @@ -138,6 +144,13 @@ Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + DEBUG;$(DCC_Define) true @@ -197,7 +210,7 @@ Microsoft Office XP Sample Automation Server Wrapper Components - + @@ -217,12 +230,7 @@ - - - RESTDWIbDACDriver.bpl - true - - + 1 @@ -231,16 +239,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -251,12 +249,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -309,6 +301,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -329,6 +331,76 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -339,6 +411,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -509,6 +591,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -686,6 +818,9 @@ 1 + + 1 + @@ -947,16 +1082,19 @@ + True True True True + False True True True True + False 12 diff --git a/CORE/Packages/Delphi/Drivers/InterBase/RESTDWInterbaseDriver.dproj b/CORE/Packages/Delphi/Drivers/InterBase/RESTDWInterbaseDriver.dproj index 16d201be..bc0ccad1 100644 --- a/CORE/Packages/Delphi/Drivers/InterBase/RESTDWInterbaseDriver.dproj +++ b/CORE/Packages/Delphi/Drivers/InterBase/RESTDWInterbaseDriver.dproj @@ -2,13 +2,14 @@ {403054FA-84FF-41B9-928A-FF1D0B3B590A} RESTDWInterbaseDriver.dpk - 19.5 + 20.3 None True Debug - Win32 + Win64 693267 Package + RESTDWInterbaseDriver true @@ -53,6 +54,11 @@ Base true + + true + Base + true + true Base @@ -86,13 +92,13 @@ None annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug None annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug @@ -110,11 +116,11 @@ true - CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface Debug - CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface Debug @@ -131,6 +137,13 @@ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 1033 + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + DEBUG;$(DCC_Define) true @@ -189,7 +202,7 @@ RESTDWInterbaseDriver.dpk - + true @@ -205,12 +218,7 @@ true - - - RESTDWInterbaseDriver.bpl - true - - + 1 @@ -219,16 +227,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -239,12 +237,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -297,6 +289,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -317,6 +319,76 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -327,6 +399,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -497,6 +579,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -674,6 +806,9 @@ 1 + + 1 + @@ -934,16 +1069,19 @@ + True True True True + False True True True True + False 12 diff --git a/CORE/Packages/Delphi/Drivers/MyDAC/RESTDWMyDACDriver.dproj b/CORE/Packages/Delphi/Drivers/MyDAC/RESTDWMyDACDriver.dproj index 0e8bafa2..1165b9b8 100644 --- a/CORE/Packages/Delphi/Drivers/MyDAC/RESTDWMyDACDriver.dproj +++ b/CORE/Packages/Delphi/Drivers/MyDAC/RESTDWMyDACDriver.dproj @@ -7,8 +7,9 @@ 693267 Package None - 19.5 - Win32 + 20.3 + Win64 + RESTDWMyDACDriver true @@ -53,6 +54,11 @@ Base true + + true + Base + true + true Base @@ -111,12 +117,12 @@ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png - 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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.0.dex.jar @@ -134,11 +140,11 @@ true - CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface Debug - CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface Debug @@ -157,6 +163,13 @@ Debug 1033 + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + 0 0 @@ -226,12 +239,14 @@ True True True + False True True True True + False - + @@ -251,12 +266,7 @@ - - - RESTDWMyDACDriver.bpl - true - - + @@ -266,16 +276,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -286,12 +286,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -344,6 +338,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -364,6 +368,76 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -374,6 +448,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -544,6 +628,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -721,6 +855,9 @@ 1 + + 1 + @@ -983,6 +1120,7 @@ + 12 diff --git a/CORE/Packages/Delphi/Drivers/UniDAC/RESTDWUniDACDriver.dproj b/CORE/Packages/Delphi/Drivers/UniDAC/RESTDWUniDACDriver.dproj index 3fa9b35b..350f8715 100644 --- a/CORE/Packages/Delphi/Drivers/UniDAC/RESTDWUniDACDriver.dproj +++ b/CORE/Packages/Delphi/Drivers/UniDAC/RESTDWUniDACDriver.dproj @@ -7,8 +7,9 @@ 693267 Package None - 19.5 - Win32 + 20.3 + Win64 + RESTDWUniDACDriver true @@ -53,6 +54,11 @@ Base true + + true + Base + true + true Base @@ -111,12 +117,12 @@ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png - 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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug android-support-v4.dex.jar;cloud-messaging.dex.jar;com-google-android-gms.play-services-ads-base.17.2.0.dex.jar;com-google-android-gms.play-services-ads-identifier.16.0.0.dex.jar;com-google-android-gms.play-services-ads-lite.17.2.0.dex.jar;com-google-android-gms.play-services-ads.17.2.0.dex.jar;com-google-android-gms.play-services-analytics-impl.16.0.8.dex.jar;com-google-android-gms.play-services-analytics.16.0.8.dex.jar;com-google-android-gms.play-services-base.16.0.1.dex.jar;com-google-android-gms.play-services-basement.16.2.0.dex.jar;com-google-android-gms.play-services-gass.17.2.0.dex.jar;com-google-android-gms.play-services-identity.16.0.0.dex.jar;com-google-android-gms.play-services-maps.16.1.0.dex.jar;com-google-android-gms.play-services-measurement-base.16.4.0.dex.jar;com-google-android-gms.play-services-measurement-sdk-api.16.4.0.dex.jar;com-google-android-gms.play-services-stats.16.0.1.dex.jar;com-google-android-gms.play-services-tagmanager-v4-impl.16.0.8.dex.jar;com-google-android-gms.play-services-tasks.16.0.1.dex.jar;com-google-android-gms.play-services-wallet.16.0.1.dex.jar;com-google-firebase.firebase-analytics.16.4.0.dex.jar;com-google-firebase.firebase-common.16.1.0.dex.jar;com-google-firebase.firebase-iid-interop.16.0.1.dex.jar;com-google-firebase.firebase-iid.17.1.1.dex.jar;com-google-firebase.firebase-measurement-connector.17.0.1.dex.jar;com-google-firebase.firebase-messaging.17.5.0.dex.jar;fmx.dex.jar;google-play-billing.dex.jar;google-play-licensing.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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.0.dex.jar @@ -134,11 +140,11 @@ true - CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface Debug - CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface Debug @@ -157,6 +163,13 @@ Debug 1033 + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + 0 0 @@ -226,12 +239,14 @@ True True True + False True True True True + False - + @@ -251,12 +266,7 @@ - - - RESTDWUniDACDriver.bpl - true - - + @@ -266,16 +276,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -286,12 +286,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -344,6 +338,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -364,6 +368,76 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -374,6 +448,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -544,6 +628,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -721,6 +855,9 @@ 1 + + 1 + @@ -983,6 +1120,7 @@ + 12 diff --git a/CORE/Packages/Delphi/Drivers/Zeos/RESTDWZEOSDriver.dproj b/CORE/Packages/Delphi/Drivers/Zeos/RESTDWZEOSDriver.dproj index e5fe0bc3..c7451a4e 100644 --- a/CORE/Packages/Delphi/Drivers/Zeos/RESTDWZEOSDriver.dproj +++ b/CORE/Packages/Delphi/Drivers/Zeos/RESTDWZEOSDriver.dproj @@ -7,8 +7,9 @@ 3 Package None - 19.5 + 20.3 Win32 + RESTDWZEOSDriver true @@ -53,6 +54,11 @@ Base true + + true + Base + true + true Base @@ -161,6 +167,13 @@ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 1033 + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + RELEASE;$(DCC_Define) 0 @@ -266,12 +279,14 @@ False False False + False False False True True + False - + @@ -301,16 +316,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -321,12 +326,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -379,6 +378,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -399,6 +408,76 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -409,6 +488,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -579,6 +668,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -756,6 +895,9 @@ 1 + + 1 + @@ -1017,6 +1159,7 @@ + 12 diff --git a/CORE/Packages/Delphi/RESTDWCore.dpk b/CORE/Packages/Delphi/RESTDWCore.dpk index 6c795f19..e628f9be 100644 --- a/CORE/Packages/Delphi/RESTDWCore.dpk +++ b/CORE/Packages/Delphi/RESTDWCore.dpk @@ -32,7 +32,10 @@ package RESTDWCore; requires rtl, soaprtl, - dbrtl; + dbrtl, + FireDAC, + FireDACCommonDriver, + FireDACCommon; contains uRESTDWBasic in '..\..\Source\Basic\uRESTDWBasic.pas', @@ -95,7 +98,9 @@ contains uRESTDWURLFunctions in '..\..\Source\utils\uRESTDWURLFunctions.pas', uRESTDWPropertyPersist in '..\..\Source\Basic\uRESTDWPropertyPersist.pas', uRESTDWStorageBin in '..\..\Source\Basic\uRESTDWStorageBin.pas', - uRESTDWMemoryDataset in '..\..\Source\Plugins\Memdataset\uRESTDWMemoryDataset.pas', + {$IFDEF RESTDWMEMTABLE} + uRESTDWMemoryDataset in '..\..\Source\Plugins\Memdataset\uRESTDWMemoryDataset.pas', + {$ENDIF} uRESTDWProtoTypes in '..\..\Source\Basic\uRESTDWProtoTypes.pas', uRESTDWExprParser in '..\..\Source\Plugins\Memdataset\uRESTDWExprParser.pas', uRESTDWDriverBase in '..\..\Source\Database_Drivers\uRESTDWDriverBase.pas', diff --git a/CORE/Packages/Delphi/RESTDWCore.dproj b/CORE/Packages/Delphi/RESTDWCore.dproj index 0d6eae7d..5a06fc23 100644 --- a/CORE/Packages/Delphi/RESTDWCore.dproj +++ b/CORE/Packages/Delphi/RESTDWCore.dproj @@ -7,7 +7,7 @@ 33811 Package None - 20.1 + 20.3 Win32 RESTDWCore @@ -130,12 +130,12 @@ ..\..\compiled - 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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug activity-1.1.0.dex.jar;annotation-1.2.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;biometric-1.1.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.1.0.dex.jar;core-runtime-2.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.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;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.2.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.2.0.dex.jar;lifecycle-runtime-2.2.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.2.0.dex.jar;lifecycle-viewmodel-savedstate-2.2.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;savedstate-1.0.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.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.1.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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug activity-1.1.0.dex.jar;annotation-1.2.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;biometric-1.1.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.1.0.dex.jar;core-runtime-2.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.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;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.2.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.2.0.dex.jar;lifecycle-runtime-2.2.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.2.0.dex.jar;lifecycle-viewmodel-savedstate-2.2.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;savedstate-1.0.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.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.1.0.dex.jar @@ -218,12 +218,12 @@ ..\..\compiled true - CompanyName=XyberPower Desenvolvimento;FileDescription=$(MSBuildProjectName);FileVersion=2.1.0.116;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) + CompanyName=XyberPower Desenvolvimento;FileDescription=$(MSBuildProjectName);FileVersion=2.1.0.144;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments=;ProgramID=com.embarcadero.$(MSBuildProjectName) 1033 2 1 REST Dataware - Core - 116 + 144 true true @@ -236,6 +236,12 @@ MainSource + + + + + + @@ -299,7 +305,6 @@ - @@ -343,7 +348,7 @@ True False - + @@ -363,6 +368,7 @@ + RESTDWCore.bpl @@ -377,16 +383,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -397,12 +393,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -495,6 +485,16 @@ 1 + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + res\drawable-anydpi-v26 diff --git a/CORE/Packages/Delphi/RESTDWCoreDesign.dproj b/CORE/Packages/Delphi/RESTDWCoreDesign.dproj index 7f4dc973..52b7191b 100644 --- a/CORE/Packages/Delphi/RESTDWCoreDesign.dproj +++ b/CORE/Packages/Delphi/RESTDWCoreDesign.dproj @@ -2,13 +2,14 @@ {B229AD56-6CAC-4419-8C33-A144BCAD1177} RESTDWCoreDesign.dpk - 19.5 + 20.3 None True Debug Win32 558099 Package + RESTDWCoreDesign true @@ -43,6 +44,11 @@ Base true + + true + Base + true + true Base @@ -76,12 +82,12 @@ false - 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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug activity-1.1.0.dex.jar;annotation-1.2.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;biometric-1.1.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.1.0.dex.jar;core-runtime-2.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.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;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.2.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.2.0.dex.jar;lifecycle-runtime-2.2.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.2.0.dex.jar;lifecycle-viewmodel-savedstate-2.2.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;savedstate-1.0.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.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.1.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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug activity-1.1.0.dex.jar;annotation-1.2.0.dex.jar;appcompat-1.2.0.dex.jar;appcompat-resources-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;biometric-1.1.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.1.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.1.0.dex.jar;core-runtime-2.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.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;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.2.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.2.0.dex.jar;lifecycle-runtime-2.2.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.2.0.dex.jar;lifecycle-viewmodel-savedstate-2.2.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;savedstate-1.0.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.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.1.0.dex.jar @@ -113,6 +119,13 @@ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= Debug + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + DEBUG;$(DCC_Define) true @@ -172,7 +185,7 @@ Microsoft Office XP Sample Automation Server Wrapper Components - + @@ -200,16 +213,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -220,12 +223,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -278,6 +275,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -298,6 +305,76 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -308,6 +385,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -478,6 +565,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -655,6 +792,9 @@ 1 + + 1 + @@ -916,14 +1056,17 @@ + True True True True + False True True + False 12 diff --git a/CORE/Packages/Delphi/ShellTools/RESTDWShellServices.dproj b/CORE/Packages/Delphi/ShellTools/RESTDWShellServices.dproj index 547473d3..0325466c 100644 --- a/CORE/Packages/Delphi/ShellTools/RESTDWShellServices.dproj +++ b/CORE/Packages/Delphi/ShellTools/RESTDWShellServices.dproj @@ -2,13 +2,14 @@ {EADFFC95-BEC1-4CAE-AAFE-AEEE50783690} RESTDWShellServices.dpk - 19.5 + 20.3 None True Debug Win32 558099 Package + RESTDWShellServices true @@ -53,6 +54,11 @@ Base true + + true + Base + true + true Base @@ -92,7 +98,7 @@ false - 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= + 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=;minSdkVersion=23;targetSdkVersion=35 None Debug android-support-v4.dex.jar;cloud-messaging.dex.jar;fmx.dex.jar;google-analytics-v2.dex.jar;google-play-billing.dex.jar;google-play-licensing.dex.jar;google-play-services.dex.jar @@ -100,7 +106,7 @@ $(BDS)\bin\Artwork\Android\FM_LauncherIcon_192x192.png - 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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.0.dex.jar @@ -146,6 +152,13 @@ Debug CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + DEBUG;$(DCC_Define) true @@ -211,7 +224,7 @@ File C:\Users\Public\Documents\Embarcadero\Studio\22.0\Bpl\RESTDWZEOSDriver.bpl not found - + @@ -229,12 +242,7 @@ true - - - RESTDWShellServices.bpl - true - - + @@ -244,16 +252,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -264,12 +262,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -322,6 +314,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -342,6 +344,76 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -352,6 +424,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -522,6 +604,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -699,6 +831,9 @@ 1 + + 1 + @@ -960,16 +1095,19 @@ + True True True True + False False False True True + False 12 diff --git a/CORE/Packages/Delphi/ShellTools/RESTDWShellServicesDesign.dproj b/CORE/Packages/Delphi/ShellTools/RESTDWShellServicesDesign.dproj index 947231d8..293f9f1e 100644 --- a/CORE/Packages/Delphi/ShellTools/RESTDWShellServicesDesign.dproj +++ b/CORE/Packages/Delphi/ShellTools/RESTDWShellServicesDesign.dproj @@ -2,13 +2,14 @@ {C0D36021-A16C-44B0-8921-7852ADD1D0F2} RESTDWShellServicesDesign.dpk - 19.5 + 20.3 None True Debug Win32 3 Package + RESTDWShellServicesDesign true @@ -43,6 +44,11 @@ Base true + + true + Base + true + true Base @@ -113,6 +119,13 @@ Debug CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + DEBUG;$(DCC_Define) true @@ -168,7 +181,7 @@ (untitled) - + @@ -196,16 +209,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -216,12 +219,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -274,6 +271,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -294,6 +301,76 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -304,6 +381,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -474,6 +561,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -651,6 +788,9 @@ 1 + + 1 + @@ -912,14 +1052,17 @@ + False False False False + False True True + False 12 diff --git a/CORE/Packages/Delphi/Tools/RESTDWSelfSigned.dproj b/CORE/Packages/Delphi/Tools/RESTDWSelfSigned.dproj index 0a1cf81d..bac2a43d 100644 --- a/CORE/Packages/Delphi/Tools/RESTDWSelfSigned.dproj +++ b/CORE/Packages/Delphi/Tools/RESTDWSelfSigned.dproj @@ -2,13 +2,14 @@ {2E043D86-B418-4A04-8BD2-D8C8E05DB577} RESTDWSelfSigned.dpk - 19.5 + 20.3 None True Debug - Win32 + Win64 693267 Package + RESTDWSelfSigned true @@ -53,6 +54,11 @@ Base true + + true + Base + true + true Base @@ -87,14 +93,14 @@ None annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug rtl;soaprtl;dbrtl;FireDAC;FireDACCommonDriver;FireDACCommon;RESTDWCore;$(DCC_UsePackage) None annotation-1.2.0.dex.jar;asynclayoutinflater-1.0.0.dex.jar;billing-4.0.0.dex.jar;browser-1.0.0.dex.jar;cloud-messaging.dex.jar;collection-1.0.0.dex.jar;coordinatorlayout-1.0.0.dex.jar;core-1.5.0-rc02.dex.jar;core-common-2.0.1.dex.jar;core-runtime-2.0.1.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;firebase-annotations-16.0.0.dex.jar;firebase-common-20.0.0.dex.jar;firebase-components-17.0.0.dex.jar;firebase-datatransport-18.0.0.dex.jar;firebase-encoders-17.0.0.dex.jar;firebase-encoders-json-18.0.0.dex.jar;firebase-iid-interop-17.1.0.dex.jar;firebase-installations-17.0.0.dex.jar;firebase-installations-interop-17.0.0.dex.jar;firebase-measurement-connector-19.0.0.dex.jar;firebase-messaging-22.0.0.dex.jar;fmx.dex.jar;fragment-1.0.0.dex.jar;google-play-licensing.dex.jar;interpolator-1.0.0.dex.jar;javax.inject-1.dex.jar;legacy-support-core-ui-1.0.0.dex.jar;legacy-support-core-utils-1.0.0.dex.jar;lifecycle-common-2.0.0.dex.jar;lifecycle-livedata-2.0.0.dex.jar;lifecycle-livedata-core-2.0.0.dex.jar;lifecycle-runtime-2.0.0.dex.jar;lifecycle-service-2.0.0.dex.jar;lifecycle-viewmodel-2.0.0.dex.jar;listenablefuture-1.0.dex.jar;loader-1.0.0.dex.jar;localbroadcastmanager-1.0.0.dex.jar;play-services-ads-20.1.0.dex.jar;play-services-ads-base-20.1.0.dex.jar;play-services-ads-identifier-17.0.0.dex.jar;play-services-ads-lite-20.1.0.dex.jar;play-services-base-17.5.0.dex.jar;play-services-basement-17.6.0.dex.jar;play-services-cloud-messaging-16.0.0.dex.jar;play-services-drive-17.0.0.dex.jar;play-services-games-21.0.0.dex.jar;play-services-location-18.0.0.dex.jar;play-services-maps-17.0.1.dex.jar;play-services-measurement-base-18.0.0.dex.jar;play-services-measurement-sdk-api-18.0.0.dex.jar;play-services-places-placereport-17.0.0.dex.jar;play-services-stats-17.0.0.dex.jar;play-services-tasks-17.2.0.dex.jar;print-1.0.0.dex.jar;room-common-2.1.0.dex.jar;room-runtime-2.1.0.dex.jar;slidingpanelayout-1.0.0.dex.jar;sqlite-2.0.1.dex.jar;sqlite-framework-2.0.1.dex.jar;swiperefreshlayout-1.0.0.dex.jar;transport-api-3.0.0.dex.jar;transport-backend-cct-3.0.0.dex.jar;transport-runtime-3.0.0.dex.jar;user-messaging-platform-1.0.0.dex.jar;versionedparcelable-1.1.1.dex.jar;viewpager-1.0.0.dex.jar;work-runtime-2.1.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= + 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=;minSdkVersion=23;targetSdkVersion=35 Debug rtl;soaprtl;dbrtl;FireDAC;FireDACCommonDriver;FireDACCommon;RESTDWCore;$(DCC_UsePackage) @@ -135,12 +141,12 @@ $(BDS)\bin\Artwork\iOS\iPad\FM_NotificationIcon_40x40.png - CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface Debug rtl;soaprtl;dbrtl;FireDAC;FireDACCommonDriver;FireDACCommon;$(DCC_UsePackage) - CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false + CFBundleName=$(MSBuildProjectName);CFBundleDisplayName=$(MSBuildProjectName);CFBundleIdentifier=$(MSBuildProjectName);CFBundleVersion=1.0.0;CFBundleShortVersionString=1.0.0;CFBundlePackageType=APPL;CFBundleSignature=????;CFBundleAllowMixedLocalizations=YES;CFBundleExecutable=$(MSBuildProjectName);NSHighResolutionCapable=true;LSApplicationCategoryType=public.app-category.utilities;NSLocationUsageDescription=The reason for accessing the location information of the user;NSContactsUsageDescription=The reason for accessing the contacts;NSCalendarsUsageDescription=The reason for accessing the calendar data;NSRemindersUsageDescription=The reason for accessing the reminders;NSCameraUsageDescription=The reason for accessing the camera;NSMicrophoneUsageDescription=The reason for accessing the microphone;NSMotionUsageDescription=The reason for accessing the accelerometer;NSDesktopFolderUsageDescription=The reason for accessing the Desktop folder;NSDocumentsFolderUsageDescription=The reason for accessing the Documents folder;NSDownloadsFolderUsageDescription=The reason for accessing the Downloads folder;NSNetworkVolumesUsageDescription=The reason for accessing files on a network volume;NSRemovableVolumesUsageDescription=The reason for accessing files on a removable volume;NSSpeechRecognitionUsageDescription=The reason for requesting to send user data to Apple's speech recognition servers;ITSAppUsesNonExemptEncryption=false;NSBluetoothAlwaysUsageDescription=The reason for accessing the Bluetooth interface Debug rtl;soaprtl;dbrtl;FireDAC;FireDACCommonDriver;FireDACCommon;$(DCC_UsePackage);$(DCC_UsePackage) @@ -160,6 +166,13 @@ 1033 vcl;rtl;soaprtl;dbrtl;FireDAC;FireDACCommonDriver;FireDACCommon;RESTDWCore;$(DCC_UsePackage) + + Winapi;System.Win;Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + DEBUG;$(DCC_Define) true @@ -218,7 +231,7 @@ RESTDWSelfSigned.dpk - + true @@ -243,16 +256,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -263,12 +266,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -321,6 +318,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -341,6 +348,76 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -351,6 +428,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -521,6 +608,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -698,6 +835,9 @@ 1 + + 1 + @@ -959,16 +1099,19 @@ + True True True True + False True True True True + False 12 diff --git a/CORE/Packages/Delphi/Wizards/RESTDWWizards.dproj b/CORE/Packages/Delphi/Wizards/RESTDWWizards.dproj index 78786239..cf923e31 100644 --- a/CORE/Packages/Delphi/Wizards/RESTDWWizards.dproj +++ b/CORE/Packages/Delphi/Wizards/RESTDWWizards.dproj @@ -7,8 +7,9 @@ 3 Package VCL - 19.5 - Win32 + 20.3 + Win64 + RESTDWWizards true @@ -33,6 +34,11 @@ Base true + + true + Base + true + true Base @@ -99,6 +105,13 @@ CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= 1033 + + Data.Win;Datasnap.Win;Web.Win;Soap.Win;Xml.Win;$(DCC_Namespace) + Debug + true + CompanyName=;FileDescription=$(MSBuildProjectName);FileVersion=1.0.0.0;InternalName=;LegalCopyright=;LegalTrademarks=;OriginalFilename=;ProgramID=com.embarcadero.$(MSBuildProjectName);ProductName=$(MSBuildProjectName);ProductVersion=1.0.0.0;Comments= + 1033 + RELEASE;$(DCC_Define) 0 @@ -168,8 +181,9 @@ False True True + False - + @@ -180,16 +194,6 @@ 0 - - - classes - 64 - - - classes - 64 - - res\xml @@ -200,12 +204,6 @@ 1 - - - library\lib\armeabi-v7a - 1 - - library\lib\armeabi @@ -258,6 +256,16 @@ 1 + + + res\drawable-anydpi-v21 + 1 + + + res\drawable-anydpi-v21 + 1 + + res\values @@ -278,6 +286,76 @@ 1 + + + res\values-v31 + 1 + + + res\values-v31 + 1 + + + + + res\values-v35 + 1 + + + res\values-v35 + 1 + + + + + res\drawable-anydpi-v26 + 1 + + + res\drawable-anydpi-v26 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-anydpi-v33 + 1 + + + res\drawable-anydpi-v33 + 1 + + res\values @@ -288,6 +366,16 @@ 1 + + + res\values-night-v21 + 1 + + + res\values-night-v21 + 1 + + res\drawable @@ -458,6 +546,56 @@ 1 + + + res\drawable-anydpi-v24 + 1 + + + res\drawable-anydpi-v24 + 1 + + + + + res\drawable + 1 + + + res\drawable + 1 + + + + + res\drawable-night-anydpi-v21 + 1 + + + res\drawable-night-anydpi-v21 + 1 + + + + + res\drawable-anydpi-v31 + 1 + + + res\drawable-anydpi-v31 + 1 + + + + + res\drawable-night-anydpi-v31 + 1 + + + res\drawable-night-anydpi-v31 + 1 + + 1 @@ -635,6 +773,9 @@ 1 + + 1 + @@ -896,6 +1037,7 @@ + 12 diff --git a/CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySocketsTaurus.lpk b/CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySocketsTaurus.lpk new file mode 100644 index 00000000..7db3c364 --- /dev/null +++ b/CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySocketsTaurus.lpk @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySocketsTaurus.lrs b/CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySocketsTaurus.lrs new file mode 100644 index 00000000..f071cb33 --- /dev/null +++ b/CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySocketsTaurus.lrs @@ -0,0 +1,182 @@ +LazarusResources.Add('TRESTDWIdServicePooler','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#2#204'IDATx'#1#189'VMHTQ'#20 + +#254#222'0'#153#154#250'n '#25'Y'#206#179#133#26#21'>'#138'j'#163'`Q'#225#170 + +#153'h'#27#164#237'Z'#244#179'h'#225'&'#180#132'('#8'l j'#151'B'#181#8'$'#199 + +'E'#139'&'#162#25'h'#209#191'3'#17#20#20#211#188')'#195'`'#176#231#20#218'l' + +#154#206'yw|:'#163#163'oR'#230#131'3'#247#205#229#220#251#189'{~'#190'w'#149 + +#167#183'{2Z}-"'#31#19'0'#127'M'#195')'#244#230#6#136#154#202'%}'#226#227'I' + +#236'?yEq3A'#240'N'#16#213'w'#131#216#10#231'x'#179#169#22#187#253'g'#160#183 + +'4'#20'v'#202#200#193#205''''#168''''#130'm('#14#155#191'''q'#255'V'#0':'#17 + +'-'#7#151#153#154'F5'#254#15'U'#14#195#235'B'#9'P'#18#18'7'#255#188'='#8#196 + +'*P4&'#203#156#249'Y$'#190'f@S'#229'D'#200#0'F'#127#235#240#252#141'#'#146#18 + +#16#170#192#148'i'#162#181#14'0'#21#129's["'#16'k'#165#239#208#132'3'#146#5 + +#225#138'O'#1#170#238'E '#213#10'C'#209' '#132#10#179'BCt]'#7'0c'#218#4#197 + +'`'#209#156#24#134#1'e"J'#4#130#8#26'!'#202#137'xr'#12#29'j|'#169#189#172#230 + +#235#163#178#206#135#21#174#225'W'#176#223#208'L'#3#245#137'!l'#167#240#153 + +'1Z'#16#3'v'#168'r'#254'5'#133#231#179'1'#183#248'kM'#238'f'#220#216#10'5 ' + +#19#245#157#242#229#146#236'}I'#205#133#226#241'p'#143#28#135#2#207#236'9'#15 + +')'#129#255'^'#208'z'#238':'#210'f'#141'+.'#225'Bz'#167#204'{vc'#133#16#213 + +#149#232#242#181#217#255#251'n'#6#224';'#176#11#189#20'.'#206#209#170#144#204 + +#7#235#224'zR'#230#179#199#15#231#204'[$'#143#201#242'r'#8'v'#155#213'4?'#217 + +#19'*'#140'5'#2'V'#165#165#169#0#142'R!'#148#231#173'aE^L'#149'-'#146'Cd)' + +#178#27'T'#178'i]'#199'L('#132'}Y'#146'~2'#173#29'x'#223#158#187#240':'#21 + +#203#3#234#169#211'X'#30'v'#226#175'j'#26':{{'#161#170'*zFFp'#153#8#25#31#200 + +'<'#234#194#133'z'#29#28#195#206#137'+'#187#233'X8'#140'0Y3I'#201',B'#9'*' + +#211'w2T'#220'O'#172#10#250'F8'#134'MR'#22#137#192'O'#27'_'#28#24'@'#132#158 + +#159#251#253#182'S'#244#7'pb'#167'$a'#152#127#128'07'#165'p'#196'!'#195#245 + +#141',I'#185'`'#25#185#208#221'-'#217'='#30#219'I'#223' G>'#1#27'C-'#135'c' + +#184#248'2'#192#141'S'#23#143#195#235#245#162#127'p'#16'&'#157#168#201#144 + +#250#193#201#247#208#27#143'~'#162#18#165#19#133#19#210#138#201#137#242#229 + +#209#181#12'_$'#170#232';'#255#130'&'#216#184#178#142'e'#29#198'!+'#172#169 + +'inc'#254#28'D'#127'Vbl'#248#18'4'#146#145'B'#224'fl'#236'<'#175'(9W'#162'T' + +#17'W'#162#22#231'W"'#148#2#255#0'V'#23#226'?'#241'j'#13'8'#0#0#0#0'IEND'#174 + +'B`'#130 +]); +LazarusResources.Add('TRESTDWIdClientPooler','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#2#193'IDATx'#1#189'VMh'#19'A' + +#20#254'R'#11'J'#209't#-j+'#217#245'`'#9'"'#24'E'#241'RH'#170#24#4#193'D'#170 + +#183#138'I'#233'E/'#241'"'#136'?'#208'b'#145#208#147'E'#240#20#172#7#241'"' + +#162#5#11'R'#15'I'#164#168#20'+'#235'E#BY'#139'E*j&'#17#27'=h|ow'#147'tm'#218 + +#236'B'#232#7#143#204#206#188'y'#223#204#251#203#184'R'#183'/'#150#148#206'6' + +#172#6'QX'#132#250'~'#14'v!mj'#129#223#231#133'6'#255#21'='#253#9'W3'#19'(' + +#29'+'#147#176#226#195#254#4#14#255'X'#132']'#20'H&'#251'B'#8#145'0'#154#235 + +'m'#152#24#185#135'3'#14#8'*Dw'''#161#30#240#233#227#166'z'#202#127#11#206#9 + +#24#219'a'#184#217#22'I#'#176'&$uc'#242#205#11'<'#219#6#199#16#191'('#203#236 + +#146'('#164#25#221'Z'#253'>?%'#193#229'Q'#224'w'#11#164'>'#2#30#143#4#145#19 + +#8#200#180'X'#20#136'v'#9']O'#203#3'is'#143'cw'#9#207#30#18'?'#210#235#130 + +#208'\2'#196'g'#13'9'#154'K7'#5#16#220'"j'#238#177#144#12#222'z'#164#215#197 + +#170'$B@{'#167'Bn5''v'#4#160'|'#207'@'#202#169'PZk'#239#177#184'+'#26#233'F' + +#236'J'#18'c'#215#6'P'#238#2#179#11'@'#242'CUgw'#254#141#254#187#241#133#138 + +'n'#246'{'#145'd='#185'G'#19'H'#230#150#28#134#214#218#142#155'$jv'#14#233 + +#233'le1'#176#223#199#173#0#212'nt'#162'v"9'#244#10#142#241#137#15'h'#146'4' + +#137'Z'#213#236'2'#165'Ah'#14'R'#233#151'{'#23#199'#v5i'#220#162#163#13#141 + +#130'%'#240'w'#198#167'06<'#208'P'#2#134'%'#240#131#231'"'#203#20#230'I'#30 + +#252'7'#199'}'#233#160'9~K2LR'#164'z'#218'L'#217#245#135#2#206'q'#236']'#137 + +#164#22':I'#142#145'<%'#185')Ih'#247#251'QL'#167'1b'#174'_&'#195#227'}'#176 + +#164'/'#23#226#137#251'@'#220#252#182'U'#140#156')O"'#17#156#140#199'!'#203 + +'2'#18#169#20#174#19'!'#207#243#233'Q'#178#234'sJ/%'#173'{'#19#6#187'+'#28#14 + +#227'q,'#134'('#141'c'#153#12'Y'#146'P'#16'F'#133#199'&'#136#167'd'#24#22#191 + +#141#196#228'_G$|'#226#189'0\'#183#139'd'#159#166'U'#214#212'/@d'''#140#222 + +'U'#158'[0'#164#12'['#238'b'#195#26#25#158'Q'#20'\'#160#177';'#26#197','#197 + +#198#13#195'5'#178'dT8'#199'B'#239#190#27#172#251#235#222#228#167#187'E'#207 + +#148#211#163#163#232#165#152'H'#228'&&'#12#168#170'N'#194'.*'#27#207#155'.' + +#10'z'#29#198#228#232#217#8'f'#232#165'r'#137#10#245#229#208#16#158#211#220 + +#17'TSX'#161'G'#204'k"'#233#233'2n'#192'd7'#166#169#15#158#10'!h'#254#199#187 + +'l?'#137#178#14#158'Dn'#235#147#8'k'#129#127#31#30#236#221'K'#143'q'#211#0#0 + +#0#0'IEND'#174'B`'#130 +]); +LazarusResources.Add('TRESTDWIdClientREST','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#24#0#0#0#25#8#6#0#0#0'++'#238']'#0 + +#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28#233 + +#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#3#11'IDATx'#1#189'V]HSa'#24'~fZ' + +#224#223#14'"'#253'h'#186'#&'#216#213#142#17'H'#16#236#16'T'#8'A'#147#238#186 + +#217'L'#232'2'#20#202#188#202#22#221#20#193'Z7'#209#141#155'%'#221#165#219'M' + +#208'"'#243'DPi'#196#25#244'c^'#232#230#15'E'#12'Z3'#205','#178#247#253#182 + +#169#251';'#132','#31'x'#207#247#247'~'#239#207's'#190#247'|'#199#244#180#191 + +'wU'#174#173'F!1:>'#1'}b'#6'rM5'#138#217'8w'#10#9#251#145#3#208#200'Ila'#9'E' + +'( 8j6'#218'}'#237'>'#220#23'O'#131#131'/F'#1#193#212#132#6'g'#132'q'#169#162 + +#20#234#193#230#132#3#246#234#127#248#28'X^'#194'f'#16#251'E'#180#180#29#22 + +'}ks='#194#243'Q('#212'2'#132#131#155'='#151'pY'#142#174'oXIl'#146'J'#214#13 + +'0Rci;'#16'^'#4#228#178'u'''#190#235'A'#216'{'#174' '#243#192#20#143#142'M' + +#192'n'#142#166'M'#250'gIv'#158#132#218#212#128#216#19#31#2#203'2l6'#27'b' + +#177#152'0.'#207'j'#8#253#148#224'-'#211#215#246'8k'#136#133#177'7'#144#219 + +#143#165#217'*JE'#148#9'I'#146#128'j'#11'"'#245'*'#204'f3'#148')?d'#211'7' + +#132'^h'#208'w'#217#208''''#233#217'T'#197#179')6>E'#17#29'J'#147#156#216#220 + +#168#18'-'#171'pT'#132#209'PnJ'#163#199#8'9O'#145#186#155#30#147#3'"3'#165#10 + +'0'#211';'#193'+'#13#206'r'#26#215#209'iy'#235#3#234#240#239#14#238#188#6#234 + +'s'#208#244#131#228#211#28#176'@m'#156#199'_'#128#15#201#181#219's'#217#250 + +';N'#228'q'#208'F/u/'#242#227'%''@r'#28#198#24'Y'#201#158'+h%'#231#130#200 + +#224'1I'#165#129#210'{'#146'y'#146#7'0'#198#182'|'#14#142#194#152#162'Z$(:'#5 + +'c'#140#228#152#219#26#138'z'#184'#'#203'b'#226#15'U'#235#30#146#143'Th'#162 + +#216#8'\'#193''#7'g'#169#157'R'#148#181'1'#203'"'#25'ju:'#209#238'p'#160#145 + +#214#14'uu'#161#132#156#241#218'U'#175'W'#180'&'#210#169#204#151'A*'#202#241 + +#129#1'L'#135'B'#176'Z'#173'bn'#152#198#188#137'k'#192'b'#177' '#16#8'@'#167 + +#232#185'o'#143'D'#16#164#190#170#170#168'#'#189'3'#164'3'#153'/'#3'6 SD'#23 + +'('#26#23'E'#174'i'#154'X'#236#238#235'C''I'#21#173#185'\.('#20#189#155#214 + +'[ZZ'#196#139'O'#129#247#207''''#219#188#25#132#137#195's'#29#29#184';<,'#178 + +'a'#184#201#232'~j'#127#147'p'#164'C>'#31#134#168#239#161'@'#158#249#253'kF8' + +'Kv'#184#152#203#129'TY*>'#5#236#128#143#161#215#227#17#198'"D'#1'g'#192'`j' + +#216')'#143#249#197'zH'#231#22#18#245#193#148#177'q>'#230#209#28'?'#15#166 + +#233'G7V='#247#130'x7'#24#20#245#16'OnD'#6#5'B9'#217#178'^+'#9'gC_'#25#240#13 + +#240#153#140';'#250'{'#211'~ '#248'f3'#165'~['#196#133#29#223#220#149#201',' + +#164#174#200#141'`'#7#255#29#127#1#167#17#27'o'#244'4'#24'n'#0#0#0#0'IEND' + +#174'B`'#130 +]); +LazarusResources.Add('TRESTDWIdDataBase','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#2#251'IDATx'#1#205'V]H'#20'Q' + +#20#254'F'#23'S'#201#221'AV'#250#177#220'1I'#196#151']'#139#160'7'#215#133 + +#196#183#157#8#223#132'U'#31#131'Z'#5#11#31#194#159#183#130'"'#223'z'#8#138 + +'y'#174'H'#131#136'z'#168#17#162#31#31'dV'#162#31#162#156'-'#13'-a'#239#26 + +#154'Y'#177#157'{g'#199#157'Uq'#183','#241#131#179'w'#239#157'{'#206'w'#207 + +'wf'#206#140#244#232'ZoJ'#169#244#226#127#192#156#158'CS'#231'y'#201#197#9 + +#148#189'^'#177'`'#140#141#131#205'/b'#179#144'+'#188#8#248#235'D\'#14#151 + +#205#168'_'#232'C{'#229#230#9#4'f'#128#161#7'^'#168'gz3$'#195#247#30#163'k' + +#29#130#174'/'#1#196#23#128#200'n'#6#150'`'#208'fd'#132#213'0'#216#167'8'#140 + +''':'#2#181#10#148'9'#3#134';'#128#1#143#1#185'('#227#171#150#145'2o>dH'#156 + +#23#179#210#174#241'#'#185'('#193#240#249#144'|'#168'!'#229#245#1#11#12#202 + +'G'#29#172'%'#2#144#159#137'F'#168'S#'#144#11#215#250#219#210#23' '#15#196 + +#238'h'#240#132'"'#176#15#164'H'#12#210'b'#18#242'sM'#204#131#133#230#134#254 + +#174#141'.'#154#241'8'#152#203#3#181#196#4#155#137#129'1'#6#179'D'#129'Q'#31 + +'E`r'#4#248'A'#243#183'1'#145#209'_'#147#12#20#233#214#233#247#211#15#27#134 + +'z'#128#198#137#152'8'#189#236#166#165#18#178'e=?'#18#182#12'\y'#138#156#248 + +#154#30#203'ro'#21'1'#247#28'v'#144#236#164#133#208#187#220#142#207#200#246 + +#165'-'#23#166#200#222#167#255#231'U'#248#205'bKH'#132'\'#243'd'#183#242#216 + +#252#18#150'T'#238'<'#246#242#152'5N'#18#238#20#202#195#177#18#219#184'&'#127 + +'$'#23'?'#29#151#204#179'j'#157#251'~'#147#129'r'#186#240'k'#9#168#152#5#234 + +#177#142'\'#181'd''e'#25'2'#25#199'.'#211#196'Q'#26#181#244#26#223#243#147 + +#214#206'!#'#23'''=E'#129'G'#218#168#213'8'#152#205'$p'#252#6#16'u'#146#216 + +'8'#162#170#240'Q3'#228#237'#'#24#12#226'tG'#7':'#163'Q'#152#20#156#19'I'#146 + +#132#233#161#161','#18'~z'#164#178'3'#147'wd'#147#174'i+'#186#174#163'gt'#20 + +'Wc1'#132#194'a'#177'v['#211'P'#174'('#136'D"B'#218#213#232#184'K<)+0'#251#14 + +'H'#176#198'5$'#206#154#188#226#155'('#155'j'#191'_'#204#187#251#251'E&qj' + +#152'/'#128#21'"^'#31#227'3'#189';'#14#2#141#190#140#191'1k'#153#141#149#187 + +#235#132#131#132#183#143'C$'#23#207#138#227#242#224' .uw'#11')S'#233#189#220 + +#142#165#165#241'Q'#25#217#146'U'#11'>'#202#197#200#130#200#164#160#172'TL' + +#18#137#4'T'#170#11'#'#2'^'#135'b'#146','#222#208' 2'#17'''4'#12'q3'#216#224 + +'7'#3#151#200#14#158'LK'#20#172#202#174#137'4y'#255'bJ&'#146#179#173'}'#226 + +']owX'#30#140#23#248#230#170#160#205#176#30'J'#27#215#201#198')`S'#173#149#1 + +''''#211'&'#128#246#214'fD'#219#154'Q'#221#210'#I'#206'O"}'#236'5'#254#5'dw)' + +#2'uU+'#159'D'#216#10#252#6#183#165#6'R'#238'E'#243'='#0#0#0#0'IEND'#174'B`' + +#130 +]); +LazarusResources.Add('TRESTDWIdPoolerList','PNG',[ + #137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#25#0#0#0#25#8#6#0#0#0#196#233#133 + +'c'#0#0#0#9'pHYs'#0#0#8'N'#0#0#8'N'#1#140'1'#0#236#0#0#0#1'sRGB'#0#174#206#28 + +#233#0#0#0#4'gAMA'#0#0#177#143#11#252'a'#5#0#0#2#163'IDATx'#1#237'V_hRQ'#24 + +#255'y'#185'K'#216#186'Wq'#163' '#193#253'a'#180#145#140#182'A{*X'#27#27'=' + +#244#208#234#181'|'#24#13#236#177#183#192#158'b'#15#190#5'-'#232'i'#213#6'=' + +#173#127#176'7'#17'+('#137#2'Q'#164'fJr1M'#148'!W'#197'Hq'#179's'#142'z'#253 + +#179#169#183#17'>'#245#131#239#28#191#239'|'#231#251#157#223#185#231'^'#143 + +#230#205#227';'#165'!'#227#0'('#188#129#8#228#236'/'#168#197#236#185#241#182 + +#227'Rl'#23#23#151#237#26#158#17#148#128#205'e;f'#127#238#194#0'u'#200#16'{x' + +'j'#0'w'#159#223#131'^'#232'=<'#169'T'#238'x'#218'x>'#7'p'#157#16#252'-'#206 + +#144'9/_'#191#199#242#141#197#182'y'#28'mRG '#168'b_'#197#246'r'#232#2#186'B' + +#194#158'IF'#20#177'e'#183#227'('#224'S_:'#230'0%'#130' `ii'#9#225'p'#24#30 + +#143#135'Y*'#149#2#207#243#240#249'|H$'#18#208#233't'#172'w'#185'\,/'#20#10 + +#177'9"Y'#160'*'#146'*'#146#201'$'#180'Z-zzz`6'#155#225#247#251#209#223#223 + +#15#147#201#132'\.'#135'B'#161#160#228#20#139'Ed'#179'Y'#168#1'_'#239'H'#146 + +#132#149#149#21#184#221'n8'#157'N'#182'b'#131#193#128't:'#205#198'#'#145#8 + +#235#189'^/'#244'z=2'#153#140'z'#18#186#162'Wkk'#184'0<'#140#236#206#14#6#249 + +'2'#183'yj'#10#177'X'#12#2#199'!K'#10#234#9'!'#12#229#215'U '#219#228#220#216 + +#128#225#228#190':'#18#145#20#152'{'#180#217'6'#241'+'#177#143'33'#16#141#198 + +'r'#160#162'"&'#12#224#193#246#183#134'\'#14'{'#184'<}'#162#145#164#19'h'#185 + +#31'6'#27','#22#139#18#179#17#191#175#175#15#218#130#6#31#188#223'Y'#204'j' + +#181#194'XY'#196#250#211'u\'#155'>^!U'#1#170'b|~'#190'!'#22#143#199#217'!'#8 + +#6#131'p8'#28#152#152#152'P'#8'('#230#22'.'#177#15#174'j%'#20#209'h'#20#165 + +'RI'#241'iAY'#150'1::'#138#145#145#17#228#243'y'#150'S'#5'}'#150'U'#148'_Fb/' + +#154#138#210#211#191'P'#231#239'mY'#192#233'j'#254#173'c'#164'!'#219'~{'#27 + +#184'O'#19'%bOV'#149'q'#225'7 '#159#189'Y#'#161#5#231#208#30'Cb'#217#154#161 + +#211#30#30#151#136'h'#185'^'#137#26'HT'#174#230'`<'#157#175#140'5A'#206#215 + +'~'#171'&'#249#175'D!'#225'Z'#253'GW@k'#188#163'G~'#240#224'X+%'#18#249#220 + +#233#197#222#26#201#213'+'#231#177#250#204#129'Yr'#187#16'['#144#228#130'd' + +#210'ibZtTB'#9'0'#182#136#201'1'#19#243'5'#245'W'#162#183#159#2#248#23#160#10 + +'&'#199'M'#202#149#8#221#192#31#139#132#254#167#187#13'|'#234#0#0#0#0'IEND' + +#174'B`'#130 +]); diff --git a/CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySocketsTaurus.pas b/CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySocketsTaurus.pas new file mode 100644 index 00000000..1a5a609c --- /dev/null +++ b/CORE/Packages/Lazarus/Connectors/Indy/RESTDWIndySocketsTaurus.pas @@ -0,0 +1,22 @@ +{ This file was automatically created by Lazarus. Do not edit! + This source is only used to compile and install the package. + } + +unit RESTDWIndySocketsTaurus; + +{$warn 5023 off : no warning about unused units} +interface + +uses + uRESTDWIdBase, uRESTDWIdReg, LazarusPackageIntf; + +implementation + +procedure Register; +begin + RegisterUnit('uRESTDWIdReg', @uRESTDWIdReg.Register); +end; + +initialization + RegisterPackage('RESTDWIndySocketsTaurus', @Register); +end. diff --git a/CORE/Source/Basic/uRESTDWBasic.pas b/CORE/Source/Basic/uRESTDWBasic.pas index 83552ee0..b41b3e19 100644 --- a/CORE/Source/Basic/uRESTDWBasic.pas +++ b/CORE/Source/Basic/uRESTDWBasic.pas @@ -34,7 +34,7 @@ interface {$IFDEF RESTDWFMX}System.IOUtils,{$ENDIF} SysUtils, Classes, Db, Variants, {$IFNDEF RESTDWLAZARUS}SyncObjs,{$ENDIF} - uRESTDWComponentEvents, uRESTDWBasicTypes, uRESTDWProtoTypes, uRESTDWJSONObject, + uRESTDWComponentEvents, uRESTDWBasicTypes, uRESTDWBasicDbTypes, uRESTDWProtoTypes, uRESTDWJSONObject, uRESTDWParams, uRESTDWMassiveBuffer, uRESTDWDataUtils, uRESTDWTools, uRESTDWConsts, uRESTDWMessageCoderMIME, uRESTDWZlib, uRESTDWMimeTypes, uRESTDWAbout, uRESTDWAuthenticators, uRESTDWBasicClass; @@ -5574,7 +5574,7 @@ procedure TRESTDWBasicReceptor.SetAuthenticator( If Not TRESTDWPoolerDB(ServerMethodsClass.Components[i]).RESTDriver.ConnectionSet Then Raise Exception.Create(cInvalidDriverConnection); TRESTDWPoolerDB(ServerMethodsClass.Components[i]).RESTDriver.PrepareConnection(ConnectionDefs); - vTempJSON := TRESTDWPoolerDB(ServerMethodsClass.Components[i]).RESTDriver.ExecuteCommand(Params.ItemsString['SQL'].Value, + vTempJSON := TRESTDWPoolerDB(ServerMethodsClass.Components[i]).RESTDriver.ExecuteCommand(Params.ItemsString['SQL'].Value, vError, vMessageError, BinaryBlob, @@ -7244,6 +7244,7 @@ procedure TRESTDWBasicReceptor.SetAuthenticator( vErrorMessage, vStrAcceptedRoutes : String; vDWRoutes : TRESTDWRoutes; + vEvent : TRESTDWEvent; Begin Result := False; vRejected := False; @@ -7288,40 +7289,41 @@ procedure TRESTDWBasicReceptor.SetAuthenticator( Break; End; End; - If (TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler].Routes.RouteIsActive(RequestType)) Or - (TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler].Routes.RouteIsActive(rtAll)) Then + vEvent := TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler]; + If (vEvent.Routes.RouteIsActive(RequestType)) Or + (vEvent.Routes.RouteIsActive(rtAll)) Then Begin vResult := ''; TRESTDWServerEvents(ServerMethodsClass.Components[i]).CreateDWParams(Pooler, Params); - IF TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler].Routes.RouteNeedAuthorization(RequestType) Or - TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler].Routes.RouteNeedAuthorization(rtAll) Then + IF vEvent.Routes.RouteNeedAuthorization(RequestType) Or + vEvent.Routes.RouteNeedAuthorization(rtAll) Then Begin - If Assigned(TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler].OnAuthRequest) Then - TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler].OnAuthRequest(Params, vRejected, vErrorMessage, ErrorCode, RequestHeader); + If Assigned(vEvent.OnAuthRequest) Then + vEvent.OnAuthRequest(Params, vRejected, vErrorMessage, ErrorCode, RequestHeader); End Else Vrejected := False; If Not vRejected Then Begin - TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler].CompareParams(Params); + vEvent.CompareParams(Params); Try If RequestType <> rtOption Then Begin vResultA := TStringList.Create; Try - If Assigned(TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler].OnBeforeExecute) Then - TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler].OnBeforeExecute(TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler]); - If Assigned(TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler].OnReplyEventByType) Then - TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler].OnReplyEventByType(Params, vResultA, RequestType, ErrorCode, RequestHeader) - Else If Assigned(TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler].OnReplyEvent) Then - TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler].OnReplyEvent(Params, vResultA); + If Assigned(vEvent.OnBeforeExecute) Then + vEvent.OnBeforeExecute(vEvent); + If Assigned(vEvent.OnReplyEventByType) Then + vEvent.OnReplyEventByType(Params, vResultA, RequestType, ErrorCode, RequestHeader) + Else If Assigned(vEvent.OnReplyEvent) Then + vEvent.OnReplyEvent(Params, vResultA); Finally vResult := vResultA.Text; vResultA.Free; End; End; - DataMode := TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler].DataMode; - ContentType := TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler].defaultcontenttype; + DataMode := vEvent.DataMode; + ContentType := vEvent.defaultcontenttype; If Trim(ContentType) = '' Then ContentType := cDefaultContentType; Except @@ -7357,7 +7359,7 @@ procedure TRESTDWBasicReceptor.SetAuthenticator( Else Begin vStrAcceptedRoutes := ''; - vDWRoutes := TRESTDWServerEvents(ServerMethodsClass.Components[i]).Events.EventByName[Pooler].Routes; + vDWRoutes := vEvent.Routes; If vDWRoutes.RouteIsActive(rtGet) Then Begin If vStrAcceptedRoutes <> '' Then diff --git a/CORE/Source/Basic/uRESTDWBasicDB.pas b/CORE/Source/Basic/uRESTDWBasicDB.pas index adc041a8..e72b8efd 100644 --- a/CORE/Source/Basic/uRESTDWBasicDB.pas +++ b/CORE/Source/Basic/uRESTDWBasicDB.pas @@ -33,11 +33,33 @@ interface {$IFDEF RESTDWLAZARUS}memds,{$ENDIF} {$IFDEF RESTDWFMX}System.UITypes, {$ENDIF} SysUtils, Classes, Db, SyncObjs, Variants, - uRESTDWDataUtils, uRESTDWBasicTypes, uRESTDWProtoTypes, - uRESTDWPoolermethod, uRESTDWComponentEvents, uRESTDWAbout, uRESTDWConsts, + uRESTDWDataUtils, uRESTDWProtoTypes, + uRESTDWPoolermethod, uRESTDWComponentEvents, uRESTDWAbout, uRESTDWResponseTranslator, uRESTDWBasicClass, uRESTDWJSONObject, uRESTDWParams, - uRESTDWBasic, uRESTDWMassiveBuffer, uRESTDWMasterDetailData, - uRESTDWMemoryDataset, uRESTDWBufferBase, uRESTDWDriverBase, uRESTDWTools; + uRESTDWBasic, uRESTDWMassiveBuffer, uRESTDWBasicTypes, uRESTDWBasicDbTypes, uRESTDWMasterDetailData + {$IFDEF UNIDACMEM} + , DADump, UniDump, VirtualTable, MemDS, + {$ENDIF} + {$IFDEF ZEOSMEM} + , ZAbstractRODataset, ZAbstractDataset, ZMemTable, ZDataset, + {$ENDIF} + {$IFNDEF FPC} + {$IF CompilerVersion > 22} // Delphi 2010 pra cima + {$IFDEF RESTFDMEMTABLE} + , FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, + FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, + FireDAC.Comp.DataSet, FireDAC.Comp.Client, + {$IFNDEF FPC} + {$IF CompilerVersion > 26} // Delphi XE6 pra cima + FireDAC.Stan.StorageBin, + {$IFEND} + {$ENDIF} + {$ENDIF} + {$IFEND} + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + , uRESTDWMemoryDataset, + {$ENDIF} uRESTDWBufferBase, uRESTDWDriverBase, uRESTDWConsts, uRESTDWTools; Type TOnExecuteData = Procedure Of Object; @@ -684,8 +706,30 @@ interface vMasterDetailList : TMasterDetailList; //DataSet MasterDetail Function vMassiveDataset : TMassiveDataset; vLastOpen : Integer; - Procedure CloneDefinitions (Source : TRESTDWMemtable; - aSelf : TRESTDWMemtable); //Fields em Definições + Procedure CloneDefinitions (Source : {$IFDEF UNIDACMEM} + TVirtualTable + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable + {$ENDIF}; + aSelf : {$IFDEF UNIDACMEM} + TVirtualTable + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable + {$ENDIF}); //Fields em Definições Procedure OnChangingSQL (Sender : TObject); //Quando Altera o SQL da Lista Procedure OnBeforeChangingSQL(Sender : TObject); Procedure SetActiveDB (Value : Boolean); //Seta o Estado do Dataset @@ -5229,10 +5273,8 @@ procedure TRESTDWDatabasebaseBase.Loaded; Function TRESTDWDatabasebaseBase.BuildConnection(aBinaryRequest : Boolean) : TRESTDWPoolerMethodClient; Begin Result := nil; - if Assigned(vOnBuildConnection) then vOnBuildConnection(Self); - Result := TRESTDWPoolerMethodClient.Create(Nil); Result.PoolerNotFoundMessage := PoolerNotFoundMessage; Result.AuthenticationOptions.Assign(AuthenticationOptions); @@ -8361,8 +8403,30 @@ procedure TRESTDWClientSQL.SetSQL(Value: TStringList); vCreateDS := True; SetInBlockEvents(True); Try - TRESTDWMemtable(Self).Close; - TRESTDWMemtable(Self).Open; + {$IFDEF UNIDACMEM} + TVirtualTable(Self) + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable(Self) + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable(Self) + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable(Self) + {$ENDIF}.Close; + {$IFDEF UNIDACMEM} + TVirtualTable(Self) + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable(Self) + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable(Self) + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable(Self) + {$ENDIF}.Open; vCreateDS := False; vActive := Not vCreateDS; Finally @@ -8379,9 +8443,9 @@ procedure TRESTDWClientSQL.SetSQL(Value: TStringList); vCreateDS := True; SetInBlockEvents(True); Try - - EmptyTable; - + {$IFDEF RESTDWMEMTABLE} + EmptyTable; + {$ENDIF} vCreateDS := False; vActive := Not vCreateDS; Finally @@ -8391,8 +8455,30 @@ procedure TRESTDWClientSQL.SetSQL(Value: TStringList); Class Procedure TRESTDWTable.CreateEmptyDataset(Const Dataset : TDataset); Begin Try - TRESTDWMemtable(Dataset).Close; - TRESTDWMemtable(Dataset).Open; + {$IFDEF UNIDACMEM} + TVirtualTable(Self) + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable(Self) + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable(Self) + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable(Self) + {$ENDIF}.Close; + {$IFDEF UNIDACMEM} + TVirtualTable(Self) + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable(Self) + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable(Self) + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable(Self) + {$ENDIF}.Open; Finally End; End; @@ -8400,8 +8486,30 @@ procedure TRESTDWClientSQL.SetSQL(Value: TStringList); Class Procedure TRESTDWClientSQL.CreateEmptyDataset(Const Dataset : TDataset); Begin Try - TRESTDWMemtable(Dataset).Close; - TRESTDWMemtable(Dataset).Open; + {$IFDEF UNIDACMEM} + TVirtualTable(Self) + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable(Self) + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable(Self) + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable(Self) + {$ENDIF}.Close; + {$IFDEF UNIDACMEM} + TVirtualTable(Self) + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable(Self) + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable(Self) + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable(Self) + {$ENDIF}.Open; Finally End; End; @@ -8441,13 +8549,35 @@ procedure TRESTDWClientSQL.SetSQL(Value: TStringList); I : Integer; FieldDef : TFieldDef; Begin - TRESTDWMemtable(Self).Close; + {$IFDEF UNIDACMEM} + TVirtualTable(Self).Close; + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable(Self).Close; + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable(Self).Close; + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable(Self).Close; + {$ENDIF} For I := 0 To Length(vFieldsList) -1 Do Begin FieldDef := FieldDefExist(Self, vFieldsList[I].FieldName); If FieldDef = Nil Then Begin - FieldDef := TRESTDWMemtable(Self).FieldDefs.AddFieldDef; + FieldDef := {$IFDEF UNIDACMEM} + TVirtualTable(Self) + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable(Self) + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable(Self) + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable(Self) + {$ENDIF}.FieldDefs.AddFieldDef; FieldDef.Name := vFieldsList[I].FieldName; FieldDef.DataType := vFieldsList[I].DataType; FieldDef.Size := vFieldsList[I].Size; @@ -8565,9 +8695,9 @@ procedure TRESTDWClientSQL.CloseCursor; vActive := False; If Not vActive Then SetActiveDB(True); + If vActive Then + Inherited Open; End; - If vActive Then - Inherited Open; Finally vInBlockEvents := False; End; @@ -9699,8 +9829,30 @@ constructor TRESTDWThreadRequest.Create(aSelf : TComponent; // {$ENDIF} End; -Procedure TRESTDWClientSQL.CloneDefinitions(Source : TRESTDWMemtable; - aSelf : TRESTDWMemtable); //Fields em Definições +Procedure TRESTDWClientSQL.CloneDefinitions(Source : {$IFDEF UNIDACMEM} + TVirtualTable + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable + {$ENDIF}; + aSelf : {$IFDEF UNIDACMEM} + TVirtualTable + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable + {$ENDIF}); //Fields em Definições Var I, A : Integer; Begin @@ -9842,7 +9994,7 @@ procedure TRESTDWClientSQL.PrepareDetailsNew; Begin If Not FindField(vFieldA).IsNull Then Begin - {$IFDEF DELPHI10_2UP} + {$IFDEF DELPHI11UP} Value.ParamByName(vFieldD).AsGUID := FindField(vFieldA).AsGUID; {$ELSE} Value.ParamByName(vFieldD).AsString := FindField(vFieldA).AsString; @@ -9922,7 +10074,7 @@ procedure TRESTDWClientSQL.PrepareDetailsNew; Begin If Not FindField(vFieldA).IsNull Then Begin - {$IFDEF DELPHI10_2UP} + {$IFDEF DELPHI11UP} Value.ParamByName(vFieldD).AsGUID := FindField(vFieldA).AsGUID; {$ELSE} Value.ParamByName(vFieldD).AsString := FindField(vFieldA).AsString; @@ -10288,7 +10440,7 @@ procedure TRESTDWClientSQL.PrepareDetailsNew; If DataSet = Nil Then Begin vRESTDataBase.ExecuteCommandTB(vActualPoolerMethodClient, vTablename, vParams, vError, vMessageError, LDataSetList, - vRowsAffected, BinaryRequest, True, Fields.Count = 0, Nil); + vRowsAffected, BinaryRequest, BinaryCompatibleMode, Fields.Count = 0, Nil); If LDataSetList <> Nil Then Begin If BinaryRequest Then @@ -10588,7 +10740,7 @@ procedure TRESTDWClientSQL.PrepareDetailsNew; For I := 0 To 1 Do Begin vRESTDataBase.ExecuteCommand(vActualPoolerMethodClient, vSQL, vParams, vError, vMessageError, LDataSetList, - vRowsAffected, False, BinaryRequest, True, vMetaData, vRESTDataBase.RESTClientPooler); + vRowsAffected, False, BinaryRequest, BinaryCompatibleMode, vMetaData, vRESTDataBase.RESTClientPooler); If Not(vError) or (vMessageError <> cInvalidAuth) Then Break; End; diff --git a/CORE/Source/Basic/uRESTDWBasicDbTypes.pas b/CORE/Source/Basic/uRESTDWBasicDbTypes.pas new file mode 100644 index 00000000..3c7fdb6b --- /dev/null +++ b/CORE/Source/Basic/uRESTDWBasicDbTypes.pas @@ -0,0 +1,493 @@ +unit uRESTDWBasicDbTypes; + +{$I ..\..\Source\Includes\uRESTDW.inc} + +{ + REST Dataware . + Criado por XyberX (Gilbero Rocha da Silva), o REST Dataware tem como objetivo o uso de REST/JSON + de maneira simples, em qualquer Compilador Pascal (Delphi, Lazarus e outros...). + O REST Dataware também tem por objetivo levar componentes compatíveis entre o Delphi e outros Compiladores + Pascal e com compatibilidade entre sistemas operacionais. + Desenvolvido para ser usado de Maneira RAD, o REST Dataware tem como objetivo principal você usuário que precisa + de produtividade e flexibilidade para produção de Serviços REST/JSON, simplificando o processo para você programador. + + Membros do Grupo : + + XyberX (Gilberto Rocha) - Admin - Criador e Administrador do pacote. + Alexandre Abbade - Admin - Administrador do desenvolvimento de DEMOS, coordenador do Grupo. + Anderson Fiori - Admin - Gerencia de Organização dos Projetos + Flávio Motta - Member Tester and DEMO Developer. + Mobius One - Devel, Tester and Admin. + Gustavo - Criptografia and Devel. + Eloy - Devel. + Roniery - Devel. +} + +{$IFNDEF RESTDWLAZARUS} + {$IFDEF FPC} + {$MODE OBJFPC}{$H+} + {$ENDIF} +{$ENDIF} + +Interface + +Uses + {$IFNDEF FPC} + {$IF CompilerVersion < 21} + DbTables, + {$IFEND} + {$ENDIF} + SysUtils, Classes, Db, FMTBcd, + uRESTDWAbout, uRESTDWProtoTypes, uRESTDWConsts, uRESTDWTools; + + Type + TRESTDWMemTableAE = Class + End; + TFieldAttrs = Array of Byte; + TMemBlobData = TRESTDWBytes; + TMemBlobArray = Array Of TMemBlobData; + PMemBlobArray = ^TMemBlobArray; + + {$IFNDEF FPC} + {$IF CompilerVersion > 21} + PRESTDWMTMemBuffer = PByte; + TRESTDWMTBookmark = TBookmark; + TRESTDWMTValueBuffer = TValueBuffer; + TRESTDWMTRecordBuffer = TRecordBuffer; + {$ELSE} + {$IFDEF UNICODE} + PRESTDWMTMemBuffer = PByte; + {$ELSE} + PRESTDWMTMemBuffer = PAnsiChar; + {$ENDIF UNICODE} + TRESTDWMTBookmark = Pointer; + TRESTDWMTValueBuffer = Pointer; + TRESTDWMTRecordBuffer = Pointer; + {$IFEND} + {$ELSE} + TValueBuffer = Array of Byte; + PRESTDWMTMemBuffer = PByte; + TRESTDWMTBookmark = Pointer; + TRESTDWMTValueBuffer = Pointer; + TRESTDWMTRecordBuffer = TRecordBuffer; + {$ENDIF} + PMemBlobData = ^TRESTDWBytes; + Type + PRESTDWMTMemoryRecord = ^TRESTDWMTMemoryRecord; + TRESTDWMTMemoryRecord = Class(TPersistent) + Private + FMemoryData : TRESTDWMemTableAE; + FIndex, + FID : Integer; + FData : Pointer; + FIsNull : Boolean; + Function GetIndex : Integer; + Procedure SetMemoryData(Value : TRESTDWMemTableAE; + UpdateParent : Boolean); + Protected + Procedure SetIndex (Value : Integer); Virtual; + Public + FBlobs : TMemBlobArray; + Constructor Create (MemoryData : TRESTDWMemTableAE); Virtual; + Constructor CreateEx (MemoryData : TRESTDWMemTableAE; + UpdateParent : Boolean); Virtual; + Destructor Destroy;Override; + Property MemoryData : TRESTDWMemTableAE Read FMemoryData; + Property ID : Integer Read FID Write FID; + Property Index : Integer Read GetIndex Write SetIndex; + Property Data : Pointer Read FData Write FData; + Property Blobs : TMemBlobArray Read FBlobs Write FBlobs; + Property IsNull : Boolean Read FIsNull Write FIsNull; + End; + Type + IRESTDWMemTable = Interface + Function GetRecordCount : Integer; + Function GetMemoryRecord (Index : Integer) : TRESTDWMTMemoryRecord; + Function GetOffSets (aField : TField) : Word;Overload; + Function GetOffSets (Index : Integer) : Word;Overload; + Function GetOffSetsBlobs : Word; + Function DataTypeSuported(datatype : TFieldType) : Boolean; // new + Function DataTypeIsBlobTypes(datatype : TFieldType) : Boolean; // new + Function GetBlobRec (Field : TField; + Rec : TRESTDWMTMemoryRecord) : TMemBlobData; + Function CreateBlobStream (Field : TField; + Mode : TBlobStreamMode) : TStream; + Function GetCalcFieldLen (FieldType: TFieldType; + Size : Word) : Word; + Procedure InternalAddRecord (Buffer : {$IFDEF FPC}Pointer{$ELSE} + {$IFDEF RESTDWANDROID}TRecBuf{$ELSE} + {$IF CompilerVersion >22}Pointer{$ELSE}TRecordBuffer{$IFEND}{$ENDIF}{$ENDIF}; + aAppend : Boolean); + Procedure InitRecord (Buffer : {$IFDEF NEXTGEN}TRecBuf{$ELSE}TRecordBuffer{$ENDIF}); + Function AllocRecordBuffer : TRecordBuffer; + Procedure SetMemoryRecordData(Buffer : PRESTDWMTMemBuffer; + Pos : Integer); + Procedure AfterLoad; + Function GetDataset : TDataset; + Function GetBlob (RecNo, Index : Integer) : PMemBlobData; + Procedure Loaded; + {$IFDEF FPC} + Function GetDatabaseCharSet : TDatabaseCharSet; + {$ENDIF} + End; + Type + TConnectionDefs = Class(TPersistent) + Private + votherDetails, + vCharset, + vDatabaseName, + vHostName, + vUsername, + vPassword, + vProtocol, + vDriverID, + vDataSource : String; + vdbPort : Integer; + vDWDatabaseType : TRESTDWDatabaseType; + Private + Function GetDatabaseType(Value : String) : TRESTDWDatabaseType;Overload; + Function GetDatabaseType(Value : TRESTDWDatabaseType) : String; Overload; + Public + Constructor Create; //Cria o Componente + Destructor Destroy;Override;//Destroy a Classe + Procedure Assign(Source : TPersistent); Override; + Function ToJSON : String; + Procedure LoadFromJSON(Value : String); + Published + Property DriverType : TRESTDWDatabaseType Read vDWDatabaseType Write vDWDatabaseType; + Property Charset : String Read vCharset Write vCharset; + Property DriverID : String Read vDriverID Write vDriverID; + Property DatabaseName : String Read vDatabaseName Write vDatabaseName; + Property HostName : String Read vHostName Write vHostName; + Property Username : String Read vUsername Write vUsername; + Property Password : String Read vPassword Write vPassword; + Property Protocol : String Read vProtocol Write vProtocol; + Property DBPort : Integer Read vdbPort Write vdbPort; + Property DataSource : String Read vDataSource Write vDataSource; + Property OtherDetails : String Read votherDetails Write votherDetails; + End; + Type + TRESTDWStorageBase = class(TRESTDWComponent) + Private + {$IFDEF FPC} + FDatabaseCharSet: TDatabaseCharSet; + {$ENDIF} + FEncodeStrs: Boolean; + Protected + Procedure SaveDatasetToStream (Dataset : TDataset; + Var stream : TStream); Virtual; + Procedure LoadDatasetFromStream(Dataset : TDataset; + stream : TStream); Virtual; + Procedure SaveDWMemToStream (Dataset : TDataset; + Var stream : TStream); Virtual; + Procedure LoadDWMemFromStream (Dataset : TDataset; + stream : TStream); Virtual; + Public + Constructor Create (AOwner : TComponent); Override; + Procedure SaveToStream (Dataset : TDataset; + Var Stream : TStream); + Procedure LoadFromStream(Dataset : TDataset; + Stream : TStream); + Procedure SaveToFile (Dataset : TDataset; + FileName : String); + Procedure LoadFromFile (Dataset : TDataset; + FileName : String); + Public + Property EncodeStrs : Boolean Read FEncodeStrs Write FEncodeStrs; + Published + {$IFDEF FPC} + Property DatabaseCharSet : TDatabaseCharSet Read FDatabaseCharSet Write FDatabaseCharSet; + {$ENDIF} + End; + + + +implementation + +Uses uRESTDWMemoryDataset, uRESTDWDataJSON, uRESTDWJSONInterface; + +constructor TRESTDWStorageBase.Create(AOwner: TComponent); +Begin + inherited Create(AOwner); + FEncodeStrs := True; +End; + +Procedure TRESTDWStorageBase.LoadDatasetFromStream(Dataset: TDataset; stream: TStream); +Begin + +End; + +Procedure TRESTDWStorageBase.LoadDWMemFromStream(Dataset : TDataset; + stream : TStream); +Begin + +End; + +Procedure TRESTDWStorageBase.LoadFromFile(Dataset: TDataset; FileName: String); +Var + vFileStream : TFileStream; +Begin + If not FileExists(FileName) then + Exit; + vFileStream := TFileStream.Create(FileName,fmOpenRead or fmShareDenyWrite); + Try + LoadFromStream(Dataset,TStream(vFileStream)); + Finally + vFileStream := Nil; + vFileStream.Free; + End; +End; + +Procedure TRESTDWStorageBase.LoadFromStream(Dataset: TDataset; stream: TStream); +Begin + LoadDWMemFromStream(TRESTDWMemtable(Dataset), stream); +End; + +Procedure TRESTDWStorageBase.SaveDatasetToStream(Dataset: TDataset; Var stream: TStream); +Begin + +End; + +Procedure TRESTDWStorageBase.SaveDWMemToStream(Dataset : TDataset; + Var Stream : TStream); +Begin + +End; + +Procedure TRESTDWStorageBase.SaveToFile(Dataset: TDataset; FileName: String); +Var + vFileStream : TFileStream; +Begin + Try + vFileStream := TFileStream.Create(FileName,fmCreate); + Try + SaveToStream(Dataset,TStream(vFileStream)); + Except + End; + Finally + vFileStream.Free; + End; +End; + +Procedure TRESTDWStorageBase.SaveToStream(Dataset: TDataset; Var stream: TStream); +Begin + SaveDatasetToStream(Dataset, stream); +End; + +Constructor TConnectionDefs.Create; +Begin + Inherited; + vdbPort := -1; + vDWDatabaseType := dbtUndefined; +End; + +Destructor TConnectionDefs.Destroy; +Begin + Inherited; +End; + +Function TConnectionDefs.GetDatabaseType(Value : String) : TRESTDWDatabaseType; +Begin + Result := dbtUndefined; + If LowerCase(Value) = LowerCase('dbtUndefined') Then + Result := dbtUndefined + Else If LowerCase(Value) = LowerCase('dbtAccess') Then + Result := dbtAccess + Else If LowerCase(Value) = LowerCase('dbtDbase') Then + Result := dbtDbase + Else If LowerCase(Value) = LowerCase('dbtFirebird') Then + Result := dbtFirebird + Else If LowerCase(Value) = LowerCase('dbtInterbase') Then + Result := dbtInterbase + Else If LowerCase(Value) = LowerCase('dbtMySQL') Then + Result := dbtMySQL + Else If LowerCase(Value) = LowerCase('dbtMsSQL') Then + Result := dbtMsSQL + Else If LowerCase(Value) = LowerCase('dbtOracle') Then + Result := dbtOracle + Else If LowerCase(Value) = LowerCase('dbtODBC') Then + Result := dbtODBC + Else If LowerCase(Value) = LowerCase('dbtParadox') Then + Result := dbtParadox + Else If LowerCase(Value) = LowerCase('dbtPostgreSQL') Then + Result := dbtPostgreSQL + Else If LowerCase(Value) = LowerCase('dbtSQLLite') Then + Result := dbtSQLLite + Else If LowerCase(Value) = LowerCase('dbtAdo') Then + Result := dbtAdo; +End; + +Function TConnectionDefs.GetDatabaseType(Value : TRESTDWDatabaseType) : String; +Begin + Case Value Of + dbtUndefined : Result := LowerCase('dbtUndefined'); + dbtAccess : Result := LowerCase('dbtAccess'); + dbtDbase : Result := LowerCase('dbtDbase'); + dbtFirebird : Result := LowerCase('dbtFirebird'); + dbtInterbase : Result := LowerCase('dbtInterbase'); + dbtMySQL : Result := LowerCase('dbtMySQL'); + dbtSQLLite : Result := LowerCase('dbtSQLLite'); + dbtOracle : Result := LowerCase('dbtOracle'); + dbtMsSQL : Result := LowerCase('dbtMsSQL'); + dbtParadox : Result := LowerCase('dbtParadox'); + dbtPostgreSQL : Result := LowerCase('dbtPostgreSQL'); + dbtODBC : Result := LowerCase('dbtODBC'); + dbtAdo : Result := LowerCase('dbtAdo'); + End; +End; + +Procedure TConnectionDefs.Assign(Source : TPersistent); +Var + Src : TConnectionDefs; +Begin + If Source is TConnectionDefs Then + Begin + Src := TConnectionDefs(Source); + votherDetails := Src.votherDetails; + vDatabaseName := Src.vDatabaseName; + vHostName := Src.vHostName; + vUsername := Src.vUsername; + vPassword := Src.vPassword; + vdbPort := Src.vdbPort; + vDriverID := Src.vDriverID; + vDataSource := Src.vDataSource; + End + Else + Inherited; +End; + +Function TConnectionDefs.ToJSON : String; +Begin + Result := Format('{"databasename":"%s","hostname":"%s",'+ + '"username":"%s","password":"%s","dbPort":%d,'+ + '"otherDetails":"%s","charset":"%s","databasetype":"%s","protocol":"%s",'+ + '"driverID":"%s","datasource":"%s"}', + [EncodeStrings(vDatabaseName{$IFDEF FPC}, csUndefined{$ENDIF}), + EncodeStrings(vHostName {$IFDEF FPC}, csUndefined{$ENDIF}), + EncodeStrings(vUsername {$IFDEF FPC}, csUndefined{$ENDIF}), + EncodeStrings(vPassword {$IFDEF FPC}, csUndefined{$ENDIF}), + vdbPort, + EncodeStrings(votherDetails{$IFDEF FPC}, csUndefined{$ENDIF}), + EncodeStrings(vCharset {$IFDEF FPC}, csUndefined{$ENDIF}), + EncodeStrings(GetDatabaseType(vDWDatabaseType){$IFDEF FPC}, csUndefined{$ENDIF}), + EncodeStrings(vProtocol {$IFDEF FPC}, csUndefined{$ENDIF}), + EncodeStrings(vDriverID {$IFDEF FPC}, csUndefined{$ENDIF}), + EncodeStrings(vDataSource{$IFDEF FPC}, csUndefined{$ENDIF})]); +End; + +Procedure TConnectionDefs.LoadFromJSON(Value : String); +Var + bJsonValue : TRESTDWJSONInterfaceObject; +Begin + bJsonValue := TRESTDWJSONInterfaceObject.Create(Value); + Try + If bJsonValue.PairCount > 0 Then + Begin + vDatabaseName := DecodeStrings(bJsonValue.Pairs[0].Value{$IFDEF FPC}, csUndefined{$ENDIF}); + vHostName := DecodeStrings(bJsonValue.Pairs[1].Value{$IFDEF FPC}, csUndefined{$ENDIF}); + vUsername := DecodeStrings(bJsonValue.Pairs[2].Value{$IFDEF FPC}, csUndefined{$ENDIF}); + vPassword := DecodeStrings(bJsonValue.Pairs[3].Value{$IFDEF FPC}, csUndefined{$ENDIF}); + If bJsonValue.Pairs[4].Value <> '' Then + vdbPort := StrToInt(bJsonValue.Pairs[4].Value) + Else + vdbPort := -1; + votherDetails := DecodeStrings(bJsonValue.Pairs[5].Value{$IFDEF FPC}, csUndefined{$ENDIF}); + vCharset := DecodeStrings(bJsonValue.Pairs[6].Value{$IFDEF FPC}, csUndefined{$ENDIF}); + vDWDatabaseType := GetDatabaseType(DecodeStrings(bJsonValue.Pairs[7].Value{$IFDEF FPC}, csUndefined{$ENDIF})); + vProtocol := DecodeStrings(bJsonValue.Pairs[8].Value{$IFDEF FPC}, csUndefined{$ENDIF}); + vDriverID := DecodeStrings(bJsonValue.Pairs[9].Value{$IFDEF FPC}, csUndefined{$ENDIF}); + vDataSource := DecodeStrings(bJsonValue.Pairs[10].Value{$IFDEF FPC}, csUndefined{$ENDIF}); + End; + Finally + FreeAndNil(bJsonValue); + End; +End; + +// === { TRESTDWMTMemoryRecord } ==================================================== +Constructor TRESTDWMTMemoryRecord.Create(MemoryData: TRESTDWMemTableAE); +Begin + FIsNull := True; + FIndex := -1; + CreateEx(MemoryData, True); +End; + +Constructor TRESTDWMTMemoryRecord.CreateEx(MemoryData: TRESTDWMemTableAE; UpdateParent: Boolean); +Begin + Inherited Create; + SetMemoryData(MemoryData, UpdateParent); +End; + +Destructor TRESTDWMTMemoryRecord.Destroy; +Begin + SetMemoryData(Nil, False); +// Finalize(FBlobs); +// SetLength(FBlobs, 0); + Inherited Destroy; +End; + +Function TRESTDWMTMemoryRecord.GetIndex: Integer; +Begin +// If FMemoryData <> Nil then +// Result := FMemoryData.FRecords.IndexOf(Self) +// Else + Result := FIndex; +End; + +Procedure TRESTDWMTMemoryRecord.SetMemoryData(Value: TRESTDWMemTableAE; UpdateParent: Boolean); +var + I, DataSize: Integer; +Begin + If FMemoryData <> Value then + Begin + If FMemoryData <> nil then + Begin + If TRESTDWMemTable(FMemoryData).BlobFieldCount > 0 Then + Begin +// {$IFDEF FPC} + SetLength(FBlobs, 0); //Finalize(FBlobs, FMemoryData.BlobFieldCount); +// {$ELSE} +// Finalize(FBlobs); +// {$ENDIF} + End; + TRESTDWMemTable(FMemoryData).FRecords.Remove(Self); + {$IFDEF FPC} + ReallocMem(FData, 0); + {$ELSE} + FreeMem(FData, SizeOf(FData)); +// ReallocMem(FData, 0); + {$ENDIF} + FMemoryData := Nil; + End; + If Value <> Nil then + Begin + If UpdateParent then + Begin + TRESTDWMemTable(Value).FRecords.Add(Self); + Inc(TRESTDWMemTable(Value).FLastID); + FID := TRESTDWMemTable(Value).FLastID; + End; + FMemoryData := Value; + If TRESTDWMemTable(Value).BlobFieldCount > 0 then + Begin + SetLength(FBlobs, 0); + SetLength(FBlobs, TRESTDWMemTable(Value).BlobFieldCount); + End; + DataSize := 0; + For I := 0 to TRESTDWMemTable(Value).Fields.Count - 1 do + CalcDataSize(TRESTDWMemTable(Value).Fields[I], DataSize); + ReallocMem(FData, DataSize); + End; + End; +End; + +Procedure TRESTDWMTMemoryRecord.SetIndex(Value: Integer); +var + CurIndex: Integer; +Begin + CurIndex := GetIndex; + If (CurIndex >= 0) and (CurIndex <> Value) then + TRESTDWMemTable(FMemoryData).FRecords.Move(CurIndex, Value); + FIndex := Value; +End; + +end. diff --git a/CORE/Source/Basic/uRESTDWBasicTypes.pas b/CORE/Source/Basic/uRESTDWBasicTypes.pas index 54766db5..20b16d41 100644 --- a/CORE/Source/Basic/uRESTDWBasicTypes.pas +++ b/CORE/Source/Basic/uRESTDWBasicTypes.pas @@ -37,9 +37,33 @@ DbTables, {$IFEND} {$ENDIF} - SysUtils, Classes, Db, FMTBcd, - uRESTDWAbout, uRESTDWMemoryDataset, uRESTDWConsts, - uRESTDWProtoTypes, uRESTDWTools; + SysUtils, Classes, Db, FMTBcd, + uRESTDWAbout, uRESTDWConsts, + uRESTDWProtoTypes, uRESTDWTools, + uRESTDWBasicDbTypes + {$IFDEF UNIDACMEM} + , DADump, UniDump, VirtualTable, MemDS + {$ENDIF} + {$IFDEF ZEOSMEM} + , ZAbstractRODataset, ZAbstractDataset, ZMemTable, ZDataset + {$ENDIF} + {$IFNDEF FPC} + {$IF CompilerVersion > 22} // Delphi 2010 pra cima + {$IFDEF RESTFDMEMTABLE} + , FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, + FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, + FireDAC.Comp.DataSet, FireDAC.Comp.Client + {$IFNDEF FPC} + {$IF CompilerVersion > 26} // Delphi XE6 pra cima + , FireDAC.Stan.StorageBin + {$IFEND} + {$ENDIF} + {$ENDIF} + {$IFEND} + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + , uRESTDWMemoryDataset + {$ENDIF} ; Type TFieldDefinition = Class @@ -57,6 +81,7 @@ MessageText: String; End; + {$IFDEF FPC} Type TSQLTimeStamp = Record Year, @@ -67,20 +92,7 @@ Second : Word; Fractions : Cardinal; End; - -type - TSQLTimeStampOffset = record - Year, - Month, - Day, - Hour, - Minute, - Second : Word; - Fractions : Cardinal; - TimeZoneHour: SmallInt; - TimeZoneMinute: SmallInt; - end; - + {$ENDIF} Type TClassNull= Class(TComponent) @@ -109,44 +121,6 @@ TSQLTimeStampOffset = record property ProxyUsername : String Read FUsername Write FUserName; End; - - Type - TConnectionDefs = Class(TPersistent) - Private - votherDetails, - vCharset, - vDatabaseName, - vHostName, - vUsername, - vPassword, - vProtocol, - vDriverID, - vDataSource : String; - vdbPort : Integer; - vDWDatabaseType : TRESTDWDatabaseType; - Private - Function GetDatabaseType(Value : String) : TRESTDWDatabaseType;Overload; - Function GetDatabaseType(Value : TRESTDWDatabaseType) : String; Overload; - Public - Constructor Create; //Cria o Componente - Destructor Destroy;Override;//Destroy a Classe - Procedure Assign(Source : TPersistent); Override; - Function ToJSON : String; - Procedure LoadFromJSON(Value : String); - Published - Property DriverType : TRESTDWDatabaseType Read vDWDatabaseType Write vDWDatabaseType; - Property Charset : String Read vCharset Write vCharset; - Property DriverID : String Read vDriverID Write vDriverID; - Property DatabaseName : String Read vDatabaseName Write vDatabaseName; - Property HostName : String Read vHostName Write vHostName; - Property Username : String Read vUsername Write vUsername; - Property Password : String Read vPassword Write vPassword; - Property Protocol : String Read vProtocol Write vProtocol; - Property DBPort : Integer Read vdbPort Write vdbPort; - Property DataSource : String Read vDataSource Write vDataSource; - Property OtherDetails : String Read votherDetails Write votherDetails; - End; - Type TRESTDWDataRoute = Class Private @@ -248,7 +222,30 @@ TSQLTimeStampOffset = record End; Type - TRESTDWClientSQLBase = Class(TRESTDWMemTableEx) //Classe com as funcionalidades de um DBQuery + {$IFDEF FPC} + {$IFDEF UNIDACMEM} + TRESTDWClientSQLBase = Class(TVirtualTable) + {$ENDIF} + {$IFDEF ZEOSMEM} + TRESTDWClientSQLBase = Class(TZMemTable) + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWClientSQLBase = Class(TRESTDWMemTableEx) //Classe com as funcionalidades de um DBQuery + {$ENDIF} + {$ELSE} + {$IFDEF UNIDACMEM} + TRESTDWClientSQLBase = Class(TVirtualTable) + {$ENDIF} + {$IFDEF ZEOSMEM} + TRESTDWClientSQLBase = Class(TZMemTable) + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TRESTDWClientSQLBase = Class(TFDMemtable) //Classe com as funcionalidades de um DBQuery + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWClientSQLBase = Class(TRESTDWMemTableEx) //Classe com as funcionalidades de um DBQuery + {$ENDIF} + {$ENDIF} Private fsAbout : TRESTDWAboutInfo; vComponentTag, @@ -261,6 +258,7 @@ TSQLTimeStampOffset = record vOnWriterProcess : TOnWriterProcess; Function OnEditingState : Boolean; Public + Property BinaryCompatibleMode : Boolean Read vBinaryCompatibleMode; Procedure BaseOpen; Procedure BaseClose; Procedure ForceInternalCalc; @@ -311,6 +309,8 @@ TSQLTimeStampOffset = record uRESTDWDataJSON, uRESTDWJSONInterface, uRESTDWBasicDB, uRESTDWDataUtils, uRESTDWMimeTypes; +{ TRESTDWStorageBase } + Class Function TRESTDWStreamHelper.ReadBytes(Const AStream : TStream; Var VBytes : TRESTDWBytes; Const ACount, @@ -442,135 +442,6 @@ TSQLTimeStampOffset = record Inherited Create(AFile, fmOpenRead or fmShareDenyWrite); End; -Constructor TConnectionDefs.Create; -Begin - Inherited; - vdbPort := -1; - vDWDatabaseType := dbtUndefined; -End; - -Destructor TConnectionDefs.Destroy; -Begin - Inherited; -End; - -Function TConnectionDefs.GetDatabaseType(Value : String) : TRESTDWDatabaseType; -Begin - Result := dbtUndefined; - If LowerCase(Value) = LowerCase('dbtUndefined') Then - Result := dbtUndefined - Else If LowerCase(Value) = LowerCase('dbtAccess') Then - Result := dbtAccess - Else If LowerCase(Value) = LowerCase('dbtDbase') Then - Result := dbtDbase - Else If LowerCase(Value) = LowerCase('dbtFirebird') Then - Result := dbtFirebird - Else If LowerCase(Value) = LowerCase('dbtInterbase') Then - Result := dbtInterbase - Else If LowerCase(Value) = LowerCase('dbtMySQL') Then - Result := dbtMySQL - Else If LowerCase(Value) = LowerCase('dbtMsSQL') Then - Result := dbtMsSQL - Else If LowerCase(Value) = LowerCase('dbtOracle') Then - Result := dbtOracle - Else If LowerCase(Value) = LowerCase('dbtODBC') Then - Result := dbtODBC - Else If LowerCase(Value) = LowerCase('dbtParadox') Then - Result := dbtParadox - Else If LowerCase(Value) = LowerCase('dbtPostgreSQL') Then - Result := dbtPostgreSQL - Else If LowerCase(Value) = LowerCase('dbtSQLLite') Then - Result := dbtSQLLite - Else If LowerCase(Value) = LowerCase('dbtAdo') Then - Result := dbtAdo; -End; - -Function TConnectionDefs.GetDatabaseType(Value : TRESTDWDatabaseType) : String; -Begin - Case Value Of - dbtUndefined : Result := LowerCase('dbtUndefined'); - dbtAccess : Result := LowerCase('dbtAccess'); - dbtDbase : Result := LowerCase('dbtDbase'); - dbtFirebird : Result := LowerCase('dbtFirebird'); - dbtInterbase : Result := LowerCase('dbtInterbase'); - dbtMySQL : Result := LowerCase('dbtMySQL'); - dbtSQLLite : Result := LowerCase('dbtSQLLite'); - dbtOracle : Result := LowerCase('dbtOracle'); - dbtMsSQL : Result := LowerCase('dbtMsSQL'); - dbtParadox : Result := LowerCase('dbtParadox'); - dbtPostgreSQL : Result := LowerCase('dbtPostgreSQL'); - dbtODBC : Result := LowerCase('dbtODBC'); - dbtAdo : Result := LowerCase('dbtAdo'); - End; -End; - -Procedure TConnectionDefs.Assign(Source : TPersistent); -Var - Src : TConnectionDefs; -Begin - If Source is TConnectionDefs Then - Begin - Src := TConnectionDefs(Source); - votherDetails := Src.votherDetails; - vDatabaseName := Src.vDatabaseName; - vHostName := Src.vHostName; - vUsername := Src.vUsername; - vPassword := Src.vPassword; - vdbPort := Src.vdbPort; - vDriverID := Src.vDriverID; - vDataSource := Src.vDataSource; - End - Else - Inherited; -End; - -Function TConnectionDefs.ToJSON : String; -Begin - Result := Format('{"databasename":"%s","hostname":"%s",'+ - '"username":"%s","password":"%s","dbPort":%d,'+ - '"otherDetails":"%s","charset":"%s","databasetype":"%s","protocol":"%s",'+ - '"driverID":"%s","datasource":"%s"}', - [EncodeStrings(vDatabaseName{$IFDEF FPC}, csUndefined{$ENDIF}), - EncodeStrings(vHostName {$IFDEF FPC}, csUndefined{$ENDIF}), - EncodeStrings(vUsername {$IFDEF FPC}, csUndefined{$ENDIF}), - EncodeStrings(vPassword {$IFDEF FPC}, csUndefined{$ENDIF}), - vdbPort, - EncodeStrings(votherDetails{$IFDEF FPC}, csUndefined{$ENDIF}), - EncodeStrings(vCharset {$IFDEF FPC}, csUndefined{$ENDIF}), - EncodeStrings(GetDatabaseType(vDWDatabaseType){$IFDEF FPC}, csUndefined{$ENDIF}), - EncodeStrings(vProtocol {$IFDEF FPC}, csUndefined{$ENDIF}), - EncodeStrings(vDriverID {$IFDEF FPC}, csUndefined{$ENDIF}), - EncodeStrings(vDataSource{$IFDEF FPC}, csUndefined{$ENDIF})]); -End; - -Procedure TConnectionDefs.LoadFromJSON(Value : String); -Var - bJsonValue : TRESTDWJSONInterfaceObject; -Begin - bJsonValue := TRESTDWJSONInterfaceObject.Create(Value); - Try - If bJsonValue.PairCount > 0 Then - Begin - vDatabaseName := DecodeStrings(bJsonValue.Pairs[0].Value{$IFDEF FPC}, csUndefined{$ENDIF}); - vHostName := DecodeStrings(bJsonValue.Pairs[1].Value{$IFDEF FPC}, csUndefined{$ENDIF}); - vUsername := DecodeStrings(bJsonValue.Pairs[2].Value{$IFDEF FPC}, csUndefined{$ENDIF}); - vPassword := DecodeStrings(bJsonValue.Pairs[3].Value{$IFDEF FPC}, csUndefined{$ENDIF}); - If bJsonValue.Pairs[4].Value <> '' Then - vdbPort := StrToInt(bJsonValue.Pairs[4].Value) - Else - vdbPort := -1; - votherDetails := DecodeStrings(bJsonValue.Pairs[5].Value{$IFDEF FPC}, csUndefined{$ENDIF}); - vCharset := DecodeStrings(bJsonValue.Pairs[6].Value{$IFDEF FPC}, csUndefined{$ENDIF}); - vDWDatabaseType := GetDatabaseType(DecodeStrings(bJsonValue.Pairs[7].Value{$IFDEF FPC}, csUndefined{$ENDIF})); - vProtocol := DecodeStrings(bJsonValue.Pairs[8].Value{$IFDEF FPC}, csUndefined{$ENDIF}); - vDriverID := DecodeStrings(bJsonValue.Pairs[9].Value{$IFDEF FPC}, csUndefined{$ENDIF}); - vDataSource := DecodeStrings(bJsonValue.Pairs[10].Value{$IFDEF FPC}, csUndefined{$ENDIF}); - End; - Finally - FreeAndNil(bJsonValue); - End; -End; - Function RPos(const Substr, S: string): Integer; Var I, X, Len: Integer; @@ -620,7 +491,11 @@ TSQLTimeStampOffset = record vOnWriterProcess := Nil; vBinaryCompatibleMode := False; vLoadFromStream := False; - vBinaryCompatibleMode := True; + {$IFDEF RESTDWMEMTABLE} + vBinaryCompatibleMode := True; + {$ELSE} + vBinaryCompatibleMode := False; + {$ENDIF} End; Function TRESTDWClientSQLBase.OnEditingState: Boolean; diff --git a/CORE/Source/Basic/uRESTDWComponentEvents.pas b/CORE/Source/Basic/uRESTDWComponentEvents.pas index 106595c8..f3bda322 100644 --- a/CORE/Source/Basic/uRESTDWComponentEvents.pas +++ b/CORE/Source/Basic/uRESTDWComponentEvents.pas @@ -32,7 +32,7 @@ interface Uses SysUtils, Classes, Db, - uRESTDWDataUtils, uRESTDWParams, uRESTDWBasicTypes, uRESTDWProtoTypes, + uRESTDWDataUtils, uRESTDWParams, uRESTDWBasicDbTypes, uRESTDWProtoTypes, uRESTDWConsts, uRESTDWMassiveBuffer, uRESTDWAuthenticators; Type diff --git a/CORE/Source/Basic/uRESTDWDesignReg.pas b/CORE/Source/Basic/uRESTDWDesignReg.pas index 5b8a99a3..a51c986b 100644 --- a/CORE/Source/Basic/uRESTDWDesignReg.pas +++ b/CORE/Source/Basic/uRESTDWDesignReg.pas @@ -27,14 +27,14 @@ interface uses {$IFDEF FPC} - {$IFNDEF RESTDWLAMW}StdCtrls, {$ENDIF} + {$IFNDEF RESTDWLAMW}StdCtrls, {$ENDIF} ComCtrls, Forms, ExtCtrls, DBCtrls, DBGrids, Dialogs, Controls, LResources, LazFileUtils, - {$IFNDEF RESTDWLAMW} - FormEditingIntf, PropEdits, lazideintf, - ProjectIntf, ComponentEditors, - {$ENDIF} - fpWeb, TypInfo, + {$IFNDEF RESTDWLAMW} + FormEditingIntf, PropEdits, lazideintf, + ProjectIntf, ComponentEditors, + {$ENDIF} + fpWeb, TypInfo, {$ELSE} {$IFNDEF RESTDWLAMW} Windows, @@ -56,8 +56,9 @@ interface Menus, {$ENDIF} uRESTDWBasicClass, uRESTDWDatamodule, uRESTDWServerEvents, uRESTDWBasicDB, - uRESTDWServerContext, uRESTDWServerRoutes, uRESTDWMassiveBuffer, uRESTDWMemoryDataset, - uRESTDWBufferDb, uRESTDWAbout, uRESTDWDriverBase, uRESTDWAuthenticators; + uRESTDWServerContext, uRESTDWServerRoutes, uRESTDWMassiveBuffer, + uRESTDWMemoryDataset, uRESTDWBufferDb, uRESTDWAbout, uRESTDWDriverBase, + uRESTDWAuthenticators; {$IFNDEF RESTDWDELPHINET} Const @@ -151,7 +152,7 @@ TDriverConnectionListProperty = class(TComponentProperty) {$IFNDEF RESTDWLAZARUS} Type - TDSDesignerDW = Class(TDSDesigner) + TRESTDWDesigner = Class(TDSDesigner) Private Public {$IFDEF DELPHI2006UP} @@ -431,10 +432,9 @@ procedure UnregisterAboutBox; {$ENDIF} {$ENDIF} - {$IFNDEF RESTDWLAMW} {$IFNDEF RESTDWLAZARUS} -Procedure TDSDesignerDW.BeginUpdateFieldDefs; +Procedure TRESTDWDesigner.BeginUpdateFieldDefs; Var Idx: Integer; Begin @@ -446,21 +446,21 @@ procedure UnregisterAboutBox; End; End; -Procedure TDSDesignerDW.EndUpdateFieldDefs; +Procedure TRESTDWDesigner.EndUpdateFieldDefs; Begin Inherited; If TRESTDWClientSQL(DataSet).Active Then TRESTDWClientSQL(DataSet).Close; End; -Procedure TDSDesignerDW.InitializeMenu(Menu: TPopupMenu); +Procedure TRESTDWDesigner.InitializeMenu(Menu: TPopupMenu); Begin Inherited; // Ao clicar duas vezes no componente RESTDWClientSQL // ou ao selecionar no popup menu opção "Fields Editor". End; -Procedure TDSDesignerDW.UpdateMenus(Menu: TPopupMenu; EditState: TEditState); +Procedure TRESTDWDesigner.UpdateMenus(Menu: TPopupMenu; EditState: TEditState); Begin // Ao acionar o popup menu dos Fields persistents: (Add, Add All, New Field) Inherited; @@ -478,7 +478,7 @@ procedure UnregisterAboutBox; TRESTDWClientSQL(Component).Close; TRESTDWClientSQL(Component).CreateDatasetFromList; {$ENDIF} - ShowFieldsEditor(Designer, TRESTDWClientSQL(Component), TDSDesignerDW); + ShowFieldsEditor(Designer, TRESTDWClientSQL(Component), TRESTDWDesigner); Finally {$IFDEF DELPHIXEUP} TRESTDWClientSQL(Component).SetInDesignEvents(False); @@ -511,9 +511,9 @@ procedure TRESTDWClientSQLEditor.ExecuteVerb(Index: Integer); End; {$IFDEF DELPHI2006UP} -Function TDSDesignerDW.DoCreateField(const FieldName: WideString; Origin: string): TField; +Function TRESTDWDesigner.DoCreateField(const FieldName: WideString; Origin: string): TField; {$ELSE} -Function TDSDesignerDW.DoCreateField(const FieldName: String; Origin: string): TField; +Function TRESTDWDesigner.DoCreateField(const FieldName: String; Origin: string): TField; {$ENDIF} Var F: TField; @@ -560,12 +560,12 @@ procedure TRESTDWClientSQLEditor.ExecuteVerb(Index: Integer); End; End; -Function TDSDesignerDW.SupportsAggregates: Boolean; +Function TRESTDWDesigner.SupportsAggregates: Boolean; Begin Result := True; End; -Function TDSDesignerDW.SupportsInternalCalc: Boolean; +Function TRESTDWDesigner.SupportsInternalCalc: Boolean; Begin Result := True; End; @@ -787,9 +787,16 @@ procedure TRESTDWContextRulesEditor.ExecuteVerb(Index: Integer); Begin {$IFDEF FPC} // RegFields(DefaultFieldClasses); - RegField(TExtendedField); + RegField(TRESTDWNumericField); + RegField(TStringFieldRESTDW); + RegField(TStreamField); +// RegField(TRESTDWSQLTimeStampOffsetField); {$ELSE} -// RegisterFields([TExtendedField]); + {$IFDEF RESTDWMEMTABLE} + RegisterFields([TStringFieldRESTDW]); + RegisterFields([TRESTDWNumericField]); + RegisterFields([TStreamField]); + {$ENDIF} {$ENDIF} {$IFDEF FPC} {$I RESTDataWareComponents_LAMW.lrs} @@ -819,7 +826,7 @@ procedure TRESTDWContextRulesEditor.ExecuteVerb(Index: Integer); {$IFNDEF RESTDWLAMW} RegisterComponents('REST Dataware - Tools', [TRESTDWResponseTranslator, TRESTDWBufferDB]); {$ENDIF} - RegisterComponents('REST Dataware - DB', [TRESTDWPoolerDB, TRESTDWMemTable, TRESTDWClientSQL, + RegisterComponents('REST Dataware - DB', [TRESTDWPoolerDB, TRESTDWMemTable, TRESTDWClientSQL, TRESTDWTable, TRESTDWUpdateSQL, TRESTDWMassiveSQLCache, TRESTDWStoredProcedure, TRESTDWMassiveCache, TRESTDWBatchMove]); RegisterComponents('REST Dataware - Authenticators', [TRESTDWAuthBasic, TRESTDWAuthToken, TRESTDWAuthOAuth]); diff --git a/CORE/Source/Basic/uRESTDWParams.pas b/CORE/Source/Basic/uRESTDWParams.pas index cafa3a02..7162215d 100644 --- a/CORE/Source/Basic/uRESTDWParams.pas +++ b/CORE/Source/Basic/uRESTDWParams.pas @@ -637,8 +637,8 @@ implementation If (Pos('.', vTempValue) > 0) Or (Pos(':', vTempValue) > 0) Or (Pos('/', vTempValue) > 0) Or - (Pos('\', vTempValue) > 0) - //(Pos('-', vTempValue) > 0) + (Pos('\', vTempValue) > 0) Or + (Pos('-', vTempValue) > 0) // Or (vTempValue.CountChar('-')>1) //Testar XyberX Then Field.AsDateTime := StrToDateTime(vTempValue) @@ -833,7 +833,7 @@ procedure TRESTDWParamsMethods.PutRecName(Index: String; Item: TRESTDWParamMetho {$IFDEF DELPHI2010UP} vRESTDWBytes := StringUtf8ToBytes(DecodeStrings(vTempString{$IFDEF FPC}, csUndefined{$ENDIF})); If Length(vRESTDWBytes) > 0 Then - vTempString:= TEncoding.UTF8.Getstring(vRESTDWBytes) + vTempString:= TEncoding.UTF8.Getstring(TBytes(vRESTDWBytes)) Else vTempString:= ''; SetLength(vRESTDWBytes, 0); @@ -6683,14 +6683,14 @@ procedure TRESTDWJSONParam.SetParamContentType(const bValue: String); Procedure TRESTDWParams.SetCriptOptions(Use : Boolean; Key : String); -Var - I : Integer; +//Var +// I : Integer; Begin - For I := 0 To Count -1 Do - Begin +// For I := 0 To Count -1 Do +// Begin // Items[I].CriptOptions.Use := Use; // Items[I].CriptOptions.Key := Key; - End; +// End; End; end. diff --git a/CORE/Source/Basic/uRESTDWPoolermethod.pas b/CORE/Source/Basic/uRESTDWPoolermethod.pas index 336b9de2..d26dbbdb 100644 --- a/CORE/Source/Basic/uRESTDWPoolermethod.pas +++ b/CORE/Source/Basic/uRESTDWPoolermethod.pas @@ -33,7 +33,7 @@ Uses {$IFDEF RESTDWWINDOWS}Windows,{$ENDIF} SysUtils, Classes, - uRESTDWMassiveBuffer, uRESTDWComponentEvents, uRESTDWBasicTypes, uRESTDWBasic, + uRESTDWMassiveBuffer, uRESTDWComponentEvents, uRESTDWBasicDbTypes, uRESTDWBasic, uRESTDWProtoTypes, uRESTDWTools, uRESTDWJSONObject, uRESTDWConsts, uRESTDWDataUtils, uRESTDWParams; diff --git a/CORE/Source/Basic/uRESTDWProtoTypes.pas b/CORE/Source/Basic/uRESTDWProtoTypes.pas index 2acf1966..7baf778c 100644 --- a/CORE/Source/Basic/uRESTDWProtoTypes.pas +++ b/CORE/Source/Basic/uRESTDWProtoTypes.pas @@ -153,6 +153,7 @@ interface {$IFDEF RESTDWLAZARUS} DWSmallint = Smallint; DWInteger = Longint; + DWLongint = Largeint; DWInt16 = Integer; DWInt64 = Int64; DWInt32 = Int32; @@ -174,6 +175,7 @@ interface DWInt16 = Integer; DWInt64 = Int64; DWInt32 = Longint; + DWLongint = Longint; DWFloat = Real; DWSingle = Single; DWDouble = Double; diff --git a/CORE/Source/Basic/uRESTDWServerEvents.pas b/CORE/Source/Basic/uRESTDWServerEvents.pas index 05a6b314..73a8b5ad 100644 --- a/CORE/Source/Basic/uRESTDWServerEvents.pas +++ b/CORE/Source/Basic/uRESTDWServerEvents.pas @@ -557,8 +557,9 @@ function TRESTDWEventList.GetRec(Index: Integer): TRESTDWEvent; function TRESTDWEventList.GetRecName(Index: String): TRESTDWEvent; Var - I : Integer; + X, Z : Integer; aIndex : String; + vExit : Boolean; Begin Result := Nil; aIndex := Index; @@ -568,13 +569,29 @@ function TRESTDWEventList.GetRecName(Index: String): TRESTDWEvent; (aIndex[Length(aIndex) - FinalStrPos] = '/') Then DeleteStr(aIndex, Length(aIndex) - FinalStrPos, 1); End; - For I := 0 To Self.Count - 1 Do + X := 0; + Z := Self.Count; + vExit := Z = 0; + If Not vExit Then Begin - If (Uppercase(aIndex) = Uppercase(TRESTDWEvent(Items[I]).EventName)) Or - (Uppercase(aIndex) = Uppercase(TRESTDWEvent(Items[I]).BaseURL + TRESTDWEvent(Items[I]).EventName)) Then + While (X <> Z) Do Begin - Result := TRESTDWEvent(Self.Items[I]); - Break; +// For I := 0 To Self.Count - 1 Do + If (Uppercase(aIndex) = Uppercase(TRESTDWEvent(Items[X]).EventName)) Or + (Uppercase(aIndex) = Uppercase(TRESTDWEvent(Items[X]).BaseURL + TRESTDWEvent(Items[X]).EventName)) Then + Begin + Result := TRESTDWEvent(Self.Items[X]); + Break; + End; + Dec(Z); + If (Uppercase(aIndex) = Uppercase(TRESTDWEvent(Items[Z]).EventName)) Or + (Uppercase(aIndex) = Uppercase(TRESTDWEvent(Items[Z]).BaseURL + TRESTDWEvent(Items[Z]).EventName)) Then + Begin + Result := TRESTDWEvent(Self.Items[Z]); + Break; + End; + If Z <> X Then + Inc(X); End; End; End; @@ -651,37 +668,39 @@ procedure TRESTDWEventList.PutRecName(Index: String; Item: TRESTDWEvent); dwParam : TRESTDWJSONParam; I : Integer; vFound : Boolean; + vEvent : TRESTDWEvent; Begin vParamNameS := ''; - If vEventList.EventByName[EventName] <> Nil Then + vEvent := vEventList.EventByName[EventName]; + If vEvent <> Nil Then Begin If Not Assigned(DWParams) Then DWParams := TRESTDWParams.Create; - DWParams.DataMode := vEventList.EventByName[EventName].DataMode; - For I := 0 To vEventList.EventByName[EventName].vDWParams.Count -1 Do + DWParams.DataMode := vEvent.DataMode; + For I := 0 To vEvent.vDWParams.Count -1 Do Begin vParamNameS := ''; - vFound := (DWParams.ItemsString[vEventList.EventByName[EventName].vDWParams.Items[I].ParamName] <> Nil); + vFound := (DWParams.ItemsString[vEvent.vDWParams.Items[I].ParamName] <> Nil); If vFound Then - vParamNameS := vEventList.EventByName[EventName].vDWParams.Items[I].ParamName + vParamNameS := vEvent.vDWParams.Items[I].ParamName Else Begin - vFound := (DWParams.ItemsString[vEventList.EventByName[EventName].vDWParams.Items[I].Alias] <> Nil); + vFound := (DWParams.ItemsString[vEvent.vDWParams.Items[I].Alias] <> Nil); If vFound Then - vParamNameS := vEventList.EventByName[EventName].vDWParams.Items[I].Alias; + vParamNameS := vEvent.vDWParams.Items[I].Alias; End; If Not(vFound) Then Begin dwParam := TRESTDWJSONParam.Create(DWParams.Encoding); - dwParam.Alias := vEventList.EventByName[EventName].vDWParams.Items[I].Alias; - dwParam.ParamName := vEventList.EventByName[EventName].vDWParams.Items[I].ParamName; - dwParam.ObjectDirection := vEventList.EventByName[EventName].vDWParams.Items[I].ObjectDirection; - dwParam.ObjectValue := vEventList.EventByName[EventName].vDWParams.Items[I].ObjectValue; - dwParam.Encoded := vEventList.EventByName[EventName].vDWParams.Items[I].Encoded; + dwParam.Alias := vEvent.vDWParams.Items[I].Alias; + dwParam.ParamName := vEvent.vDWParams.Items[I].ParamName; + dwParam.ObjectDirection := vEvent.vDWParams.Items[I].ObjectDirection; + dwParam.ObjectValue := vEvent.vDWParams.Items[I].ObjectValue; + dwParam.Encoded := vEvent.vDWParams.Items[I].Encoded; dwParam.DataMode := DWParams.DataMode; - If (vEventList.EventByName[EventName].vDWParams.Items[I].DefaultValue <> '') And + If (vEvent.vDWParams.Items[I].DefaultValue <> '') And (Trim(dwParam.AsString) = '') Then - dwParam.Value := vEventList.EventByName[EventName].vDWParams.Items[I].DefaultValue; + dwParam.Value := vEvent.vDWParams.Items[I].DefaultValue; DWParams.Add(dwParam); End Else @@ -689,13 +708,13 @@ procedure TRESTDWEventList.PutRecName(Index: String; Item: TRESTDWEvent); If (DWParams.ItemsString[vParamNameS].ParamName = '') Or ((DWParams.ItemsString[vParamNameS].ParamName <> '') And (Lowercase(DWParams.ItemsString[vParamNameS].ParamName) <> - Lowercase(vEventList.EventByName[EventName].vDWParams.Items[I].ParamName))) Then + Lowercase(vEvent.vDWParams.Items[I].ParamName))) Then Begin - DWParams.ItemsString[vParamNameS].Alias := vEventList.EventByName[EventName].vDWParams.Items[I].Alias; - DWParams.ItemsString[vParamNameS].ParamName := vEventList.EventByName[EventName].vDWParams.Items[I].ParamName; + DWParams.ItemsString[vParamNameS].Alias := vEvent.vDWParams.Items[I].Alias; + DWParams.ItemsString[vParamNameS].ParamName := vEvent.vDWParams.Items[I].ParamName; End; If DWParams.ItemsString[vParamNameS].Alias = '' Then - DWParams.ItemsString[vParamNameS].Alias := vEventList.EventByName[EventName].vDWParams.Items[I].Alias; + DWParams.ItemsString[vParamNameS].Alias := vEvent.vDWParams.Items[I].Alias; End; End; End diff --git a/CORE/Source/Basic/uRESTDWStorageBin.pas b/CORE/Source/Basic/uRESTDWStorageBin.pas index 0857f5a0..3f2b2369 100644 --- a/CORE/Source/Basic/uRESTDWStorageBin.pas +++ b/CORE/Source/Basic/uRESTDWStorageBin.pas @@ -33,8 +33,29 @@ interface uses {$IFNDEF RESTDWLAZARUS}{$IFNDEF RESTDWFPC}SqlTimSt, {$ENDIF}{$ENDIF} - Classes, SysUtils, uRESTDWMemoryDataset, FmtBcd, DB, Variants, uRESTDWConsts, - uRESTDWTools{$IFDEF FPC}, uRESTDWBasicTypes{$ENDIF}; + FmtBcd, DB, Variants, Classes, SysUtils, uRESTDWBasicDbTypes, + {$IFDEF UNIDACMEM} + DADump, UniDump, VirtualTable, MemDS, + {$ENDIF} + {$IFDEF ZEOSMEM} + ZAbstractRODataset, ZAbstractDataset, ZMemTable, ZDataset, + {$ENDIF} + {$IFNDEF FPC} + {$IF CompilerVersion > 22} // Delphi 2010 pra cima + {$IFDEF RESTFDMEMTABLE} + FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.Stan.Param, + FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf, FireDAC.DApt.Intf, + FireDAC.Comp.DataSet, FireDAC.Comp.Client, + {$IFNDEF FPC} + {$IF CompilerVersion > 26} // Delphi XE6 pra cima + FireDAC.Stan.StorageBin, + {$IFEND} + {$ENDIF} + {$ENDIF} + {$IFEND} + {$ENDIF} + uRESTDWMemoryDataset, + uRESTDWConsts, uRESTDWTools, uRESTDWBasicTypes; Type TRESTDWStorageBin = Class(TRESTDWStorageBase) @@ -44,20 +65,20 @@ interface FFieldSize, FFieldPrecision : Array of Integer; FFieldTypes, - FFieldAttrs : Array of Byte; + FFieldAttrs : TFieldAttrs; FFieldExists : Array of Boolean; Procedure SaveRecordToStream (ADataset : TDataset; Var AStream : TStream); Procedure LoadRecordFromStream (ADataset : TDataset; AStream : TStream); - Function SaveRecordDWMemToStream (Dataset : IRESTDWMemTable; + Function SaveRecordDWMemToStream (Dataset : TRESTDWMemTable; stream : TStream) : Longint; - Procedure LoadRecordDWMemFromStream(Dataset : IRESTDWMemTable; + Procedure LoadRecordDWMemFromStream(Dataset : TRESTDWMemTable; Stream : TStream); Public - Procedure SaveDWMemToStream (IDataset : IRESTDWMemTable; + Procedure SaveDWMemToStream (IDataset : TDataset; Var AStream : TStream); Override; - Procedure LoadDWMemFromStream (IDataset : IRESTDWMemTable; + Procedure LoadDWMemFromStream (IDataset : TDataset; AStream : TStream); Override; Procedure SaveDatasetToStream (ADataset : TDataset; Var AStream : TStream); Override; @@ -236,7 +257,7 @@ interface End; End; -Procedure TRESTDWStorageBin.LoadDWMemFromStream(IDataset : IRESTDWMemTable; +Procedure TRESTDWStorageBin.LoadDWMemFromStream(IDataset : TDataset; AStream : TStream); Procedure CreateFieldDefs(DataSet : TDataSet; Index : Integer); @@ -300,7 +321,18 @@ interface End; End; Var - ADataSet : TRESTDWMemTable; + ADataSet : {$IFDEF UNIDACMEM} + TVirtualTable + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable + {$ENDIF}; I, vFieldsCount : DWInteger; vFieldSize, @@ -315,7 +347,18 @@ interface vFieldDef : TFieldDef; vField : TField; Begin - ADataSet := TRESTDWMemTable(IDataset.GetDataset); + ADataSet := {$IFDEF UNIDACMEM} + TVirtualTable + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable + {$ENDIF}(IDataset); // field count AStream.Position := 0; AStream.Read(vFieldsCount, SizeOf(vFieldsCount)); @@ -332,9 +375,7 @@ interface vNoFields := (ADataSet.Fields.Count = 0); ADataSet.Close; If vNoFields Then - begin ADataSet.FieldDefs.Clear; - end; For I := 0 To vFieldsCount-1 Do Begin // field kind @@ -347,7 +388,7 @@ interface FFieldNames[I] := vFieldName; // field type AStream.Read(vFieldType, SizeOf(vFieldType)); - If vFieldType in [{$IFDEF FPC}45, {$ENDIF}dwftExtended] Then + If vFieldType in [Integer(ftFloat), {$IFDEF FPC}45, {$ENDIF}dwftExtended] Then FFieldTypes[I] := {$IFDEF FPC}Integer(ftFMTBcd){$ELSE}Integer(ftExtended){$ENDIF} Else FFieldTypes[I] := vFieldType; @@ -382,6 +423,9 @@ interface FFieldExists[I] := (ADataSet.FindField(FFieldNames[I]) <> nil); // or (vNoFields); // create fieldsDefs like fields persistent // If ((vNoFields) Or (Not FFieldExists[I])) Then + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemTable(ADataSet).FieldAttrs := FFieldAttrs; + {$ENDIF} CreateFieldDefs(ADataSet, I); End; ADataSet.Open; @@ -413,7 +457,7 @@ interface End; ADataSet.DisableControls; Try - LoadRecordDWMemFromStream(IDataset, AStream); + LoadRecordDWMemFromStream(TRESTDWMemtable(IDataset), AStream); Finally ADataSet.EnableControls; AStream := Nil; @@ -421,7 +465,7 @@ interface End; End; -Procedure TRESTDWStorageBin.LoadRecordDWMemFromStream(Dataset : IRESTDWMemTable; +Procedure TRESTDWStorageBin.LoadRecordDWMemFromStream(Dataset : TRESTDWMemTable; stream : TStream); Var I, B, @@ -430,7 +474,18 @@ interface vVarBytes : TRESTDWBytes; aField : TField; aIndex : Integer; - vDataset : TRESTDWMemTable; + vDataset : {$IFDEF UNIDACMEM} + TVirtualTable + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable + {$ENDIF}; vActualRecord : TRESTDWMTMemoryRecord; vDataType : TFieldType; vDWFieldType : Byte; @@ -473,17 +528,17 @@ interface If (vDWFieldType In [dwftFixedWideChar, dwftWideString, dwftFixedChar, - dwftString, - dwftOraClob, - dwftWideMemo, - dwftFmtMemo, - dwftMemo]) Then + dwftString]) Then +// dwftOraClob, +// dwftWideMemo, +// dwftFmtMemo, +// dwftMemo]) Then Begin - vLength := Dataset.GetCalcFieldLen(aField.DataType, aField.Size); + vLength := TRESTDWMemtable(Dataset).GetCalcFieldLen(aField.DataType, aField.Size); {$IFDEF FPC} - FillChar(PData^, vLength -1, #0); + FillChar(PData^, vLength, #0); {$ELSE} - FillChar(pData^, vLength -1, 0); + FillChar(pData^, vLength, 0); {$ENDIF} End Else If (vDWFieldType In [dwftLongWord, @@ -529,26 +584,37 @@ interface End; Begin pActualRecord := Nil; - vDataset := TRESTDWMemTable(Dataset.GetDataset); + vDataset := {$IFDEF UNIDACMEM} + TVirtualTable + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable + {$ENDIF}(Dataset); stream.Read(vRecCount, SizeOf(vRecCount)); vRecCount := vRecCount - 1; vFieldCount := Length(FFieldNames); vFieldCount := vFieldCount - 1; For i := 0 To vRecCount Do Begin - pActualRecord := PRESTDWMTMemBuffer(Dataset.AllocRecordBuffer); + pActualRecord := PRESTDWMTMemBuffer(TRESTDWMemtable(vDataset).AllocRecordBuffer); {$IFDEF RESTDWANDROID} - Dataset.InternalAddRecord(nativeint(pActualRecord), True); + TRESTDWMemtable(vDataset).InternalAddRecord(nativeint(pActualRecord), True); {$ELSE} - Dataset.InternalAddRecord(pActualRecord, True); + TRESTDWMemtable(vDataset).InternalAddRecord(pActualRecord, True); {$ENDIF} - vActualRecord := Dataset.GetMemoryRecord(i); + vActualRecord := TRESTDWMemtable(vDataset).GetMemoryRecord(i); For b := 0 To vFieldCount Do Begin - vBoolean := False; + vBoolean := False; stream.Read(vBoolean, SizeOf(boolean)); SetLength(vVarBytes, 0); - aField := vDataset.FindField(FFieldNames[b]); + aField := vDataset.FindField(FFieldNames[b]); If aField <> Nil Then Begin aIndex := aField.FieldNo - 1; @@ -572,9 +638,12 @@ interface pData := Pointer(pActualRecord + Dataset.GetOffSets(aField)); End; End; - tratarNulos; - If Not vBoolean Then - Continue; + If vDWFieldType <> dwftBoolean Then + Begin + tratarNulos; + If Not vBoolean Then + Continue; + End; If (pData <> Nil) Or (aField = Nil) Then Begin // N Bytes - WideString @@ -610,43 +679,49 @@ interface dwftVarBytes, dwftFixedChar, dwftString : Begin + SetLength(vString, 0); stream.Read(vInt64, SizeOf(vInt64)); vString := ''; If vInt64 > 0 Then Begin SetLength(vString, vInt64); +// FillChar(Pointer(@vString)^, vInt64, 0); {$IFDEF FPC} stream.Read(Pointer(vString)^, vInt64); If EncodeStrs Then vString := DecodeStrings(vString, Dataset.GetDatabaseCharSet); vString := GetStringEncode(vString, Dataset.GetDatabaseCharSet); If aField <> Nil Then - Move(Pointer(vString)^, pData^, Length(vString)); + Move(Pointer(vString)^, pData^, vInt64); {$ELSE} stream.Read(vString[InitStrPos], vInt64); If EncodeStrs Then vString := DecodeStrings(vString); If aField <> Nil Then - Move(vString[InitStrPos], pData^, Length(vString)); + Begin +// FillChar(pData^, vInt64, 0); + Move(Pointer(vString)^, pData^, vInt64); + End; {$ENDIF} End; End; // 1 - Byte - Inteiro dwftByte, dwftShortint :Begin - stream.Read(vByte, SizeOf(vByte)); - If aField <> Nil Then - Move(vByte, PData^, Sizeof(vByte)); + stream.Read(vByte, SizeOf(vByte)); + If aField <> Nil Then + Move(vByte, PData^, Sizeof(vByte)); End; // 1 - Byte - Boolean dwftBoolean :Begin setlength(vVarBytes, 0); - setlength(vVarBytes, 2); + setlength(vVarBytes, Sizeof(Boolean)); +// Move(vBoolean, vVarBytes[0], Sizeof(Boolean)); +// stream.Read(vBoolean, SizeOf(vBoolean)); Move(vBoolean, vVarBytes[0], Sizeof(Boolean)); - stream.Read(vBoolean, SizeOf(vBoolean)); - Move(vBoolean, vVarBytes[1], Sizeof(Boolean)); +// Move(vBoolean, vVarBytes[1], Sizeof(Boolean)); If aField <> Nil Then - Move(vVarBytes[0], PData^, Sizeof(vBoolean) + Sizeof(vBoolean)); + Move(vVarBytes[0], PData^, Sizeof(vBoolean)); End; // 2 - Bytes dwftSmallint, @@ -717,14 +792,16 @@ interface , dwftExtended :Begin + vDouble := 0; stream.Read(vDouble, SizeOf(vDouble)); If aField <> Nil Then Begin - SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vDouble)); + SetLength(vVarBytes, Sizeof(Boolean) + Sizeof(vExtended)); //Move Null para Bytes Move(vBoolean, vVarBytes[0], Sizeof(Boolean)); //Move Bytes do Dado para Bytes - Move(vDouble, vVarBytes[1], Sizeof(vDouble)); + vExtended := vDouble; + Move(vExtended, vVarBytes[1], Sizeof(vExtended)); //Move Bytes para Buffer Move(vVarBytes[0], PData^, Length(vVarBytes)); End; @@ -772,7 +849,9 @@ interface dwftTimeStampOffset :Begin {$IF (NOT DEFINED(FPC)) AND (CompilerVersion >= 21)} stream.Read(vDouble, SizeOf(vDouble)); - vTimeStampOffSet := DateTimeToSQLTimeStampOffset(vDouble); + {$IFDEF RESTDWMEMTABLE} + vTimeStampOffSet := DateTimeToSQLTimeStampOffset(vDouble); + {$ENDIF} stream.Read(vByte, SizeOf(vByte)); vTimeStampOffSet.TimeZoneHour := vByte - 12; stream.Read(vByte, SizeOf(vByte)); @@ -876,33 +955,34 @@ interface dwftWideMemo, dwftFmtMemo, dwftOraClob, - dwftMemo :Begin - stream.Read(vInt64, SizeOf(vInt64)); - vString := ''; - If vInt64 > 0 Then - Begin - SetLength(vString, vInt64); - {$IFDEF FPC} - stream.Read(Pointer(vString)^, vInt64); - If EncodeStrs Then - vString := DecodeStrings(vString, csUndefined); - vString := GetStringEncode(vString, csUndefined); - {$ELSE} - stream.Read(vString[InitStrPos], vInt64); - If EncodeStrs Then - vString := DecodeStrings(vString); - {$ENDIF} - vInt64 := Length(vString) + 1; - Try - SetLength(vBytes, vInt64); - Move(vString[InitStrPos], vBytes[0], vInt64); - If aField <> Nil Then - PRESTDWBytes(pData)^ := vBytes; - Finally - SetLength(vBytes, 0); - End; - End; - End; + dwftMemo, +// dwftMemo :Begin +// stream.Read(vInt64, SizeOf(vInt64)); +// vString := ''; +// If vInt64 > 0 Then +// Begin +// SetLength(vString, vInt64); +// {$IFDEF FPC} +// stream.Read(Pointer(vString)^, vInt64); +// If EncodeStrs Then +// vString := DecodeStrings(vString, csUndefined); +// vString := GetStringEncode(vString, csUndefined); +// {$ELSE} +// stream.Read(vString[InitStrPos], vInt64); +// If EncodeStrs Then +// vString := DecodeStrings(vString); +// {$ENDIF} +// vInt64 := Length(vString) + 1; +// Try +// SetLength(vBytes, vInt64); +// Move(vString[InitStrPos], vBytes[0], vInt64); +// If aField <> Nil Then +// PRESTDWBytes(pData)^ := vBytes; +// Finally +// SetLength(vBytes, 0); +// End; +// End; +// End; // N Bytes - Others Blobs dwftStream, dwftOraBlob, @@ -958,7 +1038,8 @@ interface Try Dataset.SetMemoryRecordData(pActualRecord, i); Finally - Dispose(pActualRecord);//FreeMem(PRESTDWMTMemBuffer(@PActualRecord)); + Reallocmem(pActualRecord, 0); +// Dispose(pActualRecord);//FreeMem(PRESTDWMTMemBuffer(@PActualRecord)); End; End; End; @@ -988,8 +1069,11 @@ interface vField := ADataset.Fields[i]; vField.Clear; AStream.Read(vBoolean, Sizeof(Byte)); - If Not vBoolean Then // is null - Continue; + If FFieldTypes[i] <> dwftBoolean Then + Begin + If Not vBoolean Then + Continue; + End; // N - Bytes If (FFieldTypes[i] In [dwftFixedChar, dwftWideString, @@ -1088,14 +1172,18 @@ interface // + TimeZone - 2 Bytes Else If (FFieldTypes[i] In [dwftTimeStampOffset]) Then Begin - {$IFDEF DELPHIXEUP} - AStream.Read(vDouble, Sizeof(vDouble)); - vTimeStampOffset := DateTimeToSQLTimeStampOffset(vDouble); + {$IFDEF DELPHIXEUP} + AStream.Read(vDouble, Sizeof(vDouble)); + {$IFDEF RESTDWMEMTABLE} + vTimeStampOffset := DateTimeToSQLTimeStampOffset(vDouble); + {$ENDIF} AStream.Read(vByte, Sizeof(vByte)); vTimeStampOffset.TimeZoneHour := vByte - 12; AStream.Read(vByte, Sizeof(vByte)); vTimeStampOffset.TimeZoneMinute := vByte; - vField.AsSQLTimeStampOffset := vTimeStampOffset; + {$IFDEF RESTDWMEMTABLE} + vField.AsSQLTimeStampOffset := vTimeStampOffset; + {$ENDIF} {$ELSE} // field foi transformado em datetime AStream.Read(vDouble, Sizeof(vDouble)); @@ -1268,10 +1356,21 @@ interface AStream.Position := 0; End; -Procedure TRESTDWStorageBin.SaveDWMemToStream(IDataset : IRESTDWMemTable; +Procedure TRESTDWStorageBin.SaveDWMemToStream(IDataset : TDataset; Var AStream : TStream); Var - ADataset : TRESTDWMemTable; + ADataset : {$IFDEF UNIDACMEM} + TVirtualTable + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable + {$ENDIF}; I : DWInteger; vRecordCount : DWInt64; vString : DWString; @@ -1280,7 +1379,18 @@ interface vByte : Byte; vBookMark : TBookmark; Begin - ADataSet := TRESTDWMemTable(IDataset.GetDataset); + ADataSet := {$IFDEF UNIDACMEM} + TVirtualTable + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable + {$ENDIF}(IDataset); AStream.Size := 0; If not ADataset.Active Then ADataset.Open @@ -1345,17 +1455,28 @@ interface // marcando position recordcount = 0 vRecordCount := 0; AStream.WriteBuffer(vRecordCount, SizeOf(vRecordCount)); - vRecordCount := SaveRecordDWMemToStream(IDataSet,AStream); + vRecordCount := SaveRecordDWMemToStream(TRESTDWMemtable(IDataSet), AStream); // salvando novo valor de recordcount AStream.Position := i; AStream.WriteBuffer(vRecordCount, SizeOf(vRecordCount)); AStream.Position := 0; End; -Function TRESTDWStorageBin.SaveRecordDWMemToStream(Dataset : IRESTDWMemTable; +Function TRESTDWStorageBin.SaveRecordDWMemToStream(Dataset : TRESTDWMemTable; stream : TStream) : Longint; Var - vDataSet : TRESTDWMemTable; + vDataSet : {$IFDEF UNIDACMEM} + TVirtualTable + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable + {$ENDIF}; I, B, aIndex : DWInteger; vActualRecord : TRESTDWMTMemoryRecord; PActualRecord : PRESTDWMTMemBuffer; @@ -1384,13 +1505,26 @@ interface {$IFEND} {$ENDIF} Begin - vDataSet := TRESTDWMemTable(dataset.GetDataset); + vDataSet := {$IFDEF UNIDACMEM} + TVirtualTable + {$ENDIF} + {$IFDEF ZEOSMEM} + TZMemTable + {$ENDIF} + {$IFDEF RESTFDMEMTABLE} + TFDMemtable + {$ENDIF} + {$IFDEF RESTDWMEMTABLE} + TRESTDWMemtable + {$ENDIF}(dataset); vFieldCount := vDataSet.Fields.Count - 1; - Result := dataset.GetRecordCount - 1; + Result := TRESTDWMemtable(DataSet).GetRecordCount - 1; For I := 0 To Result Do Begin vActualRecord := Dataset.GetMemoryRecord(I); - pActualRecord := PRESTDWMTMemBuffer(vActualRecord.Data); + {$IFDEF RESTDWMEMTABLE} + pActualRecord := PRESTDWMTMemBuffer(vActualRecord.Data); + {$ENDIF} vBoolean := False; For B := 0 To vFieldCount Do Begin @@ -1398,25 +1532,30 @@ interface If (aIndex >= 0) And (PActualRecord <> Nil) Then Begin vDataType := vDataSet.FieldDefs[aIndex].DataType; - {$IFNDEF FPC} - {$IF compilerversion < 21} - vBoolean := vDataSet.Fields[B].Size > 0; - {$ELSE} - vBoolean := vDataSet.Fields[B].IsNull; - {$IFEND} - {$ELSE} - vBoolean := vDataSet.Fields[B].IsNull; - {$ENDIF} - vBoolean := Not vBoolean; - Stream.Write(vBoolean, SizeOf(boolean)); - If Not vBoolean Then - Continue; + If vDataType <> ftBoolean Then + Begin + {$IFNDEF FPC} + {$IF compilerversion < 21} + vBoolean := vDataSet.Fields[B].Size > 0; + {$ELSE} + vBoolean := vDataSet.Fields[B].IsNull; + {$IFEND} + {$ELSE} + vBoolean := vDataSet.Fields[B].IsNull; + {$ENDIF} + vBoolean := Not vBoolean; + Stream.Write(vBoolean, SizeOf(boolean)); + If Not vBoolean Then + Continue; + End; If Dataset.DataTypeSuported(vDataType) Then Begin - If Dataset.DataTypeIsBlobTypes(vDataType) Then - PData := Pointer(@PMemBlobArray(PActualRecord + Dataset.GetOffSetsBlobs)^[vDataSet.Fields[B].Offset]) - Else - PData := Pointer(PActualRecord + dataset.GetOffSets(vDataSet.Fields[B])); + {$IFDEF RESTDWMEMTABLE} + If Dataset.DataTypeIsBlobTypes(vDataType) Then + PData := Pointer(@PMemBlobArray(PActualRecord + TRESTDWMemtable(DataSet).GetOffSetsBlobs)^[vDataSet.Fields[B].Offset]) + Else + PData := Pointer(PActualRecord + dataset.GetOffSets(vDataSet.Fields[B])); + {$ENDIF} End; vDWFieldType := FieldTypeToDWFieldType(vDataType); // N Bytes @@ -1526,7 +1665,9 @@ interface // + TimeZone - 2 Bytes dwftTimeStampOffset : Begin Move(PData^, vTimeStampOffSet, Sizeof(vTimeStampOffSet)); - vDouble := SQLTimeStampOffsetToDateTime(vTimeStampOffSet); + {$IFDEF RESTDWMEMTABLE} + vDouble := SQLTimeStampOffsetToDateTime(vTimeStampOffSet); + {$ENDIF} Stream.Write(vDouble, Sizeof(vDouble)); vByte := vTimeStampOffSet.TimeZoneHour + 12; Stream.Write(vByte, Sizeof(vByte)); @@ -1541,8 +1682,8 @@ interface Stream.Write(vCurrency, Sizeof(vCurrency)); End; dwftExtended : Begin - Move(PData^, vExtended, Sizeof(vExtended)); - Stream.Write(vExtended, Sizeof(vExtended)); + Move(PData^, vDouble, Sizeof(vDouble)); + Stream.Write(vDouble, Sizeof(vDouble)); End; // 8 - Bytes - Currency dwftBCD : Begin @@ -1655,11 +1796,15 @@ interface vMemoryStream := nil; For i := 0 To ADataset.FieldCount - 1 Do Begin - vBoolean := ADataset.Fields[i].IsNull; - vBoolean := Not vBoolean; - AStream.Write(vBoolean, SizeOf(boolean)); - If Not vBoolean Then - Continue; + vBoolean := True; + If ADataset.Fields[i].DataType <> ftBoolean Then + Begin + vBoolean := ADataset.Fields[i].IsNull; + vBoolean := Not vBoolean; + AStream.Write(vBoolean, SizeOf(boolean)); + If Not vBoolean Then + Continue; + End; vDWFieldType := FieldTypeToDWFieldType(ADataset.Fields[i].DataType); // N - Bytes Case vDWFieldType Of @@ -1741,8 +1886,8 @@ interface End; {$IFNDEF FPC} dwftExtended : Begin - vExtended := ADataset.Fields[i]{$IFNDEF FPC}.AsExtended{$ELSE}.AsFloat{$ENDIF}; - AStream.Write(vExtended, Sizeof(vExtended)); + vDouble := ADataset.Fields[i]{$IFNDEF FPC}.AsExtended{$ELSE}.AsFloat{$ENDIF}; + AStream.Write(vDouble, Sizeof(vDouble)); End; {$ENDIF} // 8 - Bytes - Date, Time, DateTime, TimeStamp @@ -1757,8 +1902,10 @@ interface // TimeStampOffSet To Double - 8 Bytes // + TimeZone - 2 Bytes dwftTimeStampOffset : Begin - vTimeStampOffSet := ADataset.Fields[i].AsSQLTimeStampOffset; - vDouble := SQLTimeStampOffsetToDateTime(vTimeStampOffSet); + {$IFDEF RESTDWMEMTABLE} + vTimeStampOffSet := ADataset.Fields[i].AsSQLTimeStampOffset; + vDouble := SQLTimeStampOffsetToDateTime(vTimeStampOffSet); + {$ENDIF} AStream.Write(vDouble, Sizeof(vDouble)); vByte := vTimeStampOffSet.TimeZoneHour + 12; AStream.Write(vByte, Sizeof(vByte)); @@ -1797,12 +1944,15 @@ interface vInt64 := vMemoryStream.Size; AStream.Write(vInt64, SizeOf(vInt64)); SetLength(vBytes, vInt64); - Try - vMemoryStream.Position := 0; - vMemoryStream.Read(vBytes[0], vInt64); - Except - End; - AStream.Write(vBytes[0], vInt64); + if vInt64 > 0 then + begin + Try + vMemoryStream.Position := 0; + vMemoryStream.Read(vBytes[0], vInt64); + Except + End; + AStream.Write(vBytes[0], vInt64); + end; Finally SetLength(vBytes, 0); FreeAndNil(vMemoryStream); diff --git a/CORE/Source/Consts/uRESTDWConsts.pas b/CORE/Source/Consts/uRESTDWConsts.pas index 6d9ac880..28af857d 100644 --- a/CORE/Source/Consts/uRESTDWConsts.pas +++ b/CORE/Source/Consts/uRESTDWConsts.pas @@ -60,8 +60,8 @@ // controle de versão RESTDWVersionINFO = 'v2.1.0-'; - RESTDWRelease = '3974'; - RESTDWCodeProject = 'Final Fantasy X - GitHub'; + RESTDWRelease = '3975'; + RESTDWCodeProject = 'Final Fantasy X - SourceForge'; RESTDWVersao = RESTDWVersionINFO + RESTDWRelease + '(' + RESTDWCodeProject + ')'; RESTDWDialogoTitulo = 'REST DataWare Components ' + RESTDWVersao; RESTDWSobreTitulo = 'REST DataWare '+ RESTDWVersao; @@ -293,8 +293,9 @@ TRESTDWJSONTypes = Set of TRESTDWJSONType; TRESTDWMaxLineAction = (maException, maSplit); TRESTDWOSType = (otUnknown, otUnix, otWindows, otDotNet); - TRESTDWSSLVersion = (sslvSSLv2, sslvSSLv23, sslvSSLv3, sslvTLSv1, sslvTLSv1_1, sslvTLSv1_2); + TRESTDWSSLVersion = (SSLv2, SSLv23, SSLv3, TLSv1, TLSv1_1, TLSv1_2, TLSv1_3); TRESTDWSSLVersions = set of TRESTDWSSLVersion; + TRESTDWSSLMode = (sslUnassigned, sslClient, sslServer, sslBoth); TTypeObject = (toDataset, toParam, toMassive, toVariable, toObject); TCaseType = (ctNone, ctUpperCase, ctLowerCase, ctCamelCase); TRESTDWRouteData = (crAll, crGet, crPost, crPut, crPatch, crDelete, crOption); diff --git a/CORE/Source/Database_Drivers/FireDACPhysLink/FireDAC.Phys.RESTDW.pas b/CORE/Source/Database_Drivers/FireDACPhysLink/FireDAC.Phys.RESTDW.pas index 8b737617..d60e760e 100644 --- a/CORE/Source/Database_Drivers/FireDACPhysLink/FireDAC.Phys.RESTDW.pas +++ b/CORE/Source/Database_Drivers/FireDACPhysLink/FireDAC.Phys.RESTDW.pas @@ -33,7 +33,7 @@ interface FireDAC.Phys.RESTDWBase; type - {$IFDEF DELPHI10_3UP} + {$IFDEF DELPHI11UP} [ComponentPlatformsAttribute(pfidWindows or pfidOSX or pfidLinux)] {$ENDIF} TRESTDWFireDACPhysLink = class(TFDPhysRDWBaseDriverLink) @@ -100,13 +100,13 @@ function TFDPhysRDWDriver.GetConnParams(AKeys: TStrings; AParams: TFDDatSTable): {-------------------------------------------------------------------------------} initialization - {$IFDEF DELPHI10_2UP} + {$IFDEF DELPHI11UP} FDRegisterDriverClass(TFDPhysRDWDriver); {$ELSE} FDPhysManager().RegisterDriverClass(TFDPhysRDWDriver); {$ENDIF} finalization - {$IFDEF DELPHI10_2UP} + {$IFDEF DELPHI11UP} FDUnregisterDriverClass(TFDPhysRDWDriver); {$ENDIF} diff --git a/CORE/Source/Database_Drivers/FireDACPhysLink/FireDAC.Phys.RESTDWBase.pas b/CORE/Source/Database_Drivers/FireDACPhysLink/FireDAC.Phys.RESTDWBase.pas index 07da2a77..2ddb710f 100644 --- a/CORE/Source/Database_Drivers/FireDACPhysLink/FireDAC.Phys.RESTDWBase.pas +++ b/CORE/Source/Database_Drivers/FireDACPhysLink/FireDAC.Phys.RESTDWBase.pas @@ -120,7 +120,7 @@ TFDPhysRDWCommand = class(TFDPhysCommand) protected procedure InternalPrepare; override; procedure InternalUnprepare; override; - function InternalOpen{$IFDEF DELPHI10_3UP}(var ACount: TFDCounter){$ENDIF}: Boolean; override; + function InternalOpen{$IFDEF DELPHI11UP}(var ACount: TFDCounter){$ENDIF}: Boolean; override; function InternalNextRecordSet: Boolean; override; procedure InternalClose; override; procedure InternalExecute(ATimes, AOffset: integer; @@ -537,16 +537,16 @@ function TFDPhysRDWCommand.InternalNextRecordSet: Boolean; Result := False; end; -function TFDPhysRDWCommand.InternalOpen{$IFDEF DELPHI10_3UP}(var ACount: TFDCounter){$ENDIF}: Boolean; +function TFDPhysRDWCommand.InternalOpen{$IFDEF DELPHI11UP}(var ACount: TFDCounter){$ENDIF}: Boolean; begin - {$IFDEF DELPHI10_3UP} + {$IFDEF DELPHI11UP} ACount := -1; {$ENDIF} Result := False; case GetMetaInfoKind of mkNone: begin - {$IFDEF DELPHI10_3UP} + {$IFDEF DELPHI11UP} ACount := RDWExecuteComand; Result := ACount >= 0; {$ELSE} @@ -555,7 +555,7 @@ function TFDPhysRDWCommand.InternalOpen{$IFDEF DELPHI10_3UP}(var ACount: TFDCoun end; mkTables: begin - {$IFDEF DELPHI10_3UP} + {$IFDEF DELPHI11UP} ACount := RDWGetTables; Result := ACount >= 0; {$ELSE} @@ -566,7 +566,7 @@ function TFDPhysRDWCommand.InternalOpen{$IFDEF DELPHI10_3UP}(var ACount: TFDCoun end; mkPrimaryKeyFields: begin - {$IFDEF DELPHI10_3UP} + {$IFDEF DELPHI11UP} ACount := RDWGetPKTablesFields(GetBaseObjectName); Result := ACount >= 0; {$ELSE} @@ -577,7 +577,7 @@ function TFDPhysRDWCommand.InternalOpen{$IFDEF DELPHI10_3UP}(var ACount: TFDCoun end; mkTableFields: begin - {$IFDEF DELPHI10_3UP} + {$IFDEF DELPHI11UP} ACount := RDWGetTablesFields(GetBaseObjectName); Result := ACount >= 0; {$ELSE} diff --git a/CORE/Source/Database_Drivers/uRESTDWAnyDACDriver.pas b/CORE/Source/Database_Drivers/uRESTDWAnyDACDriver.pas index bcf6f378..a1f6bc67 100644 --- a/CORE/Source/Database_Drivers/uRESTDWAnyDACDriver.pas +++ b/CORE/Source/Database_Drivers/uRESTDWAnyDACDriver.pas @@ -87,7 +87,7 @@ TRESTDWAnyDACQuery = class(TRESTDWDrvQuery) TRESTDWAnyDACDriver = class(TRESTDWDriverBase) protected Function compConnIsValid(comp : TComponent) : boolean; override; - function getConectionType : TRESTDWDatabaseType; override; + function getConnectionType : TRESTDWDatabaseType; override; public function getQuery : TRESTDWDrvQuery; override; function getQuery(AUnidir : boolean) : TRESTDWDrvQuery; override; @@ -138,12 +138,12 @@ procedure TRESTDWAnyDACStoreProc.Prepare; { TRESTDWAnyDACDriver } -function TRESTDWAnyDACDriver.getConectionType : TRESTDWDatabaseType; +function TRESTDWAnyDACDriver.getConnectionType : TRESTDWDatabaseType; var conn : string; i: integer; begin - Result:=inherited getConectionType; + Result:=inherited getConnectionType; if not Assigned(Connection) then Exit; diff --git a/CORE/Source/Database_Drivers/uRESTDWDriverBase.pas b/CORE/Source/Database_Drivers/uRESTDWDriverBase.pas index 87987b1e..a70fb8ad 100644 --- a/CORE/Source/Database_Drivers/uRESTDWDriverBase.pas +++ b/CORE/Source/Database_Drivers/uRESTDWDriverBase.pas @@ -31,9 +31,12 @@ Uses Classes, SysUtils, TypInfo, DB, Variants, StrUtils, - uRESTDWMemoryDataset, uRESTDWParams, uRESTDWAbout, uRESTDWComponentEvents, + {$IFDEF RESTDWMEMTABLE} + uRESTDWMemoryDataset, + {$ENDIF} + uRESTDWParams, uRESTDWAbout, uRESTDWComponentEvents, uRESTDWJSONInterface, uRESTDWBufferBase, uRESTDWConsts, uRESTDWDatamodule, - uRESTDWBasicTypes, uRESTDWProtoTypes, uRESTDWTools, uRESTDWStorageBin, + uRESTDWBasicTypes, uRESTDWBasicDbTypes, uRESTDWProtoTypes, uRESTDWTools, uRESTDWStorageBin, uRESTDWMassiveBuffer; Type @@ -261,8 +264,8 @@ TRDWDrvParam = class(TObject) destructor Destroy; override; Function compConnIsValid (comp : TComponent) : Boolean;Virtual; - Function getConectionType : TRESTDWDatabaseType; Virtual; - Procedure setConectionType(aValue : TRESTDWDatabaseType); Virtual; + Function getConnectionType : TRESTDWDatabaseType; Virtual; + Procedure setConnectionType(aValue : TRESTDWDatabaseType); Virtual; Function getDatabaseInfo : TRESTDWDatabaseInfo; Virtual; Function getQuery : TRESTDWDrvQuery; Overload; Virtual; Function getQuery (AUnidir : Boolean) : TRESTDWDrvQuery; Overload; Virtual; @@ -403,7 +406,7 @@ TRDWDrvParam = class(TObject) Property StorageDataType : TRESTDWStorageBase Read FStorageDataType Write FStorageDataType; Published Property Connection : TComponent Read FConnection Write setConnection; - Property ConectionType : TRESTDWDatabaseType Read getConectionType Write setConectionType; + Property ConnectionType : TRESTDWDatabaseType Read getConnectionType Write setConnectionType; Property StrsTrim : Boolean Read vStrsTrim Write vStrsTrim; Property StrsEmpty2Null : Boolean Read vStrsEmpty2Null Write vStrsEmpty2Null; Property StrsTrim2Len : Boolean Read vStrsTrim2Len Write vStrsTrim2Len; @@ -428,6 +431,13 @@ TRDWDrvParam = class(TObject) { TRESTDWDrvStoreProc } +Function FixFieldName(FieldName : String) : String; +Begin + Result := FieldName; + If Pos('_', Result) > 0 Then + Result := Format('"%s"', [Result]); +End; + Function TRESTDWDrvStoreProc.getStoredProcName : String; Begin Try @@ -927,7 +937,7 @@ function TRESTDWDrvDataset.getParamDataType(IParam: integer): TFieldType; Result := -1; drv := TRESTDWDriverBase(Self.Owner); Try - If drv.getConectionType = dbtMySQL Then + If drv.getConnectionType = dbtMySQL Then Begin Close; SQL.Clear; @@ -946,12 +956,12 @@ function TRESTDWDrvDataset.getParamDataType(IParam: integer): TFieldType; { TRESTDWDriverBase } -Procedure TRESTDWDriverBase.setConectionType(aValue : TRESTDWDatabaseType); +Procedure TRESTDWDriverBase.setConnectionType(aValue : TRESTDWDatabaseType); Begin vDatabaseType := aValue; End; -function TRESTDWDriverBase.getConectionType : TRESTDWDatabaseType; +function TRESTDWDriverBase.getConnectionType : TRESTDWDatabaseType; Begin Result := vDatabaseType;// : TRESTDWDatabaseType; // Result := dbtUndefined; @@ -974,7 +984,7 @@ function TRESTDWDriverBase.getDatabaseInfo : TRESTDWDatabaseInfo; // ex: no MySQL temos o MariaDB // ex: no Firebird temos a versao HQBird sVersion := ''; - connType := getConectionType; + connType := getConnectionType; lst := TStringList.Create; qry := getQuery; Try @@ -1456,7 +1466,7 @@ function TRESTDWDriverBase.GetGenID(Query : TRESTDWDrvQuery; GenName : String; v connType : TRESTDWDatabaseType; Begin Result := -1; - connType := getConectionType; + connType := getConnectionType; With Query Do Begin Close; @@ -1757,182 +1767,200 @@ function TRESTDWDriverBase.ApplyUpdates(MassiveDataset: TMassiveDatasetBuffer; var Error: Boolean; var MessageError: String; var RowsAffected: Integer): TRESTDWJSONValue; -var - vTempQuery: TRESTDWDrvQuery; - vResultReflection: string; - vStateResource, vMassiveLine: boolean; - - function LoadMassive(var Query: TRESTDWDrvQuery): boolean; - var - A, B: integer; - begin - Result := False; - try - MassiveDataset.First; - if Assigned(FServerMethod) then begin - if Assigned(FServerMethod.OnMassiveBegin) then - FServerMethod.OnMassiveBegin(MassiveDataset); - end; - B := 1; - Result := True; - for A := 1 to MassiveDataset.RecordCount do begin - if not connInTransaction then begin - connStartTransaction; - if Assigned(FServerMethod) then begin - if Assigned(FServerMethod.OnMassiveAfterStartTransaction) then - FServerMethod.OnMassiveAfterStartTransaction(MassiveDataset); - end; - end; - Query.SQL.Clear; - if Assigned(FServerMethod) then begin - vMassiveLine := False; - if Assigned(FServerMethod.OnMassiveProcess) then begin - FServerMethod.OnMassiveProcess(MassiveDataset,vMassiveLine); - if vMassiveLine then begin - MassiveDataset.Next; - Continue; - end; - end; - end; - PrepareDataQuery(Query, MassiveDataset, Params, MassiveDataset.ReflectChanges, vResultReflection, Error, MessageError); - try - if (not (MassiveDataset.ReflectChanges)) or - ((MassiveDataset.ReflectChanges) and - (MassiveDataset.MassiveMode in [mmExec, mmDelete])) then - Query.ExecSQL; - except - On E: Exception do begin - Error := True; - Result := False; - MessageError := E.Message; - if connInTransaction then - connRollback; - Exit; - end; - end; - - if B >= CommitRecords then begin - try - if connInTransaction then begin - if Assigned(FServerMethod) then begin - if Assigned(FServerMethod.OnMassiveAfterBeforeCommit) then - FServerMethod.OnMassiveAfterBeforeCommit(MassiveDataset); - end; - connCommit; - if Assigned(FServerMethod) then begin - if Assigned(FServerMethod.OnMassiveAfterAfterCommit) then - FServerMethod.OnMassiveAfterAfterCommit(MassiveDataset); - end; - end; - except - On E: Exception do begin - Error := True; - Result := False; - MessageError := E.Message; - if connInTransaction then - connRollback; - Break; - end; - end; - B := 1; - end - else - Inc(B); - MassiveDataset.Next; - end; - try - if connInTransaction then begin - if Assigned(FServerMethod) then begin - if Assigned(FServerMethod.OnMassiveAfterBeforeCommit) then - FServerMethod.OnMassiveAfterBeforeCommit(MassiveDataset); - end; +Var + vTempQuery : TRESTDWDrvQuery; + vResultReflection : String; + vStateResource, + vMassiveLine : Boolean; + Function LoadMassive(var Query: TRESTDWDrvQuery): boolean; + Var + A, B: integer; + Begin + Result := False; + Try + MassiveDataset.First; + If Assigned(FServerMethod) then + Begin + If Assigned(FServerMethod.OnMassiveBegin) Then + FServerMethod.OnMassiveBegin(MassiveDataset); + End; + B := 1; + Result := True; + For A := 1 to MassiveDataset.RecordCount Do + Begin + If not connInTransaction Then + Begin + connStartTransaction; + If Assigned(FServerMethod) Then + Begin + If Assigned(FServerMethod.OnMassiveAfterStartTransaction) Then + FServerMethod.OnMassiveAfterStartTransaction(MassiveDataset); + End; + End; + Query.SQL.Clear; + If Assigned(FServerMethod) Then + Begin + vMassiveLine := False; + If Assigned(FServerMethod.OnMassiveProcess) Then + Begin + FServerMethod.OnMassiveProcess(MassiveDataset,vMassiveLine); + If vMassiveLine Then + Begin + MassiveDataset.Next; + Continue; + End; + End; + End; + PrepareDataQuery(Query, MassiveDataset, Params, MassiveDataset.ReflectChanges, vResultReflection, Error, MessageError); + Try + If (Not(MassiveDataset.ReflectChanges)) Or + ((MassiveDataset.ReflectChanges) And + (MassiveDataset.MassiveMode In [mmExec, mmDelete])) Then + Query.ExecSQL; + Except + On E: Exception do + Begin + Error := True; + Result := False; + MessageError := E.Message; + If connInTransaction Then + connRollback; + Exit; + End; + End; + If B >= CommitRecords Then + Begin + Try + If connInTransaction Then + Begin + If Assigned(FServerMethod) Then + Begin + If Assigned(FServerMethod.OnMassiveAfterBeforeCommit) Then + FServerMethod.OnMassiveAfterBeforeCommit(MassiveDataset); + End; connCommit; - if Assigned(FServerMethod) then begin - if Assigned(FServerMethod.OnMassiveAfterAfterCommit) then - FServerMethod.OnMassiveAfterAfterCommit(MassiveDataset); - end; - end; - except - On E: Exception do begin + If Assigned(FServerMethod) Then + Begin + If Assigned(FServerMethod.OnMassiveAfterAfterCommit) Then + FServerMethod.OnMassiveAfterAfterCommit(MassiveDataset); + End; + End; + Except + On E: Exception Do + Begin Error := True; Result := False; MessageError := E.Message; - if connInTransaction then - connRollback; - end; - end; - finally - if Assigned(FServerMethod) then begin - if Assigned(FServerMethod.OnMassiveEnd) then - FServerMethod.OnMassiveEnd(MassiveDataset); - end; - Query.SQL.Clear; - end; - end; -begin - {$IFNDEF RESTDWLAZARUS}inherited;{$ENDIF} - try - Result := nil; - Error := False; - vTempQuery := getQuery; - - vStateResource := isConnected; - if not vStateResource then - Connect; - - vTempQuery.SQL.Clear; - vResultReflection := ''; - if LoadMassive(vTempQuery) then begin - if (SQL <> '') and (vResultReflection = '') then begin - try - vTempQuery.SQL.Clear; - vTempQuery.SQL.Add(SQL); - vTempQuery.ImportParams(Params); - vTempQuery.Open; - - if Result = nil then - Result := TRESTDWJSONValue.Create; - Result.Encoding := Encoding; - Result.Encoded := EncodeStringsJSON; - Result.Utf8SpecialChars := True; - Result.LoadFromDataset('RESULTDATA', TDataSet(vTempQuery.Owner),EncodeStringsJSON); - Error := False; - if not vStateResource then - Disconect; - except - On E: Exception do begin - try - Error := True; - MessageError := E.Message; - if Result = nil then - Result := TRESTDWJSONValue.Create; - Result.Encoded := True; - Result.SetValue(GetPairJSONStr('NOK', MessageError)); - if connInTransaction then - connRollback; - except + If connInTransaction Then + connRollback; + Break; + End; + End; + B := 1; + End + Else + Inc(B); + MassiveDataset.Next; + End; + Try + If connInTransaction Then + Begin + If Assigned(FServerMethod) Then + Begin + If Assigned(FServerMethod.OnMassiveAfterBeforeCommit) Then + FServerMethod.OnMassiveAfterBeforeCommit(MassiveDataset); + End; + connCommit; + If Assigned(FServerMethod) Then + Begin + If Assigned(FServerMethod.OnMassiveAfterAfterCommit) Then + FServerMethod.OnMassiveAfterAfterCommit(MassiveDataset); + End; + End; + Except + On E: Exception Do + Begin + Error := True; + Result := False; + MessageError := E.Message; + If connInTransaction Then + connRollback; + End; + End; + Finally + If Assigned(FServerMethod) Then + Begin + If Assigned(FServerMethod.OnMassiveEnd) Then + FServerMethod.OnMassiveEnd(MassiveDataset); + End; + Query.SQL.Clear; + End; + End; +Begin + {$IFNDEF RESTDWLAZARUS}Inherited;{$ENDIF} + Try + Result := nil; + Error := False; + vTempQuery := getQuery; + vStateResource := isConnected; + If Not vStateResource Then + Connect; + vTempQuery.SQL.Clear; + vResultReflection := ''; + If LoadMassive(vTempQuery) Then + Begin + If (SQL <> '') And (vResultReflection = '') Then + Begin + Try + vTempQuery.SQL.Clear; + vTempQuery.SQL.Add(SQL); + vTempQuery.ImportParams(Params); + vTempQuery.Open; + If Result = Nil Then + Result := TRESTDWJSONValue.Create; + Result.Encoding := Encoding; + Result.Encoded := EncodeStringsJSON; + Result.Utf8SpecialChars := True; + Result.LoadFromDataset('RESULTDATA', TDataSet(vTempQuery.Owner),EncodeStringsJSON); + Error := False; + If Not vStateResource Then + Disconect; + Except + On E: Exception Do + Begin + Try + Error := True; + MessageError := E.Message; + If Result = Nil Then + Result := TRESTDWJSONValue.Create; + Result.Encoded := True; + Result.SetValue(GetPairJSONStr('NOK', MessageError)); + If connInTransaction Then + connRollback; + Except - end; - Disconect; - end; - end; - end - else if (vResultReflection <> '') then begin - if Result = nil then - Result := TRESTDWJSONValue.Create; - Result.Encoding := Encoding; - Result.Encoded := EncodeStringsJSON; - Result.SetValue('[' + vResultReflection + ']'); - Error := False; - end; - end; - finally - FreeAndNil(BufferBase); - RowsAffected := vTempQuery.RowsAffected; - vTempQuery.Close; - FreeAndNil(vTempQuery); - end; -end; + End; + Disconect; + End; + End; + End + Else If (vResultReflection <> '') Then + Begin + If Result = Nil Then + Result := TRESTDWJSONValue.Create; + Result.Encoding := Encoding; + Result.Encoded := EncodeStringsJSON; + Result.SetValue('[' + vResultReflection + ']'); + Error := False; + End; + End; + Finally + FreeAndNil(BufferBase); + RowsAffected := vTempQuery.RowsAffected; + vTempQuery.Close; + FreeAndNil(vTempQuery); + End; +End; function TRESTDWDriverBase.ApplyUpdatesTB(Massive : String; Params : TRESTDWParams; var Error : Boolean; var MessageError : String; var RowsAffected : Integer) : TRESTDWJSONValue; var @@ -2586,7 +2614,7 @@ function TRESTDWDriverBase.ExecuteCommand( Error := False; Result := ''; aResult := TRESTDWJSONValue.Create; - vTempQuery := getQuery(not Execute); + vTempQuery := getQuery(Execute); vDataSet := TDataSet(vTempQuery.Owner); try vStateResource := isConnected; @@ -2865,7 +2893,7 @@ procedure TRESTDWDriverBase.GetTableNames(var TableNames : TStringList; var Erro Delete(vTable, InitStrPos, Pos('.', vTable)); end; } - connType := getConectionType; + connType := getConnectionType; Try vStateResource := isConnected; If Not vStateResource Then @@ -2960,7 +2988,7 @@ procedure TRESTDWDriverBase.GetFieldNames(TableName : String; var FieldNames : T vSchema := Copy(vTable, InitStrPos, Pos('.', vTable)-1); Delete(vTable, InitStrPos, Pos('.', vTable)); End; - connType := getConectionType; + connType := getConnectionType; Try vStateResource := isConnected; If Not vStateResource Then @@ -3057,7 +3085,7 @@ procedure TRESTDWDriverBase.GetKeyFieldNames(TableName : String; var FieldNames vSchema := Copy(vTable, InitStrPos, Pos('.', vTable)-1); Delete(vTable, InitStrPos, Pos('.', vTable)); End; - connType := getConectionType; + connType := getConnectionType; Try vStateResource := isConnected; If Not vStateResource Then @@ -3212,7 +3240,7 @@ procedure TRESTDWDriverBase.GetProcNames(var ProcNames : TStringList; var Error If Not Assigned(ProcNames) Then ProcNames := TStringList.Create; vSchema := ''; - connType := getConectionType; + connType := getConnectionType; Try vStateResource := isConnected; If Not vStateResource Then @@ -3499,7 +3527,7 @@ procedure TRESTDWDriverBase.GetProcParams(ProcName : String; var ParamNames : TS vSchema := Copy(vProc, InitStrPos, Pos('.', vProc)-1); Delete(vProc, InitStrPos, Pos('.', vProc)); End; - connType := getConectionType; + connType := getConnectionType; Try vStateResource := isConnected; If Not vStateResource Then @@ -3924,7 +3952,6 @@ constructor TRESTDWDriverBase.Create(AOwner: TComponent); vStrsTrim2Len := vParamCreate; vEncodeStrings := vParamCreate; vCompression := vParamCreate; - // fernando banhos 25/10/2022 // algumas rotinas de paramscreate foram retiradas devido // incompatibilidade com outros drivers @@ -3986,8 +4013,7 @@ procedure TRESTDWDriverBase.PrepareDataQuery(var Query: TRESTDWDrvQuery; vLineSQL := Format('INSERT INTO %s ',[MassiveDataset.TableName + ' (%s) VALUES (%s)']); for I := 0 to MassiveDataset.Fields.Count - 1 do begin if ((((MassiveDataset.Fields.Items[I].AutoGenerateValue) and - (MassiveDataset.AtualRec.MassiveMode = mmInsert) and - (MassiveDataset.Fields.Items[I].ReadOnly)) or + (MassiveDataset.AtualRec.MassiveMode = mmInsert)) or (MassiveDataset.Fields.Items[I].ReadOnly)) and (not (MassiveDataset.ReflectChanges))) or ((MassiveDataset.ReflectChanges) and @@ -3996,21 +4022,21 @@ procedure TRESTDWDriverBase.PrepareDataQuery(var Query: TRESTDWDrvQuery; (Lowercase(MassiveDataset.Fields.Items[I].FieldName) = Lowercase(RESTDWFieldBookmark)))) then Continue; if vFields = '' then begin - vFields := MassiveDataset.Fields.Items[I].FieldName; + vFields := FixFieldName(MassiveDataset.Fields.Items[I].FieldName); if not MassiveDataset.ReflectChanges then vParamsSQL := ':' + MassiveDataset.Fields.Items[I].FieldName; end else begin - vFields := vFields + ', ' + MassiveDataset.Fields.Items[I].FieldName; + vFields := vFields + ', ' + FixFieldName(MassiveDataset.Fields.Items[I].FieldName); if not MassiveDataset.ReflectChanges then vParamsSQL := vParamsSQL + ', :' + MassiveDataset.Fields.Items[I].FieldName; end; if MassiveDataset.ReflectChanges then begin if MassiveDataset.Fields.Items[I].KeyField then if vParamsSQL = '' then - vParamsSQL := MassiveDataset.Fields.Items[I].FieldName + ' is null ' + vParamsSQL := FixFieldName(MassiveDataset.Fields.Items[I].FieldName) + ' is null ' else - vParamsSQL := vParamsSQL + ' and ' + MassiveDataset.Fields.Items[I].FieldName + ' is null '; + vParamsSQL := vParamsSQL + ' and ' + FixFieldName(MassiveDataset.Fields.Items[I].FieldName) + ' is null '; end; end; @@ -4035,9 +4061,9 @@ procedure TRESTDWDriverBase.PrepareDataQuery(var Query: TRESTDWDrvQuery; for I := 0 to MassiveDataset.AtualRec.UpdateFieldChangesCount - 1 do begin if Lowercase(MassiveDataset.AtualRec.UpdateFieldChanges[I]) <> Lowercase(RESTDWFieldBookmark) then begin if vFields = '' then - vFields := MassiveDataset.AtualRec.UpdateFieldChanges[I] + ' = :' + MassiveDataset.AtualRec.UpdateFieldChanges[I] + vFields := FixFieldName(MassiveDataset.AtualRec.UpdateFieldChanges[I]) + ' = :' + MassiveDataset.AtualRec.UpdateFieldChanges[I] else - vFields := vFields + ', ' + MassiveDataset.AtualRec.UpdateFieldChanges[I] + ' = :' + MassiveDataset.AtualRec.UpdateFieldChanges[I]; + vFields := vFields + ', ' + FixFieldName(MassiveDataset.AtualRec.UpdateFieldChanges[I]) + ' = :' + MassiveDataset.AtualRec.UpdateFieldChanges[I]; end; end; end @@ -4065,9 +4091,9 @@ procedure TRESTDWDriverBase.PrepareDataQuery(var Query: TRESTDWDrvQuery; try for I := 0 to bPrimaryKeys.Count - 1 do begin if I = 0 then - vParamsSQL := 'WHERE ' + bPrimaryKeys[I] + ' = :DWKEY_' + bPrimaryKeys[I] + vParamsSQL := 'WHERE ' + FixFieldName(bPrimaryKeys[I]) + ' = :DWKEY_' + bPrimaryKeys[I] else - vParamsSQL := vParamsSQL + ' AND ' + bPrimaryKeys[I] + ' = :DWKEY_' + bPrimaryKeys[I]; + vParamsSQL := vParamsSQL + ' AND ' + FixFieldName(bPrimaryKeys[I]) + ' = :DWKEY_' + bPrimaryKeys[I]; end; finally FreeAndNil(bPrimaryKeys); @@ -4080,9 +4106,9 @@ procedure TRESTDWDriverBase.PrepareDataQuery(var Query: TRESTDWDrvQuery; try for I := 0 to bPrimaryKeys.Count - 1 do begin if I = 0 then - vParamsSQL := 'WHERE ' + bPrimaryKeys[I] + ' = :' + bPrimaryKeys[I] + vParamsSQL := 'WHERE ' + FixFieldName(bPrimaryKeys[I]) + ' = :' + bPrimaryKeys[I] else - vParamsSQL := vParamsSQL + ' AND ' + bPrimaryKeys[I] + ' = :' + bPrimaryKeys[I]; + vParamsSQL := vParamsSQL + ' AND ' + FixFieldName(bPrimaryKeys[I]) + ' = :' + bPrimaryKeys[I]; end; finally FreeAndNil(bPrimaryKeys); diff --git a/CORE/Source/Database_Drivers/uRESTDWFireDACDriver.pas b/CORE/Source/Database_Drivers/uRESTDWFireDACDriver.pas index 61e62e0d..6dba2ec3 100644 --- a/CORE/Source/Database_Drivers/uRESTDWFireDACDriver.pas +++ b/CORE/Source/Database_Drivers/uRESTDWFireDACDriver.pas @@ -26,7 +26,7 @@ interface uses - Classes, SysUtils, uRESTDWDriverBase, uRESTDWBasicTypes, + Classes, SysUtils, uRESTDWDriverBase, uRESTDWBasicdbTypes, FireDAC.Comp.Client, FireDAC.Comp.DataSet, FireDAC.Stan.StorageBin, FireDAC.Stan.Intf, FireDAC.Stan.Option, FireDAC.DApt.Intf, FireDAC.DApt, FireDAC.Stan.Param, FireDAC.DatS, DB, uRESTDWBasicDB, uRESTDWProtoTypes, @@ -94,7 +94,7 @@ TRESTDWFireDACDriver = class(TRESTDWDriverBase) protected public - function getConectionType : TRESTDWDatabaseType; override; + function getConnectionType : TRESTDWDatabaseType; override; Function compConnIsValid(comp : TComponent) : boolean; override; function getQuery : TRESTDWDrvQuery; override; function getQuery(AUnidir : boolean) : TRESTDWDrvQuery; override; @@ -154,26 +154,28 @@ function TRESTDWFireDACDriver.isAutoCommit: boolean; {$ENDIF} end; -function TRESTDWFireDACDriver.getConectionType: TRESTDWDatabaseType; +function TRESTDWFireDACDriver.getConnectionType: TRESTDWDatabaseType; var conn : string; i: integer; begin - Result:=inherited getConectionType; + Result := inherited getConnectionType; if not Assigned(Connection) then Exit; - - conn := LowerCase(TFDConnection(Connection).DriverName); - - i := 0; - while i < Length(rdwFireDACDrivers) do begin - if Pos(rdwFireDACDrivers[i],conn) > 0 then begin - Result := rdwFireDACDbType[i]; - Break; - end; - i := i + 1; - end; - + If Result = dbtUndefined Then + Begin + conn := LowerCase(TFDConnection(Connection).DriverName); + i := 0; + While i < Length(rdwFireDACDrivers) do + Begin + If Pos(rdwFireDACDrivers[i], conn) > 0 then + Begin + Result := rdwFireDACDbType[i]; + Break; + End; + i := i + 1; + End; + End; // Eloy case Result of dbtODBC: @@ -207,7 +209,6 @@ function TRESTDWFireDACDriver.getQuery: TRESTDWDrvQuery; qry.ResourceOptions.ParamCreate := True; qry.ResourceOptions.StoreItems := [siMeta,siData,siDelta]; qry.FetchOptions.Mode := fmAll; - Result := TRESTDWFireDACQuery.Create(qry); end; @@ -499,7 +500,6 @@ procedure TRESTDWFireDACQuery.SaveToStream(stream: TStream); begin qry := TFDQuery(Self.Owner); qry.SaveToStream(stream, sfBinary); - stream.Position := 0; end; diff --git a/CORE/Source/Database_Drivers/uRESTDWIBDACDriver.pas b/CORE/Source/Database_Drivers/uRESTDWIBDACDriver.pas index 2ce2345a..10c4f18d 100644 --- a/CORE/Source/Database_Drivers/uRESTDWIBDACDriver.pas +++ b/CORE/Source/Database_Drivers/uRESTDWIBDACDriver.pas @@ -86,7 +86,7 @@ TRESTDWIBDACDriver = class(TRESTDWDriverBase) procedure setConnection(AValue: TComponent); override; public - function getConectionType : TRESTDWDatabaseType; override; + function getConnectionType : TRESTDWDatabaseType; override; Function compConnIsValid(comp : TComponent) : boolean; override; constructor Create(AOwner : TComponent); override; destructor Destroy; override; @@ -139,7 +139,7 @@ procedure TRESTDWIBDACStoreProc.Prepare; { TRESTDWIBDACDriver } -function TRESTDWIBDACDriver.getConectionType : TRESTDWDatabaseType; +function TRESTDWIBDACDriver.getConnectionType : TRESTDWDatabaseType; begin // somente Firebird Result := dbtFirebird; diff --git a/CORE/Source/Database_Drivers/uRESTDWInterbaseDriver.pas b/CORE/Source/Database_Drivers/uRESTDWInterbaseDriver.pas index b4db6dd5..55d86b5d 100644 --- a/CORE/Source/Database_Drivers/uRESTDWInterbaseDriver.pas +++ b/CORE/Source/Database_Drivers/uRESTDWInterbaseDriver.pas @@ -81,7 +81,7 @@ TRESTDWInterbaseDriver = class(TRESTDWDriverBase) protected procedure setConnection(AValue: TComponent); override; - function getConectionType : TRESTDWDatabaseType; override; + function getConnectionType : TRESTDWDatabaseType; override; Function compConnIsValid(comp : TComponent) : boolean; override; public constructor Create(AOwner : TComponent); override; @@ -255,7 +255,7 @@ procedure TRESTDWInterbaseDriver.setConnection(AValue: TComponent); inherited setConnection(AValue); end; -function TRESTDWInterbaseDriver.getConectionType: TRESTDWDatabaseType; +function TRESTDWInterbaseDriver.getConnectionType: TRESTDWDatabaseType; begin Result := dbtInterbase; end; diff --git a/CORE/Source/Database_Drivers/uRESTDWLazarusDriver.pas b/CORE/Source/Database_Drivers/uRESTDWLazarusDriver.pas index 446e43d6..d248e1e6 100644 --- a/CORE/Source/Database_Drivers/uRESTDWLazarusDriver.pas +++ b/CORE/Source/Database_Drivers/uRESTDWLazarusDriver.pas @@ -1,4 +1,4 @@ -unit uRESTDWLazarusDriver; +unit uRESTDWLazarusDriver; { REST Dataware . @@ -25,7 +25,7 @@ interface uses LResources, SQLDB, Classes, SysUtils, DB, - uRESTDWDriverBase, uRESTDWProtoTypes, uRESTDWBasicTypes; + uRESTDWDriverBase, uRESTDWProtoTypes, uRESTDWBasicDbTypes; const rdwLazSQLConnector : array[0..9] of string = (('mssql'),('sybase'), @@ -73,7 +73,7 @@ TRESTDWLazarusDriver = class(TRESTDWDriverBase) protected procedure setConnection(AValue: TComponent); override; - function getConectionType : TRESTDWDatabaseType; override; + function getConnectionType : TRESTDWDatabaseType; override; Function compConnIsValid(comp : TComponent) : boolean; override; public constructor Create(AOwner : TComponent); override; @@ -241,12 +241,12 @@ procedure TRESTDWLazarusDriver.setConnection(AValue: TComponent); inherited setConnection(AValue); end; -function TRESTDWLazarusDriver.getConectionType: TRESTDWDatabaseType; +function TRESTDWLazarusDriver.getConnectionType: TRESTDWDatabaseType; var conn : string; i: integer; begin - Result:=inherited getConectionType; + Result:=inherited getConnectionType; if not Assigned(Connection) then Exit; diff --git a/CORE/Source/Database_Drivers/uRESTDWMyDACDriver.pas b/CORE/Source/Database_Drivers/uRESTDWMyDACDriver.pas index e1c9b6fb..043b34f3 100644 --- a/CORE/Source/Database_Drivers/uRESTDWMyDACDriver.pas +++ b/CORE/Source/Database_Drivers/uRESTDWMyDACDriver.pas @@ -81,7 +81,7 @@ TRESTDWMyDACDriver = class(TRESTDWDriverBase) FTransaction : TMyTransaction; protected procedure setConnection(AValue: TComponent); override; - function getConectionType : TRESTDWDatabaseType; override; + function getConnectionType : TRESTDWDatabaseType; override; Function compConnIsValid(comp : TComponent) : boolean; override; public constructor Create(AOwner : TComponent); override; @@ -135,7 +135,7 @@ procedure TRESTDWMyDACStoreProc.Prepare; { TRESTDWMyDACDriver } -function TRESTDWMyDACDriver.getConectionType : TRESTDWDatabaseType; +function TRESTDWMyDACDriver.getConnectionType : TRESTDWDatabaseType; begin // somente MySQL Result := dbtMySQL; diff --git a/CORE/Source/Database_Drivers/uRESTDWUniDACDriver.pas b/CORE/Source/Database_Drivers/uRESTDWUniDACDriver.pas index 48ae45e3..f73a0bd4 100644 --- a/CORE/Source/Database_Drivers/uRESTDWUniDACDriver.pas +++ b/CORE/Source/Database_Drivers/uRESTDWUniDACDriver.pas @@ -100,7 +100,7 @@ TRESTDWUniDACDriver = class(TRESTDWDriverBase) FTransaction : TUniTransaction; protected procedure setConnection(AValue: TComponent); override; - function getConectionType : TRESTDWDatabaseType; override; + function getConnectionType : TRESTDWDatabaseType; override; Function compConnIsValid(comp : TComponent) : boolean; override; public constructor Create(AOwner : TComponent); override; @@ -154,25 +154,28 @@ procedure TRESTDWUniDACStoreProc.Prepare; { TRESTDWUniDACDriver } -function TRESTDWUniDACDriver.getConectionType : TRESTDWDatabaseType; +function TRESTDWUniDACDriver.getConnectionType : TRESTDWDatabaseType; var prot : string; i : integer; begin - Result:=inherited getConectionType; - if not Assigned(Connection) then - Exit; - - prot := LowerCase(TUniConnection(Connection).ProviderName); - - i := 0; - while i < Length(rdwUniDACProtocols) do begin - if Pos(rdwUniDACProtocols[i],prot) > 0 then begin - Result := rdwUniDACDbType[i]; - Break; - end; - i := i + 1; - end; + Result := Inherited getConnectionType; + If Not Assigned(Connection) Then + Exit; + If Result = dbtUndefined Then + Begin + prot := LowerCase(TUniConnection(Connection).ProviderName); + i := 0; + While i < Length(rdwUniDACProtocols) Do + Begin + If Pos(rdwUniDACProtocols[i],prot) > 0 Then + Begin + Result := rdwUniDACDbType[i]; + Break; + End; + i := i + 1; + End; + End; end; function TRESTDWUniDACDriver.getQuery : TRESTDWDrvQuery; diff --git a/CORE/Source/Database_Drivers/uRESTDWZeosDriver.pas b/CORE/Source/Database_Drivers/uRESTDWZeosDriver.pas index 210de8a7..4be416b0 100644 --- a/CORE/Source/Database_Drivers/uRESTDWZeosDriver.pas +++ b/CORE/Source/Database_Drivers/uRESTDWZeosDriver.pas @@ -1,4 +1,4 @@ -unit uRESTDWZeosDriver; +unit uRESTDWZeosDriver; {$I ..\Includes\uRESTDW.inc} @@ -37,14 +37,14 @@ interface {$ENDIF} {$IFDEF ZMEMTABLE_ENABLE_STREAM_EXPORT_IMPORT} - ZMemTable, + ZMemTable, {$ELSE} - uRESTDWMemoryDataset, + uRESTDWMemoryDataset, {$ENDIF} Classes, SysUtils, DB, Variants, ZConnection, ZDataset, ZSequence, ZDbcIntfs, ZAbstractRODataset, ZAbstractDataset, ZStoredProcedure, ZEncoding, ZDatasetUtils, - uRESTDWDriverBase, uRESTDWBasicTypes, uRESTDWProtoTypes, uRESTDWZeosPhysLink + uRESTDWDriverBase, uRESTDWBasicDbTypes, uRESTDWProtoTypes, uRESTDWZeosPhysLink ; const @@ -111,7 +111,7 @@ TRESTDWZeosDriver = class(TRESTDWDriverBase) protected procedure setConnection(AValue: TComponent); override; - function getConectionType : TRESTDWDatabaseType; override; + function getConnectionType : TRESTDWDatabaseType; override; Function compConnIsValid(comp : TComponent) : boolean; override; Procedure zAfterPost(DataSet: TDataSet); public @@ -171,26 +171,29 @@ procedure TRESTDWZeosDriver.setConnection(AValue: TComponent); inherited setConnection(AValue); end; -function TRESTDWZeosDriver.getConectionType: TRESTDWDatabaseType; -var - prot : string; - i : integer; -begin - Result:=inherited getConectionType; - if not Assigned(Connection) then - Exit; - - prot := LowerCase(TZConnection(Connection).Protocol); - - i := 0; - while i < Length(rdwZeosProtocols) do begin - if Pos(rdwZeosProtocols[i],prot) > 0 then begin - Result := rdwZeosDbType[i]; - Break; - end; - i := i + 1; - end; -end; +Function TRESTDWZeosDriver.getConnectionType: TRESTDWDatabaseType; +Var + prot : String; + i : integer; +Begin + Result:=inherited getConnectionType; + If Not Assigned(Connection) Then + Exit; + If Result = dbtUndefined Then + Begin + prot := LowerCase(TZConnection(Connection).Protocol); + i := 0; + While i < Length(rdwZeosProtocols) Do + Begin + If Pos(rdwZeosProtocols[i],prot) > 0 Then + Begin + Result := rdwZeosDbType[i]; + Break; + End; + i := i + 1; + End; + End; +End; function TRESTDWZeosDriver.getQuery(AUnidir: boolean): TRESTDWDrvQuery; var @@ -521,27 +524,20 @@ procedure TRESTDWZeosQuery.setParamValue(IParam : integer; AValue : variant); procedure TRESTDWZeosQuery.SaveToStream(stream: TStream); var - qry : TZAbstractRODataset; - {$IFDEF ZMEMTABLE_ENABLE_STREAM_EXPORT_IMPORT} - memtable : TZMemTable; - {$ELSE} - memtable : TRESTDWMemtable; - {$ENDIF} + qry : TZAbstractRODataset; + memtable : TZMemTable; begin qry := TZQuery(Self.Owner); - {$IFDEF ZMEMTABLE_ENABLE_STREAM_EXPORT_IMPORT} - memtable := TZMemTable.Create(nil); - {$ELSE} - memtable := TRESTDWMemtable.Create(nil); - {$ENDIF} + memtable := TZMemTable.Create(nil); try - {$IFDEF ZMEMTABLE_ENABLE_STREAM_EXPORT_IMPORT} - memtable.AssignDataFrom(qry); - {$ELSE} - memtable.Assign(qry); - {$ENDIF} - memtable.SaveToStream(stream); - stream.Position := 0; + {$IFDEF ZMEMTABLE_ENABLE_STREAM_EXPORT_IMPORT} + memtable.AssignDataFrom(qry); + {$ELSE} + memtable.Assign(qry); + {$ENDIF} + //TODO SaveTostream +// memtable.SaveToStream(stream); + stream.Position := 0; finally FreeAndNil(memtable); end; diff --git a/CORE/Source/Includes/RDWWIZ.inc b/CORE/Source/Includes/RDWWIZ.inc index f4c1372f..4790cd35 100644 --- a/CORE/Source/Includes/RDWWIZ.inc +++ b/CORE/Source/Includes/RDWWIZ.inc @@ -354,9 +354,64 @@ {$DEFINE ISDELPHI} {$ENDIF} {$ENDIF} +{$IFDEF VER300} //Delphi 10 Seatle + {$DEFINE DELPHI2_LVL} + {$DEFINE DELPHI3_LVL} + {$DEFINE DELPHI4_LVL} + {$DEFINE DELPHI5_LVL} + {$DEFINE DELPHI6_LVL} + {$DEFINE DELPHI7_LVL} + {$DEFINE DELPHI9_LVL} + {$DEFINE DELPHI2006_LVL} + {$DEFINE DELPHI2007_LVL} + {$DEFINE DELPHI2010_LVL} + {$DEFINE DELPHIXE_LVL} + {$DEFINE DELPHIXE2_LVL} + {$DEFINE DELPHIXE3_LVL} + {$DEFINE DELPHIXE4_LVL} + {$DEFINE DELPHIXE5_LVL} + {$DEFINE DELPHIXE6_LVL} + {$DEFINE DELPHIXE7_LVL} + {$DEFINE DELPHIXE8_LVL} + {$DEFINE DELPHI_TOUCH} + {$DEFINE DELPHI_UNICODE} + {$IFNDEF BCB} + {$DEFINE ISDELPHI} + {$ENDIF} +{$ENDIF} +{$IFDEF VER310} //Delphi 10.1 Berlin + {$DEFINE DELPHI2_LVL} + {$DEFINE DELPHI3_LVL} + {$DEFINE DELPHI4_LVL} + {$DEFINE DELPHI5_LVL} + {$DEFINE DELPHI6_LVL} + {$DEFINE DELPHI7_LVL} + {$DEFINE DELPHI9_LVL} + {$DEFINE DELPHI2006_LVL} + {$DEFINE DELPHI2007_LVL} + {$DEFINE DELPHI2010_LVL} + {$DEFINE DELPHIXE_LVL} + {$DEFINE DELPHIXE2_LVL} + {$DEFINE DELPHIXE3_LVL} + {$DEFINE DELPHIXE4_LVL} + {$DEFINE DELPHIXE5_LVL} + {$DEFINE DELPHIXE6_LVL} + {$DEFINE DELPHIXE7_LVL} + {$DEFINE DELPHIXE8_LVL} + {$DEFINE DELPHIXE9_LVL} + {$DEFINE DELPHIXE10_LVL} + {$DEFINE DELPHIXE10_1_LVL} + {$DEFINE DELPHIXE10_2_LVL} + {$DEFINE DELPHI_TOUCH} + {$DEFINE DELPHI_UNICODE} + {$DEFINE DELPHI10_LVL} + {$IFNDEF BCB} + {$DEFINE ISDELPHI} + {$ENDIF} +{$ENDIF} -{$IFDEF VER300} +{$IFDEF VER320} //Delphi 10.2 Tokyo {$DEFINE DELPHI2_LVL} {$DEFINE DELPHI3_LVL} {$DEFINE DELPHI4_LVL} @@ -376,6 +431,9 @@ {$DEFINE DELPHIXE7_LVL} {$DEFINE DELPHIXE8_LVL} {$DEFINE DELPHIXE9_LVL} + {$DEFINE DELPHIXE10_LVL} + {$DEFINE DELPHIXE10_1_LVL} + {$DEFINE DELPHIXE10_2_LVL} {$DEFINE DELPHI_TOUCH} {$DEFINE DELPHI_UNICODE} {$DEFINE DELPHI10_LVL} @@ -384,7 +442,7 @@ {$ENDIF} {$ENDIF} -{$IFDEF VER310} +{$IFDEF VER330} //Delphi 10.3 Rio {$DEFINE DELPHI2_LVL} {$DEFINE DELPHI3_LVL} {$DEFINE DELPHI4_LVL} @@ -406,6 +464,100 @@ {$DEFINE DELPHIXE9_LVL} {$DEFINE DELPHIXE10_LVL} {$DEFINE DELPHIXE10_1_LVL} + {$DEFINE DELPHIXE10_2_LVL} + {$DEFINE DELPHI_TOUCH} + {$DEFINE DELPHI_UNICODE} + {$DEFINE DELPHI10_LVL} + {$IFNDEF BCB} + {$DEFINE ISDELPHI} + {$ENDIF} +{$ENDIF} + +{$IFDEF VER340} //Delphi 10.4 Sydney + {$DEFINE DELPHI2_LVL} + {$DEFINE DELPHI3_LVL} + {$DEFINE DELPHI4_LVL} + {$DEFINE DELPHI5_LVL} + {$DEFINE DELPHI6_LVL} + {$DEFINE DELPHI7_LVL} + {$DEFINE DELPHI9_LVL} + {$DEFINE DELPHI2006_LVL} + {$DEFINE DELPHI2007_LVL} + {$DEFINE DELPHI2010_LVL} + {$DEFINE DELPHIXE_LVL} + {$DEFINE DELPHIXE2_LVL} + {$DEFINE DELPHIXE3_LVL} + {$DEFINE DELPHIXE4_LVL} + {$DEFINE DELPHIXE5_LVL} + {$DEFINE DELPHIXE6_LVL} + {$DEFINE DELPHIXE7_LVL} + {$DEFINE DELPHIXE8_LVL} + {$DEFINE DELPHIXE9_LVL} + {$DEFINE DELPHIXE10_LVL} + {$DEFINE DELPHIXE10_1_LVL} + {$DEFINE DELPHIXE10_2_LVL} + {$DEFINE DELPHI_TOUCH} + {$DEFINE DELPHI_UNICODE} + {$DEFINE DELPHI10_LVL} + {$IFNDEF BCB} + {$DEFINE ISDELPHI} + {$ENDIF} +{$ENDIF} + +{$IFDEF VER350} //Delphi 11 Alexandria + {$DEFINE DELPHI2_LVL} + {$DEFINE DELPHI3_LVL} + {$DEFINE DELPHI4_LVL} + {$DEFINE DELPHI5_LVL} + {$DEFINE DELPHI6_LVL} + {$DEFINE DELPHI7_LVL} + {$DEFINE DELPHI9_LVL} + {$DEFINE DELPHI2006_LVL} + {$DEFINE DELPHI2007_LVL} + {$DEFINE DELPHI2010_LVL} + {$DEFINE DELPHIXE_LVL} + {$DEFINE DELPHIXE2_LVL} + {$DEFINE DELPHIXE3_LVL} + {$DEFINE DELPHIXE4_LVL} + {$DEFINE DELPHIXE5_LVL} + {$DEFINE DELPHIXE6_LVL} + {$DEFINE DELPHIXE7_LVL} + {$DEFINE DELPHIXE8_LVL} + {$DEFINE DELPHIXE9_LVL} + {$DEFINE DELPHIXE10_LVL} + {$DEFINE DELPHIXE10_1_LVL} + {$DEFINE DELPHIXE10_2_LVL} + {$DEFINE DELPHI_TOUCH} + {$DEFINE DELPHI_UNICODE} + {$DEFINE DELPHI10_LVL} + {$IFNDEF BCB} + {$DEFINE ISDELPHI} + {$ENDIF} +{$ENDIF} + +{$IFDEF VER360} //Delphi 12 Athens + {$DEFINE DELPHI2_LVL} + {$DEFINE DELPHI3_LVL} + {$DEFINE DELPHI4_LVL} + {$DEFINE DELPHI5_LVL} + {$DEFINE DELPHI6_LVL} + {$DEFINE DELPHI7_LVL} + {$DEFINE DELPHI9_LVL} + {$DEFINE DELPHI2006_LVL} + {$DEFINE DELPHI2007_LVL} + {$DEFINE DELPHI2010_LVL} + {$DEFINE DELPHIXE_LVL} + {$DEFINE DELPHIXE2_LVL} + {$DEFINE DELPHIXE3_LVL} + {$DEFINE DELPHIXE4_LVL} + {$DEFINE DELPHIXE5_LVL} + {$DEFINE DELPHIXE6_LVL} + {$DEFINE DELPHIXE7_LVL} + {$DEFINE DELPHIXE8_LVL} + {$DEFINE DELPHIXE9_LVL} + {$DEFINE DELPHIXE10_LVL} + {$DEFINE DELPHIXE10_1_LVL} + {$DEFINE DELPHIXE10_2_LVL} {$DEFINE DELPHI_TOUCH} {$DEFINE DELPHI_UNICODE} {$DEFINE DELPHI10_LVL} @@ -414,7 +566,7 @@ {$ENDIF} {$ENDIF} -{$IFDEF VER320} +{$IFDEF VER370} //Delphi 13 Florence {$DEFINE DELPHI2_LVL} {$DEFINE DELPHI3_LVL} {$DEFINE DELPHI4_LVL} diff --git a/CORE/Source/Includes/uRESTDW.inc b/CORE/Source/Includes/uRESTDW.inc index 59181a83..e9c8f078 100644 --- a/CORE/Source/Includes/uRESTDW.inc +++ b/CORE/Source/Includes/uRESTDW.inc @@ -40,6 +40,52 @@ {$ENDIF} {$IFNDEF FPC} + {$if CompilerVersion < 26} + {$DEFINE RESTDWMEMTABLE} + {$ELSE} + {.$DEFINE RESTDWMEMTABLE} + {$DEFINE RESTFDMEMTABLE} + {.$DEFINE UNIDACMEM} + {.$DEFINE ZEOSMEM} + {.$DEFINE USE_TAURUS_TLS} + {$IFEND} +{$ELSE} + //For Lazarus + {$DEFINE RESTDWMEMTABLE} + {.$DEFINE UNIDACMEM} + {.$DEFINE ZEOSMEM} + {.$DEFINE USE_TAURUS_TLS} +{$ENDIF} + + +{$IFNDEF FPC} + {$IFDEF VER370 or CompilerVersion >= 37} + {$DEFINE DELPHI13UP} + {$DEFINE DELPHI12UP} + {$DEFINE DELPHI11UP} + {$DEFINE DELPHI10_4UP} + {$DEFINE DELPHI10_3UP} + {$DEFINE DELPHI10_2UP} + {$DEFINE DELPHI10_1UP} + {$DEFINE DELPHI10_0UP} + {$DEFINE DELPHIXE8UP} + {$DEFINE DELPHIXE7UP} + {$DEFINE DELPHIXE6UP} + {$DEFINE DELPHIXE5UP} + {$DEFINE DELPHIXE4UP} + {$DEFINE DELPHIXE3UP} + {$DEFINE DELPHIXE2UP} + {$DEFINE DELPHIXEUP} + {$DEFINE DELPHI2010UP} + {$DEFINE DELPHI2009UP} + {$DEFINE DELPHI2007UP} + {$DEFINE DELPHI2006UP} + {$DEFINE DELPHI2005UP} + {$DEFINE DELPHI2025UP} + {$DEFINE DELPHI8UP} + {$DEFINE DELPHI7UP} + {$DEFINE RTL280_UP} + {$ENDIF ~VER370} {$IFDEF VER360 or CompilerVersion >= 36} {$DEFINE DELPHI12UP} {$DEFINE DELPHI11UP} @@ -138,6 +184,7 @@ {$ENDIF ~VER330} {$IFDEF VER320 or CompilerVersion >= 32} + {$DEFINE DELPHI10_3UP} {$DEFINE DELPHI10_2UP} {$DEFINE DELPHI10_1UP} {$DEFINE DELPHI10_0UP} @@ -160,6 +207,8 @@ {$ENDIF ~VER320} {$IFDEF VER310 or CompilerVersion >= 31} + {$DEFINE DELPHI10_3UP} + {$DEFINE DELPHI10_2UP} {$DEFINE DELPHI10_1UP} {$DEFINE DELPHI10_0UP} {$DEFINE DELPHIXE8UP} @@ -181,6 +230,9 @@ {$ENDIF ~VER310} {$IFDEF VER300 or CompilerVersion >= 30} + {$DEFINE DELPHI10_3UP} + {$DEFINE DELPHI10_2UP} + {$DEFINE DELPHI10_1UP} {$DEFINE DELPHI10_0UP} {$DEFINE DELPHIXE8UP} {$DEFINE DELPHIXE7UP} @@ -514,6 +566,7 @@ {$IFNDEF RESTDWLAMW} {$IFNDEF FPC} {$IFDEF DELPHIXE5UP} + {$DEFINE SUPPORTS_CLASS_HELPERS} {$IF Declared(FireMonkeyVersion) or Defined(FRAMEWORK_FMX) Declared(FMX.Types.TFmxObject) or Defined(LINUX64)} {$DEFINE HAS_FMX} @@ -754,14 +807,3 @@ // Warnings {$IFOPT X+} {$DEFINE EXTENDEDSYNTAX_ON} {$ENDIF} -// for Delphi/BCB trial versions remove the point from the line below -{.$UNDEF SUPPORTS_WEAKPACKAGEUNIT} - -(* End of Compiler settings *) -(* REST DataWare Generic Definitions *) - - {$DEFINE RESTDWMEMTABLE} - -(* End of REST DataWare Generic Definitions *) - -(******************************************************************************) diff --git a/CORE/Source/Plugins/Memdataset/uRESTDWABMemDBFilterExpr.pas b/CORE/Source/Plugins/Memdataset/uRESTDWABMemDBFilterExpr.pas index 2ee590b6..8638725e 100644 --- a/CORE/Source/Plugins/Memdataset/uRESTDWABMemDBFilterExpr.pas +++ b/CORE/Source/Plugins/Memdataset/uRESTDWABMemDBFilterExpr.pas @@ -123,6 +123,9 @@ implementation {$IFDEF DELPHI2010UP} ,ord(DB.ftSingle) // ftSingle {$ENDIF} + {$IFDEF DELPHI2025UP} + ,ord(DB.ftLargeint) // ftSingle + {$ENDIF} {$ELSE} ,ord(DB.ftUnknown) // ftObject {$ENDIF} diff --git a/CORE/Source/Plugins/Memdataset/uRESTDWMemDBUtils.pas b/CORE/Source/Plugins/Memdataset/uRESTDWMemDBUtils.pas index bd118ac2..3b5af422 100644 --- a/CORE/Source/Plugins/Memdataset/uRESTDWMemDBUtils.pas +++ b/CORE/Source/Plugins/Memdataset/uRESTDWMemDBUtils.pas @@ -41,6 +41,10 @@ {$IFDEF RTL200_UP}TBookmark{$ELSE}TBookmarkStr{$ENDIF RTL200_UP} {$ENDIF}; + +Type + TFieldListArray = Array of TField; + type IRESTDWDataControl = interface ['{8B6910C8-D5FD-40BA-A427-FC54FE7B85E5}'] @@ -163,7 +167,8 @@ implementation System.Generics.Collections, {$ENDIF RTL240_UP} {$IFDEF RESTDWVCL}uRESTDWMemVCLUtils, {$ENDIF} - uRESTDWMemTypes, uRESTDWMemConsts, uRESTDWMemResources; + uRESTDWMemTypes, uRESTDWMemConsts, uRESTDWMemResources, + uRESTDWConsts; { TRESTDWDataLink } procedure TRESTDWDataLink.FocusControl(Field: TFieldRef); @@ -365,12 +370,12 @@ function CreateLocate(DataSet: TDataSet): TRESTDWLocateObject; function DataSetLocateThrough(DataSet: TDataSet; const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean; var - FieldCount: Integer; - Fields: TList{$IFDEF RTL240_UP}{$ENDIF RTL240_UP}; + FieldCount : Integer; + Fields : TFieldListArray; Bookmark: TBookmarkType; function CompareField(Field: TField; const Value: Variant): Boolean; var - S: string; + S, A : string; begin if Field.DataType in [ftString{$IFDEF UNICODE}, ftWideString{$ENDIF UNICODE}] then begin @@ -379,12 +384,13 @@ function DataSetLocateThrough(DataSet: TDataSet; const KeyFields: string; else begin S := Field.AsString; + A := Copy(Value, InitStrPos, Field.Size); if loPartialKey in Options then Delete(S, Length(Value) + 1, MaxInt); if loCaseInsensitive in Options then - Result := AnsiSameText(S, Value) + Result := Uppercase(S) = Uppercase(A) else - Result := AnsiSameStr(S, Value); + Result := S = A; end; end else @@ -404,15 +410,33 @@ function DataSetLocateThrough(DataSet: TDataSet; const KeyFields: string; Result := Result and CompareField(TField(Fields[I]), KeyValues[I]); end; end; + procedure GetFieldList(List: TFieldListArray; const FieldNames: string); + var + I, Len, + Pos : Integer; + Field : TField; + begin + Len := FieldNames.Length; + Pos := 1; + I := 0; + while Pos <= Len do + begin + Field := DataSet.FieldByName(ExtractFieldName(FieldNames, Pos)); + SetLength(Fields, I+1); + Fields[I] := Field; + Inc(I); + end; + End; begin Result := False; + SetLength(Fields, 0); DataSet.CheckBrowseMode; if DataSet.IsEmpty then Exit; - Fields := TList{$IFDEF RTL240_UP}{$ENDIF RTL240_UP}.Create; +// Fields := TList.Create; try - DataSet.GetFieldList(Fields, KeyFields); - FieldCount := Fields.Count; + GetFieldList(Fields, KeyFields); + FieldCount := Length(Fields); Result := CompareRecord; if Result then Exit; @@ -446,7 +470,8 @@ function DataSetLocateThrough(DataSet: TDataSet; const KeyFields: string; DataSet.EnableControls; end; finally - Fields.Free; + SetLength(Fields, 0); +// Fields.Free; end; end; { DataSetSortedSearch. Navigate on sorted DataSet routine. } diff --git a/CORE/Source/Plugins/Memdataset/uRESTDWMemoryDataset.pas b/CORE/Source/Plugins/Memdataset/uRESTDWMemoryDataset.pas index 5e72d4ed..f49a1eaf 100644 --- a/CORE/Source/Plugins/Memdataset/uRESTDWMemoryDataset.pas +++ b/CORE/Source/Plugins/Memdataset/uRESTDWMemoryDataset.pas @@ -29,10 +29,11 @@ {$IFDEF FPC} {$MODE OBJFPC}{$H+} {$ENDIF} + uses SysUtils, Classes, DB, Variants, uRESTDWProtoTypes, uRESTDWMemDBUtils, uRESTDWMemExprParser, {$IFNDEF FPC}uRESTDWABMemDBFilterExpr,{$ENDIF} - uRESTDWAbout, uRESTDWConsts; + uRESTDWAbout, uRESTDWConsts, uRESTDWBasicDbTypes; Const ftBlobTypes = [ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle, @@ -100,158 +101,35 @@ TApplyRecordEvent = Procedure(Dataset : TDataset; RecStatus : TRecordStatus; FoundApply : Boolean) Of Object; - TMemBlobData = TRESTDWBytes; - PMemBlobData = ^TRESTDWBytes; - TMemBlobArray = Array Of TMemBlobData; - PMemBlobArray = ^TMemBlobArray; - PRESTDWMTMemoryRecord = ^TRESTDWMTMemoryRecord; - TRESTDWMTMemoryRecord = Class; TLoadMode = (lmCopy, lmAppend); TSaveLoadState = (slsNone, slsLoading, slsSaving); TCompareRecords = Function(Item1, Item2 : TRESTDWMTMemoryRecord) : Integer Of Object; TIntArray = Array Of Integer; TRESTDWMTBookmarkData = Integer; - TRESTDWMemTable = Class; - {$IFNDEF FPC} - {$IF CompilerVersion > 21} - PRESTDWMTMemBuffer = PByte; - TRESTDWMTBookmark = TBookmark; - TRESTDWMTValueBuffer = TValueBuffer; - TRESTDWMTRecordBuffer = TRecordBuffer; - {$ELSE} - {$IFDEF UNICODE} - PRESTDWMTMemBuffer = PByte; - {$ELSE} - PRESTDWMTMemBuffer = PAnsiChar; - {$ENDIF UNICODE} - TRESTDWMTBookmark = Pointer; - TRESTDWMTValueBuffer = Pointer; - TRESTDWMTRecordBuffer = Pointer; - {$IFEND} - {$ELSE} - TValueBuffer = Array of Byte; - PRESTDWMTMemBuffer = PByte; - TRESTDWMTBookmark = Pointer; - TRESTDWMTValueBuffer = Pointer; - TRESTDWMTRecordBuffer = TRecordBuffer; - {$ENDIF} - PBlobBuffer = ^TBlobBuffer; - TBlobBuffer = Packed Record - FieldNo, - OrgBufID : Integer; - Buffer : Pointer; - Size : Int64; - end; - PRESTDWBlobField = ^TRESTDWBlobField; - TRESTDWBlobField = Packed Record - ConnBlobBuffer : Array[0..11] Of Byte; // DB specific data is stored here - BlobBuffer : PBlobBuffer; - End; - PRESTDWRecLinkItem = ^TRESTDWRecLinkItem; - TRESTDWRecLinkItem = Packed Record - Prior : PRESTDWRecLinkItem; - Next : PRESTDWRecLinkItem; - End; - PRESTDWBookmark = ^TRESTDWBookmark; - TRESTDWBookmark = Packed Record - BookmarkData : PRESTDWRecLinkItem; - BookmarkInt : Integer; // Was used by TArrayBufIndex - BookmarkFlag : TBookmarkFlag; - End; - - { - TStreamField = Class(TBlobField) - Private - FStream : TStream; - Function GetAsStream : TStream; - Public - Constructor Create(AOwner : TComponent); Override; - Destructor Destroy; Override; - Procedure Put; - Property Value : TStream Read GetAsStream; - End; - - TdwcolorOptions = Set Of (dwcoAllowedSharp, dwcoShowWebSharp, dwcoSysColors); - TColorField = class(TIntegerField) - Private - FOptions : TdwcolorOptions; - Protected - Function GetIdentText (AValue : Integer; - Var Text : String) : Boolean; Virtual;Overload; - Procedure GetText (Var Text : String; - DisplayText : Boolean); Override; - Function SetAsIdentString(Const AValue : String) : Boolean; Virtual; - Procedure SetAsString (Const AValue : String); Override; - Public - Constructor Create (AOwner : TComponent); Override; - Published - Property MaxValue Stored False; - Property MinValue Stored False; - Property Options : TdwcolorOptions Read FOptions Write FOptions Default [dwcoAllowedSharp]; - End; -} - IRESTDWMemTable = Interface - Function GetRecordCount : Integer; - Function GetMemoryRecord (Index : Integer) : TRESTDWMTMemoryRecord; - Function GetOffSets (aField : TField) : Word;Overload; - Function GetOffSets (Index : Integer) : Word;Overload; - Function GetOffSetsBlobs : Word; - Function DataTypeSuported(datatype : TFieldType) : Boolean; // new - Function DataTypeIsBlobTypes(datatype : TFieldType) : Boolean; // new - Function GetBlobRec (Field : TField; - Rec : TRESTDWMTMemoryRecord) : TMemBlobData; - Function CreateBlobStream (Field : TField; - Mode : TBlobStreamMode) : TStream; - Function GetCalcFieldLen (FieldType: TFieldType; - Size : Word) : Word; - Procedure InternalAddRecord (Buffer : {$IFDEF FPC}Pointer{$ELSE} - {$IFDEF RESTDWANDROID}TRecBuf{$ELSE} - {$IF CompilerVersion >22}Pointer{$ELSE}TRecordBuffer{$IFEND}{$ENDIF}{$ENDIF}; - aAppend : Boolean); - Procedure InitRecord (Buffer : {$IFDEF NEXTGEN}TRecBuf{$ELSE}TRecordBuffer{$ENDIF}); - Function AllocRecordBuffer : TRecordBuffer; - Procedure SetMemoryRecordData(Buffer : PRESTDWMTMemBuffer; - Pos : Integer); - Procedure AfterLoad; - Function GetDataset : TDataset; - Function GetBlob (RecNo, Index : Integer) : PMemBlobData; - Procedure Loaded; - {$IFDEF FPC} - Function GetDatabaseCharSet : TDatabaseCharSet; - {$ENDIF} - End; - TRESTDWStorageBase = class(TRESTDWComponent) - Private - {$IFDEF FPC} - FDatabaseCharSet: TDatabaseCharSet; - {$ENDIF} - FEncodeStrs: Boolean; - Protected - Procedure SaveDatasetToStream (Dataset : TDataset; - Var stream : TStream); Virtual; - Procedure LoadDatasetFromStream(Dataset : TDataset; - stream : TStream); Virtual; - Procedure SaveDWMemToStream (Dataset : IRESTDWMemTable; - Var stream : TStream); Virtual; - Procedure LoadDWMemFromStream (Dataset : IRESTDWMemTable; - stream : TStream); Virtual; - Public - Constructor Create (AOwner : TComponent); Override; - Procedure SaveToStream (Dataset : TDataset; - Var Stream : TStream); - Procedure LoadFromStream(Dataset : TDataset; - Stream : TStream); - Procedure SaveToFile (Dataset : TDataset; - FileName : String); - Procedure LoadFromFile (Dataset : TDataset; - FileName : String); - Public - Property EncodeStrs : Boolean Read FEncodeStrs Write FEncodeStrs; - Published - {$IFDEF FPC} - Property DatabaseCharSet : TDatabaseCharSet Read FDatabaseCharSet Write FDatabaseCharSet; - {$ENDIF} - End; + PBlobBuffer = ^TBlobBuffer; + TBlobBuffer = Packed Record + FieldNo, + OrgBufID : Integer; + Buffer : Pointer; + Size : Int64; + End; + PRESTDWBlobField = ^TRESTDWBlobField; + TRESTDWBlobField = Packed Record + ConnBlobBuffer : Array[0..11] Of Byte; // DB specific data is stored here + BlobBuffer : PBlobBuffer; + End; + PRESTDWRecLinkItem = ^TRESTDWRecLinkItem; + TRESTDWRecLinkItem = Packed Record + Prior : PRESTDWRecLinkItem; + Next : PRESTDWRecLinkItem; + End; + PRESTDWBookmark = ^TRESTDWBookmark; + TRESTDWBookmark = Packed Record + BookmarkData : PRESTDWRecLinkItem; + BookmarkInt : Integer; // Was used by TArrayBufIndex + BookmarkFlag : TBookmarkFlag; + End; + TRESTDWMemTable = Class; PRecordList = ^TRecordList; TRecordList = Class(TList) Private @@ -471,7 +349,6 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) FBookmarkOfs, FBlobOfs, FRecBufSize, - FLastID, FRowsOriginal, FRowsChanged, FRowsAffected : Integer; @@ -480,8 +357,8 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) FDeletedValues, FIndexList : TList; FSrcAutoIncField : TField; - FRecords : TRecordList; FDataSet : TDataset; + FFieldAttrs : TFieldAttrs; FFetch, FAllPacketsFetched, FRefreshing, @@ -510,18 +387,10 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) FNullmaskSize : Byte; FFilterParser : TExprParser; FStorageDataType : TRESTDWStorageBase; - FBlobs : TMemBlobArray; FIndexes : TRESTDWDataSetIndexDefs; FDefaultIndex, FCurrentIndexDef : TRESTDWDatasetIndex; FFieldDefClass : TFieldClass; - {$IFDEF FPC} - vDatabaseCharSet : TDatabaseCharSet; - Procedure SetDatabaseCharSet(Value : TDatabaseCharSet); - Function GetDatabaseCharSet : TDatabaseCharSet; - {$ELSE} - FFilterExpression : TRDWABExprParser; - {$ENDIF} Procedure CalcOffSets; Function AddRecord : TRESTDWMTMemoryRecord; Function InsertRecord(Index : Integer) : TRESTDWMTMemoryRecord; @@ -532,79 +401,82 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) Compare : TCompareRecords); Procedure Sort; Function CalcRecordSize : Integer; - Function GetMemoryRecord(Index : Integer) : TRESTDWMTMemoryRecord; Function GetCapacity : Integer; Function RecordFilter : Boolean; Procedure SetCapacity(Value : Integer); Procedure ClearRecords; - Procedure InitBufferPointers(GetProps : Boolean); + Procedure InitBufferPointers(GetProps : Boolean); Procedure CheckStructure (UseAutoIncAsInteger : Boolean = False); Procedure AddStatusField; Procedure HideStatusField; Function CopyFromDataSet: Integer; Procedure ClearChanges; - Procedure DoBeforeApply (ADataset : TDataset; - RowsPending : Integer); - Procedure DoAfterApply (ADataset : TDataset; - RowsApplied : Integer); - Procedure DoBeforeApplyRecord(ADataset : TDataset; - RS : TRecordStatus; - aFound : Boolean); - Procedure DoAfterApplyRecord (ADataset : TDataset; - RS : TRecordStatus; - aApply : Boolean); - Procedure InternalGotoBookmarkData(BookmarkData : TRESTDWMTBookmarkData); - Function InternalGetFieldData (Field : TField; - Var Buffer : TRESTDWMTValueBuffer) : Boolean; - Procedure InternalSetFieldData (Field : TField; - Buffer : Pointer; + Function GetFieldData (FieldNo : Integer; + Var Buffer : TValueBuffer): Boolean; overload;{$IFNDEF FPC}override;{$ENDIF} + {$IFDEF FPC} + Function GetFieldData (Field : TField; + Buffer : Pointer; + NativeFormat : Boolean): Boolean; Overload; Override; + {$ENDIF} + Procedure DoBeforeApply (ADataset : TDataset; + RowsPending : Integer); + Procedure DoAfterApply (ADataset : TDataset; + RowsApplied : Integer); + Procedure DoBeforeApplyRecord (ADataset : TDataset; + RS : TRecordStatus; + aFound : Boolean); + Procedure DoAfterApplyRecord (ADataset : TDataset; + RS : TRecordStatus; + aApply : Boolean); + Procedure InternalGotoBookmarkData(BookmarkData : TRESTDWMTBookmarkData); + Procedure InternalSetFieldData (Field : TField; + Buffer : Pointer; Const ValidateBuffer : TRESTDWMTValueBuffer); + {$IFDEF FPC} + Procedure SetProviderFlags; + {$ENDIF} Protected - Function IsLookup (Index : Integer): Boolean; - Function GetFieldDef (Index : Integer): Integer; - Function GetFieldIndex (Const aName : String) : Integer; - Function FindFieldIndex (Field : TField) : Integer; - Function FindFieldData (Buffer : Pointer; - Field : TField) : Pointer; + Function IsLookup (Index : Integer) : Boolean; + Function GetFieldDef (Index : Integer) : Integer; + Function GetFieldIndex (Const aName : String) : Integer; + Function FindFieldIndex (Field : TField) : Integer; + Function FindFieldData (Buffer : Pointer; + Field : TField) : Pointer; Function CompareFields (Data1, - Data2 : Pointer; - FieldType : TFieldType; - CaseInsensitive : Boolean): Integer; Virtual; - Function GetFieldClass (FieldType : TFieldType) : TFieldClass; Override; - Procedure DesignNotify (Const AFieldName : String; - Dummy : Integer); + Data2 : Pointer; + FieldType : TFieldType; + CaseInsensitive : Boolean) : Integer; Virtual; + Function GetFieldClass (FieldType : TFieldType) : TFieldClass; Override; + Procedure DesignNotify (Const AFieldName : String; + Dummy : Integer); // Delphi 2006+ has support for DWWideString {$IF DEFINED(FPC) OR DEFINED(RESTDWVCL)} - Procedure DataConvert (Field : TField; - Source, - Dest : Pointer; - ToNative : Boolean); Override; + Procedure DataConvert (Field : TField; + Source, + Dest : Pointer; + ToNative : Boolean); Override; {$IFEND} // Procedure DefChanged (Sender : TObject); Override; - Procedure AssignMemoryRecord (Rec : TRESTDWMTMemoryRecord; - Buffer : PRESTDWMTMemBuffer); - Function GetActiveRecBuf (Var RecBuf : PRESTDWMTMemBuffer) : Boolean; Virtual; + Procedure AssignMemoryRecord (Rec : TRESTDWMTMemoryRecord; + Buffer : PRESTDWMTMemBuffer); + Function GetActiveRecBuf (Var RecBuf : PRESTDWMTMemBuffer) : Boolean;Virtual; Procedure InitFieldDefsFromFields; Procedure InitFieldDefsFromFieldsInternal; - Procedure RecordToBuffer (Rec : TRESTDWMTMemoryRecord; - Buffer : PRESTDWMTMemBuffer); - Procedure SetMemoryRecordData(Buffer : PRESTDWMTMemBuffer; - Pos : Integer); Virtual; - Procedure SetAutoIncFields (Buffer : PRESTDWMTMemBuffer); Virtual; - Function CompareRecords (Item1, - Item2 : TRESTDWMTMemoryRecord): Integer; Virtual; - Function GetBlobData (Field : TField; - Buffer : PRESTDWMTMemBuffer) : TMemBlobData; - Procedure SetBlobData (Field : TField; - Buffer : PRESTDWMTMemBuffer; - Value : TMemBlobData); + Procedure RecordToBuffer (Rec : TRESTDWMTMemoryRecord; + Buffer : PRESTDWMTMemBuffer); + Procedure SetAutoIncFields (Buffer : PRESTDWMTMemBuffer); Virtual; + Function CompareRecords (Item1, + Item2 : TRESTDWMTMemoryRecord): Integer;Virtual; + Function GetBlobData (Field : TField; + Buffer : PRESTDWMTMemBuffer) : TMemBlobData; + Procedure SetBlobData (Field : TField; + Buffer : PRESTDWMTMemBuffer; + Value : TMemBlobData); {$IFDEF NEXTGEN} Function AllocRecBuf : TRecBuf; override; Procedure FreeRecBuf (Var Buffer : TRecBuf); Override; {$ENDIF NEXTGEN} - Function AllocRecordBuffer : TRecordBuffer;{$IFNDEF NEXTGEN}Override;{$ENDIF} - Procedure FreeRecordBuffer (Var Buffer : TRecordBuffer);{$IFNDEF NEXTGEN}Override;{$ENDIF} Procedure InternalInitRecord (Buffer :{$IFDEF NEXTGEN}TRecBuf{$ELSE}TRecordBuffer{$ENDIF}); Override; Function GetRecord (Buffer :{$IFDEF NEXTGEN}TRecBuf{$ELSE}TRecordBuffer{$ENDIF}; GetMode : TGetMode; @@ -618,10 +490,6 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) Procedure SetBookmarkData (Buffer :{$IFDEF NEXTGEN}TRecBuf{$ELSE}TRecordBuffer{$ENDIF}; Data : TRESTDWMTBookmark); Overload;Override; Procedure InitRecord (Buffer :{$IFDEF NEXTGEN}TRecBuf{$ELSE}TRecordBuffer{$ENDIF}); Overload;Override; - Procedure InternalAddRecord (Buffer : {$IFDEF FPC}Pointer{$ELSE} - {$IFDEF RESTDWANDROID}TRecBuf{$ELSE} - {$IF CompilerVersion >22}Pointer{$ELSE}TRecordBuffer{$IFEND}{$ENDIF}{$ENDIF}; - aAppend : Boolean); Overload; Function GetCurrentRecord (Buffer :{$IFDEF NEXTGEN}TRecBuf{$ELSE}TRecordBuffer{$ENDIF}): Boolean; Overload;Override; Procedure ClearCalcFields (Buffer :{$IFDEF NEXTGEN}NativeInt{$ELSE}TRecordBuffer{$ENDIF}); Override; Function GetRecordSize : Word; Override; @@ -655,7 +523,6 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) Procedure InternalOpen; Override; Procedure OpenCursor(InfoQuery : Boolean);Overload;Override; Function IsCursorOpen : Boolean; Override; - Function GetRecordCount : Integer; Override; Function GetRecNo : Integer; Override; Procedure SetRecNo (Value : Integer);Override; Procedure DoAfterOpen; Override; @@ -665,22 +532,44 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) Var Value : Variant) : Boolean;Virtual; Procedure Notification (AComponent : TComponent; Operation : TOperation);Override; - Function DataTypeSuported (datatype : TFieldType) : Boolean; - Function DataTypeIsBlobTypes (datatype : TFieldType) : Boolean; - Function GetOffSets (aField : TField) : Word;Overload; - Function GetOffSets (Index : Integer) : Word;Overload; - Function GetOffSetsBlobs : Word; Function GetBlobRec (Field : TField; Rec : TRESTDWMTMemoryRecord) : TMemBlobData; - Function GetCalcFieldLen (FieldType : TFieldType; - Size : Word) : Word; procedure ClearIndexes; Function GetDataset : TDataset; Procedure SetIndexName(AValue : String); - Property Records [Index : Integer] : TRESTDWMTMemoryRecord Read GetMemoryRecord; Public + FLastID : Integer; + FBlobs : TMemBlobArray; + FRecords : TRecordList; + {$IFDEF FPC} + vDatabaseCharSet : TDatabaseCharSet; + Procedure SetDatabaseCharSet(Value : TDatabaseCharSet); + Function GetDatabaseCharSet : TDatabaseCharSet; + {$ELSE} + FFilterExpression : TRDWABExprParser; + {$ENDIF} Constructor Create(AOwner : TComponent);Override; Destructor Destroy;Override; + Function AllocRecordBuffer : TRecordBuffer;{$IFNDEF NEXTGEN}Override;{$ENDIF} + Procedure FreeRecordBuffer (Var Buffer : TRecordBuffer);{$IFNDEF NEXTGEN}Override;{$ENDIF} + Function GetMemoryRecord (Index : Integer) : TRESTDWMTMemoryRecord; + Procedure InternalAddRecord (Buffer : {$IFDEF FPC}Pointer{$ELSE} + {$IFDEF RESTDWANDROID}TRecBuf{$ELSE} + {$IF CompilerVersion >22}Pointer{$ELSE}TRecordBuffer{$IFEND}{$ENDIF}{$ENDIF}; + aAppend : Boolean); Overload; + Function DataTypeSuported (datatype : TFieldType) : Boolean; + Function DataTypeIsBlobTypes (datatype : TFieldType) : Boolean; + Function GetCalcFieldLen (FieldType : TFieldType; + Size : Word) : Word; + Function InternalGetFieldData(Field : TField; + Var Buffer : TRESTDWMTValueBuffer; + cSize : Integer = 0) : Boolean; + Function GetOffSets (aField : TField) : Word;Overload; + Function GetOffSets (Index : Integer) : Word;Overload; + Function GetOffSetsBlobs : Word; + Procedure SetMemoryRecordData (Buffer : PRESTDWMTMemBuffer; + Pos : Integer); Virtual; + Function GetRecordCount : Integer; Override; Function BookmarkValid (aBookmark : TBookmark) : Boolean;Override; Function CompareBookmarks(aBookmark1, aBookmark2 : TBookmark) : Integer;Override; @@ -690,13 +579,14 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) Procedure ClearBuffer; Function GetBlob (aRecNo, Index : Integer) : PMemBlobData; + Procedure GetFieldList(List: TList; const FieldNames: string); overload; Function GetFieldData (Field : TField; {$IFNDEF FPC} {$IF CompilerVersion > 21}Var{$IFEND} Buffer : TRESTDWMTValueBuffer {$ELSE} Buffer : Pointer - {$ENDIF}) : Boolean;Overload;Override; + {$ENDIF}) : Boolean;Override; {$IFNDEF NEXTGEN} {$IFDEF RTL240_UP} Function GetFieldData (Field : TField; @@ -789,8 +679,11 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) Property StorageDataType : TRESTDWStorageBase Read FStorageDataType Write FStorageDataType; Property RESTDWIndexes [Aindex : Integer] : TRESTDWIndex Read GetBufIndex; Property RESTDWIndexDefs[Aindex : Integer] : TRESTDWDatasetIndex Read GetBufIndexDef; + Property FieldAttrs : TFieldAttrs Read FFieldAttrs Write FFieldAttrs; + Property BlobFieldCount; + Property Records [Index : Integer] : TRESTDWMTMemoryRecord Read GetMemoryRecord; published - Property Capacity : Integer Read GetCapacity Write SetCapacity Default 0; + Property Capacity : Integer Read GetCapacity Write SetCapacity Default 0; Property Active; Property AutoCalcFields; Property Filtered; @@ -843,6 +736,24 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) Property OnNewRecord; Property OnPostError; End; + TBlobStream = class(TMemoryStream) + private + FFieldIndex: Integer; + FRecNo: Integer; + FDataSet: TRESTDWMemtable; + public + destructor Destroy; Override; + end; + TStreamField = Class(TBlobField) + Private + FStream : TStream; + Function GetAsStream : TStream; + Public + Constructor Create(AOwner : TComponent); Override; + Destructor Destroy; Override; + Procedure Put; + Property Value : TStream Read GetAsStream; + End; TRESTDWMTMemBlobStream = Class(TStream) Private FField : TBlobField; @@ -856,8 +767,10 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) FPosition : Longint; Function GetBlobSize : Longint; Function GetBlobFromRecord(Field : TField) : TMemBlobData; + {$IFDEF FPC} Procedure SetBlobFromRecord(Field : TField; Value : TMemBlobData); + {$ENDIF} Public Constructor Create(Field : TBlobField; Mode : TBlobStreamMode); @@ -870,31 +783,6 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) Origin: Word) : Longint;Override; Procedure Truncate; End; - TRESTDWMTMemoryRecord = Class(TPersistent) - Private - FMemoryData : TRESTDWMemTable; - FIndex, - FID : Integer; - FData : Pointer; - FBlobs : TMemBlobArray; - FIsNull : Boolean; - Function GetIndex : Integer; - Procedure SetMemoryData(Value : TRESTDWMemTable; - UpdateParent : Boolean); - Protected - Procedure SetIndex (Value : Integer); Virtual; - Public - Constructor Create (MemoryData : TRESTDWMemTable); Virtual; - Constructor CreateEx (MemoryData : TRESTDWMemTable; - UpdateParent : Boolean); Virtual; - Destructor Destroy;Override; - Property MemoryData : TRESTDWMemTable Read FMemoryData; - Property ID : Integer Read FID Write FID; - Property Index : Integer Read GetIndex Write SetIndex; - Property Data : Pointer Read FData Write FData; - Property Blobs : TMemBlobArray Read FBlobs Write FBlobs; - Property IsNull : Boolean Read FIsNull Write FIsNull; - End; TSortOrder = (soAsc, soDesc); //Possible sorting case sensitivity values // sensitive sorting - insensitive sorting @@ -940,7 +828,7 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) Type {$IFNDEF FPC} {$IF CompilerVersion > 24} - TExtendedField = Class(TNumericField) + TRESTDWNumericField = Class(TNumericField) Protected Function GetAsExtended : Extended; Function GetAsString : String; Override; @@ -948,6 +836,8 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) Procedure SetAsExtended(Const AValue : Extended); Procedure SetAsString (Const AValue : String); Override; Procedure SetVarValue (Const AValue : Variant); Override; + Procedure SetAsFloat (AValue: Double); Override; + Function GetAsFloat : Double;Override; Private vSize, vPrecision : Integer; @@ -957,12 +847,12 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) Property AsExtended : Extended Read GetAsExtended Write SetAsExtended; {$ENDIF} Property Value : Extended Read GetAsExtended Write SetAsExtended; - Property Size : Integer Read vSize Write vSize; Published + Property Size : Integer Read vSize Write vSize; Property Precision : Integer Read vPrecision Write vPrecision; End; {$ELSE} - TExtendedField = Class(TNumericField) + TRESTDWNumericField = Class(TNumericField) Protected {$IFDEF COMPILER17_UP} Function GetAsExtended : Extended; Override; @@ -971,43 +861,87 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) End; {$IFEND} {$ELSE} - TExtendedField = Class(TNumericField) + TRESTDWNumericField = Class(TNumericField) Private vSize, vPrecision : Integer; Procedure SetAsExtended(Const AValue : Extended); Protected - Function GetAsString : String; Override; + Function GetAsString : String; Override; Procedure SetAsString (Const AValue : String); Override; -// Function GetAsVariant : Variant; Override; + Procedure SetAsFloat (AValue: Double); Override; + Function GetAsFloat : Double; Override; + Procedure SetVarValue (Const AValue : Variant); Override; + Function GetAsVariant : Variant; Override; Public Constructor Create(AOwner: TComponent); override; - Property Size : Integer Read vSize Write vSize; Published + Property Size : Integer Read vSize Write vSize; Property Precision : Integer Read vPrecision Write vPrecision; End; {$ENDIF} {$IFNDEF FPC} - TSQLTimeStampOffsetField = Class(TSQLTimeStampField) - Protected - {$IF CompilerVersion < 25} - Procedure GetText (Var Text : String; - DisplayText : Boolean); Override; - {$IFEND} - {$IFDEF FPC} - Procedure SetAsString(const Value: string); override; - {$ELSE} + TRESTDWSQLTimeStampOffsetField = Class(TSQLTimeStampField) + Protected + {$IF CompilerVersion < 25} + Procedure GetText (Var Text : String; + DisplayText : Boolean); Override; + {$IFEND} + {$IFDEF FPC} + Procedure SetAsString(const Value: string); override; + {$ELSE} {$IF CompilerVersion < 25} - Procedure SetAsString(const Value: string); override; + Procedure SetAsString(const Value: string); override; {$ELSE} - Procedure SetAsString(Const AValue : String); Override; + Procedure SetAsString(Const AValue : String); Override; {$IFEND} - {$ENDIF} - End; + {$ENDIF} + Public + Constructor Create(AOwner: TComponent); override; + End; {$ENDIF} + Type + TStringFieldRESTDW = Class(TStringField) + Protected + Function CopyToNull(aValue : String) : String;Overload; + Function CopyToNull(aValue : TRESTDWBytes) : TRESTDWBytes;Overload; + Function GetAsString : String; Override; + {$IFNDEF FPC} + {$IFNDEF NEXTGEN} + Function GetValue(var aValue: AnsiString): Boolean; + Function GetAsAnsiString : AnsiString; override; + {$ELSE} + Function GetValue(var aValue: String): Boolean; + {$ENDIF !NEXTGEN} + {$ELSE} + Function GetAsAnsiString : AnsiString; override; + Function GetValue(var aValue: String): Boolean; + {$ENDIF} + Function GetAsVariant : Variant; Override; +// Procedure GetText (Var Text : String; +// DisplayText : Boolean); Override; + Procedure SetAsAnsiString(const AValue: AnsiString); override; + Procedure SetAsString (Const AValue : String); Override; + Public + Constructor Create(AOwner: TComponent); override; + End; + +{$IFDEF SUPPORTS_CLASS_HELPERS} + TStringFieldHelper = Class helper For TStringField + Protected + Function GetAsString : String; + {$IFNDEF NEXTGEN} + Function GetAsAnsiString : AnsiString; + {$ENDIF !NEXTGEN} + Function GetAsVariant : Variant; + Procedure SetAsAnsiString(const AValue: AnsiString); + Procedure SetAsString (Const AValue : String); + End; +{$ENDIF} + Var DefaultFieldClasses : Array[TFieldType] Of TFieldClass = (nil, { ftUnknown } - TStringField, { ftString } + TStringFieldRESTDW, { ftString } TSmallintField, { ftSmallint } TIntegerField, { ftInteger } TWordField, { ftWord } @@ -1029,51 +963,59 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) TBlobField, { ftDBaseOle } TBlobField, { ftTypedBinary } nil, { ftCursor } - TStringField, { ftFixedChar } + TStringFieldRESTDW, { ftFixedChar } TWideStringField, { ftWideString } TLargeIntField, { ftLargeInt } {$IFNDEF FPC}TADTField,{ ftADT }{$ELSE}Nil,{$ENDIF} {$IFNDEF FPC}TArrayField,{ ftArray }{$ELSE}Nil,{$ENDIF} {$IFNDEF FPC}TReferenceField,{ ftReference }{$ELSE}Nil,{$ENDIF} {$IFNDEF FPC}TDataSetField,{ ftDataSet }{$ELSE}Nil,{$ENDIF} - TBlobField, { ftOraBlob } - TMemoField, { ftOraClob } + TStreamField, //TBlobField, { ftOraBlob } + TStreamField, //TMemoField, { ftOraClob } TVariantField, { ftVariant } {$IFNDEF FPC}TInterfaceField,{ ftInterface }{$ELSE}Nil,{$ENDIF} {$IFNDEF FPC}TIDispatchField,{ ftIDispatch }{$ELSE}Nil,{$ENDIF} TGuidField,{ ftGuid } {$IFNDEF FPC}TSQLTimeStampField, { ftTimeStamp }{$ELSE}Nil,{$ENDIF} - TExtendedField{ ftFMTBcd } + TRESTDWNumericField{ ftFMTBcd } // {$IFNDEF FPC}TFMTBcdField{$ELSE}TExtendedField{$ENDIF}{ ftFMTBcd } {$IFNDEF FPC} {$IFDEF DELPHI2010UP}, TWideStringField, { ftFixedWideChar } - TWideMemoField, { ftWideMemo } + TStreamField, //TWideMemoField, { ftWideMemo } TSQLTimeStampField, { ftOraTimeStamp } - TStringField { ftOraInterval } + TStringFieldRESTDW { ftOraInterval } {$ENDIF} {$ELSE}, - TStringField { ftOraInterval } + TStringFieldRESTDW { ftOraInterval } {$ENDIF} {$IFNDEF FPC} {$IFDEF DELPHIXEUP}, TLongWordField, { ftLongWord } TShortintField, { ftShortint } TByteField, { ftByte } - TExtendedField, + TRESTDWNumericField, nil, { ftConnection } nil, { ftParams } - TBlobField { ftStream } + TStreamField //TBlobField { ftStream } {$ENDIF} {$ELSE}, - TBlobField { ftStream } + TStreamField //TBlobField { ftStream } {$ENDIF} {$IFDEF DELPHIXE2UP}, TSQLTimeStampOffsetField, { ftTimeStampOffset } nil, { ftObject } - TSingleField { ftSingle }{$ENDIF}); + TSingleField { ftSingle } + {$ENDIF} + {$IFDEF DELPHI2025UP}, + TLargeIntField + {$ENDIF}); + + Procedure CalcDataSize(FieldDef : TFieldDef; Var DataSize: Integer);Overload; + Procedure CalcDataSize(Field : TField; Var DataSize: Integer);Overload; + Implementation Uses @@ -1084,8 +1026,9 @@ TDoubleLinkedBufIndex = class(TRESTDWIndex) FMTBcd, {$IFDEF RESTDWVCL}uRESTDWMemVCLUtils,{$ENDIF} uRESTDWMemResources, - uRESTDWTools, uRESTDWBasicTypes, uRESTDWStorageBin - {$IFNDEF FPC}, SqlTimSt{$ENDIF}; + uRESTDWTools, uRESTDWStorageBin + {$IFNDEF FPC}, SqlTimSt{$ENDIF}, + uRESTDWBasicTypes; Const GuidSize = 38; @@ -1172,9 +1115,10 @@ TMemBookmarkInfo = record Result := Size; vDWFieldType := FieldTypeToDWFieldType(FieldType); //Gledston - Alterei a partir deste ponto Case vDWFieldType of - {$IFNDEF FPC} - dwftString : Inc (Result, Size); - {$ENDIF} + dwftString : Begin +// Inc(Result, Size); //2 Bytes de Boolean + Exit; + End; dwftSmallint : Result := SizeOf(Smallint); dwftInteger : Result := SizeOf(Integer); dwftWord : Result := SizeOf(Word); @@ -1198,13 +1142,13 @@ TMemBookmarkInfo = record Result := {$IFDEF FPC}SizeOf(Double);{$ELSE}SizeOf(TSQLTimeStamp);{$ENDIF} End; dwftAutoInc : Result := SizeOf(Longint); - dwftLargeint : Result := {$IFDEF FPC}8{$ELSE}{$IF CompilerVersion <= 22}8{$ELSE}64{$IFEND}{$ENDIF}; //Field Size é 64 Bits + dwftLargeint : Result := SizeOf(Longint); //{$IFDEF FPC}8{$ELSE}{$IF CompilerVersion <= 22}8{$ELSE}64{$IFEND}{$ENDIF}; //Field Size é 64 Bits dwftBCD, //Result := SizeOf(TBcd); dwftFMTBCD : Result := SizeOf(Currency); dwftTimeStampOffset : Begin - Inc(Result,SizeOf(Double)); - Inc(Result,SizeOf(Byte)); - Inc(Result,SizeOf(Byte)); + Inc(Result, SizeOf(Double)); + Inc(Result, SizeOf(Byte)); + Inc(Result, SizeOf(Byte)); End; {$IFDEF COMPILER10_UP} dwftOraTimestamp : Result := SizeOf(TSQLTimeStamp); @@ -1218,11 +1162,21 @@ TMemBookmarkInfo = record {$IFEND} {$ENDIF} {$IFNDEF FPC} - dwftExtended : Result := SizeOf(DWLongDouble); + dwftExtended : Begin + Result := SizeOf(DWLongDouble); + If Result < Size Then + Begin + Result := Size; + Exit; + End; + End; {$ENDIF} dwftADT : Result := 0; dwftFixedChar : Inc(Result); - dwftWideString : Result := Result * SizeOf(WideChar); + dwftWideString : Begin + Result := Result * SizeOf(WideChar); + Exit; + End; dwftVariant : Result := SizeOf(Variant); dwftGuid : Result := GuidSize; dwftWideMemo, @@ -1256,7 +1210,12 @@ TMemBookmarkInfo = record Procedure CalcDataSize(Field: TField; Var DataSize: Integer);Overload; Begin If Field.datatype in ftSupported - ftBlobTypes then - Inc(DataSize, CalcFieldLen(Field.datatype, Field.Size)); + Begin + If Field is TRESTDWNumericField Then + Inc(DataSize, CalcFieldLen(Field.datatype, TRESTDWNumericField(Field).Size)) + Else + Inc(DataSize, CalcFieldLen(Field.datatype, Field.Size)); + End; If Field.datatype in ftBlobTypes then Inc(DataSize, CalcFieldLen(Field.datatype, Field.Size)); End; @@ -1305,77 +1264,116 @@ TMemBookmarkInfo = record DatabaseErrorFmt(Msg, Args); End; -// === { TRESTDWMTMemoryRecord } ==================================================== -Constructor TRESTDWMTMemoryRecord.Create(MemoryData: TRESTDWMemTable); +{$IFNDEF FPC} +{$IF CompilerVersion > 24} +Function TRESTDWNumericField.GetAsExtended: Extended; +Var + x : DWLongDouble; + pData : TRESTDWMTValueBuffer; Begin - FIsNull := True; - FIndex := -1; - CreateEx(MemoryData, True); + {$IFNDEF FPC} + {$IF Defined(HAS_FMX)} + SetLength(pData, SizeOf(Extended)); + If not GetData(pData, True) then + Result := NaN + Else + Result := TBitConverter.InTo(pData); + {$ELSE} + //TODO Internal + x := 0; + If TRESTDWMemtable(Dataset).RecNo > 0 Then + Begin + SetLength(pData, SizeOf(x) +1); + If Not TRESTDWMemtable(Dataset).InternalGetFieldData(Self, pData, Length(pData)) then + Result := NaN + Else + Begin + Move(pData[0], Pointer(@x)^, SizeOf(x)); + Result := x; + End; + SetLength(pData, 0); + End; + {$IFEND} + {$ELSE} + If not GetData(@Result, True) then + Result := NaN; + {$ENDIF} End; -Constructor TRESTDWMTMemoryRecord.CreateEx(MemoryData: TRESTDWMemTable; UpdateParent: Boolean); +Function TRESTDWNumericField.GetAsFloat : Double; Begin - Inherited Create; - SetMemoryData(MemoryData, UpdateParent); + Result := GetAsExtended; +// Result := _RealSupportManager._VarFromReal(GetAsExtended); End; -Destructor TRESTDWMTMemoryRecord.Destroy; +Procedure TRESTDWNumericField.SetAsExtended(Const AValue : Extended); +Var + pData : TRESTDWMTValueBuffer; + x : DWLongDouble; Begin - SetMemoryData(Nil, False); - Finalize(FBlobs); - SetLength(FBlobs, 0); - Inherited Destroy; + {$IFNDEF FPC} + {$IF Defined(HAS_FMX)} + {$IF Defined(HAS_UTF8)} + SetData(TValueBuffer(@AValue), True); + {$ELSE} + SetData(@AValue, True); + {$IFEND} + {$ELSE} + SetLength(pData, SizeOf(x)); + x := aValue; + Move(Pointer(@x)^, pData[0], SizeOf(x)); + TRESTDWMemtable(Dataset).InternalSetFieldData(Self, pData, TRESTDWMTValueBuffer(Pointer(@pData)^)); +// SetData(TValueBuffer(@AValue), True); + {$IFEND} + {$ELSE} + SetData(@AValue, True); + {$ENDIF} End; -{$IFNDEF FPC} {$IFDEF SUPPORTS_CLASS_HELPERS} -{$IFNDEF COMPILER10_UP} -Function TExtendedFieldHelper.GetAsExtendedHelper: Extended; +Function TStringFieldHelper.GetAsAnsiString : AnsiString; +Var + Data : TValueBuffer; Begin - If Self Is TExtendedField Then - Result := TExtendedField(Self).GetAsExtended - Else - Result := Self.AsFloat; + SetLength(Data, Size); + If GetData(Data, True) then + Result := Copy(BytesToString(TRESTDWBytes(Data)), InitStrPos, Size); + SetLength(Data, 0); End; -Procedure TExtendedFieldHelper.SetAsExtendedHelper(Const Value: Extended); +Function TStringFieldHelper.GetAsVariant : Variant; Begin - If Self is TExtendedField then - TExtendedField(Self).SetAsExtended(Value) - Else - Self.AsFloat := Value; + Result := GetAsString; End; -{$ENDIF} -{$ENDIF} -{$IF CompilerVersion > 24} -Function TExtendedField.GetAsExtended: Extended; + +Function TStringFieldHelper.GetAsString : String; Var Data : TValueBuffer; +Begin + SetLength(Data, Size); + If GetData(Data, True) then + Result := Copy(BytesToString(TRESTDWBytes(Data)), InitStrPos, Size); + SetLength(Data, 0); +End; + +Procedure TStringFieldHelper.SetAsAnsiString(const AValue: AnsiString); Begin {$IFNDEF FPC} {$IF Defined(HAS_FMX)} - SetLength(Data, SizeOf(Extended)); - If not GetData(Data, True) then - Result := NaN - Else - Result := TBitConverter.InTo(Data); + {$IF Defined(HAS_UTF8)} + SetData(TValueBuffer(@AValue), True); + {$ELSE} + SetData(@AValue, True); + {$IFEND} {$ELSE} - If not GetData(@Result, True) then - Result := NaN; + SetData(@AValue, True); {$IFEND} {$ELSE} - If not GetData(@Result, True) then - Result := NaN; + SetData(@AValue, True); {$ENDIF} End; -Function TExtendedField.GetAsVariant : Variant; -Begin - Result := GetAsExtended; -// Result := _RealSupportManager._VarFromReal(GetAsExtended); -End; - -Procedure TExtendedField.SetAsExtended(Const AValue : Extended); +Procedure TStringFieldHelper.SetAsString(Const AValue : String); Begin {$IFNDEF FPC} {$IF Defined(HAS_FMX)} @@ -1391,8 +1389,9 @@ TMemBookmarkInfo = record SetData(@AValue, True); {$ENDIF} End; +{$ENDIF} -Procedure TExtendedField.SetAsString(Const AValue : String); +Procedure TRESTDWNumericField.SetAsString(Const AValue : String); Var x : Extended; Begin @@ -1405,36 +1404,188 @@ TMemBookmarkInfo = record End; End; -Procedure TExtendedField.SetVarValue(Const AValue : Variant); +{$ELSE} +Function TRESTDWNumericField.GetAsVariant : Variant; +Begin + Result := Extended(Value);//_RealSupportManager._VarFromReal(Value); +End; +{$IFEND} +{$ENDIF} + +Function TRESTDWNumericField.GetAsVariant : Variant; +Begin + Result := {$IFDEF FPC}GetAsFloat{$ELSE}GetAsExtended{$ENDIF}; +End; + +Procedure TRESTDWNumericField.SetVarValue(Const AValue : Variant); +Begin + SetAsExtended(AValue); +End; + +Procedure TRESTDWNumericField.SetAsFloat (AValue: Double); +Begin + SetAsExtended(AValue); +End; + +Constructor TRESTDWNumericField.Create(AOwner: TComponent); +Begin + Inherited; + {$IFNDEF FPC} + SetDataType(ftExtended); + {$ELSE} + SetDataType(ftFMTBcd); + {$ENDIF} + vSize := 19; + vPrecision := 8; +End; + +Function TStringfieldRESTDW.GetAsAnsiString : AnsiString; +Var + Data : TValueBuffer; +Begin + {$IFNDEF FPC} + SetLength(Data, Size); + If GetData(Data, True) then + Result := BytesToString(TRESTDWBytes(Data)); + SetLength(Data, 0); + {$ELSE} + Result := GetAsString; + {$ENDIF} +End; + +Function TStringfieldRESTDW.GetAsVariant : Variant; +Begin + Result := GetAsString; +End; + +{$IFNDEF FPC} + {$IFNDEF NEXTGEN} + Function TStringfieldRESTDW.GetValue(var aValue: AnsiString): Boolean; + {$ELSE} + Function TStringfieldRESTDW.GetValue(var aValue: String): Boolean; + {$ENDIF !NEXTGEN} +{$ELSE} +Function TStringfieldRESTDW.GetValue(var aValue: String): Boolean; +{$ENDIF} +Begin + Result := False; + Try + aValue := GetAsString; + Result := True; + Except + + End; +End; + +Function TStringfieldRESTDW.CopyToNull(aValue : TRESTDWBytes) : TRESTDWBytes; +Var + I : Integer; +Begin + SetLength(Result, 0); + For I := 0 To Length(aValue) - 1 Do + Begin + If aValue[I] <> 0 Then + Begin + SetLength(Result, Length(Result) +1); + Result[I] := aValue[I]; + End + Else + Break; + End; +End; + +Function TStringfieldRESTDW.CopyToNull(aValue : String) : String; +Var + I : Integer; +Begin + Result := ''; + For I := InitStrPos To Length(aValue) - FinalStrPos Do + Begin + If aValue[I] <> #0 Then + Result := Result + aValue[I]; + End; +End; + +Function TStringfieldRESTDW.GetAsString : String; +Var + aData, + bData : TRESTDWBytes; +Begin + Try + SetLength(aData, Size); + If TRESTDWMemtable(Dataset).InternalGetFieldData(Self, TRESTDWMTValueBuffer(aData), Size) then + Begin + bData := CopyToNull(aData); + Result := BytesToString(bData); + SetLength(bData, 0); + End; + SetLength(aData, 0); + Finally + End; +End; + +Procedure TStringfieldRESTDW.SetAsAnsiString(const AValue: AnsiString); +Var + pData : TRESTDWBytes; + X : String; + I : Integer; +Begin + {$IFNDEF FPC} + {$IF Defined(HAS_FMX)} + {$IF Defined(HAS_UTF8)} + SetData(TValueBuffer(@AValue), True); + {$ELSE} + SetData(@AValue, True); + {$IFEND} + {$ELSE} + SetData(@AValue, True); + {$IFEND} + {$ELSE} + Inherited SetAsString(AValue); +{ + SetLength(pData, Size); + x := aValue; + I := Length(X); + Move(Pointer(@x)^, pData[0], I); + TRESTDWMemtable(Dataset).InternalSetFieldData(Self, @pData, TRESTDWMTValueBuffer(Pointer(@pData)^)); +} + {$ENDIF} +End; + +Constructor TStringfieldRESTDW.Create(AOwner: TComponent); Begin - SetAsExtended(AValue); -End; -{$ELSE} -Function TExtendedField.GetAsVariant : Variant; -Begin - Result := Extended(Value);//_RealSupportManager._VarFromReal(Value); + Inherited; + SetDataType(ftString); End; -{$IFEND} -{$ENDIF} -Constructor TExtendedField.Create(AOwner: TComponent); + +Procedure TStringfieldRESTDW.SetAsString(Const AValue : String); +Var + ValueBuffer : TRESTDWBytes; Begin - Inherited; {$IFNDEF FPC} - SetDataType(ftExtended); + {$IF Defined(HAS_FMX)} + {$IF Defined(HAS_UTF8)} + SetData(TValueBuffer(@AValue), True); + {$ELSE} + SetData(@AValue, True); + {$IFEND} + {$ELSE} + ValueBuffer := StringToBytes(AValue); + SetData(ValueBuffer, True); + SetLength(ValueBuffer, 0); + {$IFEND} {$ELSE} - SetDataType(ftFMTBcd); + SetAsAnsiString(AValue); {$ENDIF} - vSize := 19; - vPrecision := 8; End; {$IFDEF FPC} -Procedure TExtendedField.SetAsExtended(Const AValue : Extended); +Procedure TRESTDWNumericField.SetAsExtended(Const AValue : Extended); Begin SetData(@AValue, True); End; -Procedure TExtendedField.SetAsString(Const AValue : String); +Procedure TRESTDWNumericField.SetAsString(Const AValue : String); Var x : Extended; Begin @@ -1448,12 +1599,15 @@ TMemBookmarkInfo = record End; {$ENDIF} -Function TExtendedField.GetAsString: string; -Var - x : Extended; -{$IFDEF COMPILER17_UP} - Data: TValueBuffer; +{$IFDEF FPC} +Function TRESTDWNumericField.GetAsFloat : Double; +Begin + If not GetData(@Result, True) then + Result := NaN; +End; {$ENDIF} + +Function TRESTDWNumericField.GetAsString: string; Function BuildMask(Value : Double; aPrecision : Integer) : String; Var @@ -1467,21 +1621,16 @@ TMemBookmarkInfo = record vString := vString + '0'; Result := FormatFloat(vString, Value); End; +Var + x : DWLongDouble; Begin - {$IFNDEF COMPILER17_UP} - If GetData(@x, True) then - Begin - {$ELSE} - SetLength(Data, SizeOf(Extended)); - If GetData(Data, True) then +{$IFDEF FPC} + x := GetAsFloat; +{$ELSE} + x := GetAsExtended; +{$ENDIF} + If Not isNull then Begin - {$IF CompilerVersion > 28} - x := TBitConverter.InTo(Data); - {$ELSE} - x := TBitConverter.ToExtended(Data); - {$IFEND} -// x := TBitConverter.InTo(Data); - {$ENDIF} If (Length(FloatToStr(x)) > vSize) Then Result := FloatToStrF(x, ffGeneral, vSize, vPrecision) Else If (Length(FloatToStr(Frac(x))) > vPrecision) Then @@ -1497,7 +1646,7 @@ TMemBookmarkInfo = record {$IFNDEF FPC} {$IF CompilerVersion < 25} -Procedure TSQLTimeStampOffsetField.GetText(var Text: string; +Procedure TRESTDWSQLTimeStampOffsetField.GetText(var Text: string; DisplayText: Boolean); Var S : String; @@ -1518,10 +1667,19 @@ TMemBookmarkInfo = record {$ENDIF} {$IFNDEF FPC} +Constructor TRESTDWSQLTimeStampOffsetField.Create(AOwner: TComponent); +Begin + Inherited; + {$IFNDEF FPC} + SetDataType(ftTimeStampOffset); + {$ELSE} + SetDataType(ftTimeStamp); + {$ENDIF} +End; {$IF CompilerVersion < 25} -Procedure TSQLTimeStampOffsetField.SetAsString(Const Value: string); +Procedure TRESTDWSQLTimeStampOffsetField.SetAsString(Const Value: string); {$ELSE} -Procedure TSQLTimeStampOffsetField.SetAsString(Const AValue: string); +Procedure TRESTDWSQLTimeStampOffsetField.SetAsString(Const AValue: string); {$IFEND} Var S : String; @@ -1540,66 +1698,7 @@ TMemBookmarkInfo = record End; {$ENDIF} -Function TRESTDWMTMemoryRecord.GetIndex: Integer; -Begin - // If FMemoryData <> nil then - // Result := FMemoryData.FRecords.IndexOf(Self) - // Else - Result := FIndex; -End; - -Procedure TRESTDWMTMemoryRecord.SetMemoryData(Value: TRESTDWMemTable; UpdateParent: Boolean); -var - I: Integer; - DataSize: Integer; -Begin - If FMemoryData <> Value then - Begin - If FMemoryData <> nil then - Begin - If FMemoryData.BlobFieldCount > 0 Then - Finalize(FBlobs[0], FMemoryData.BlobFieldCount); - FMemoryData.FRecords.Remove(Self); - SetLength(FBlobs, 0); - {$IFDEF FPC} - ReallocMem(FData, 0); - {$ELSE} - FreeMem(FData, SizeOf(FData)); -// ReallocMem(FData, 0); - {$ENDIF} - FMemoryData := Nil; - End; - If Value <> nil then - Begin - If UpdateParent then - Begin - Value.FRecords.Add(Self); - Inc(Value.FLastID); - FID := Value.FLastID; - End; - FMemoryData := Value; - If Value.BlobFieldCount > 0 then - Begin - SetLength(FBlobs, 0); - SetLength(FBlobs, Value.BlobFieldCount); - End; - DataSize := 0; - For I := 0 to Value.Fields.Count - 1 do - CalcDataSize(Value.Fields[I], DataSize); - ReallocMem(FData, DataSize); - End; - End; -End; -Procedure TRESTDWMTMemoryRecord.SetIndex(Value: Integer); -var - CurIndex: Integer; -Begin - CurIndex := GetIndex; - If (CurIndex >= 0) and (CurIndex <> Value) then - FMemoryData.FRecords.Move(CurIndex, Value); - FIndex := Value; -End; // === { TRESTDWMemTable } ====================================================== // Function TRESTDWMemTable.FieldByName(const FieldName: string): TField; // Begin @@ -1614,6 +1713,7 @@ TMemBookmarkInfo = record constructor TRESTDWMemTable.Create(AOwner: TComponent); Begin Inherited Create(AOwner); + SetLength(FFieldAttrs, 0); FRecordPos := -1; FRecordFilterPos := -1; aFilterRecs := FRecordFilterPos; @@ -1638,14 +1738,13 @@ constructor TRESTDWMemTable.Create(AOwner: TComponent); FFetch := False; End; -destructor TRESTDWMemTable.Destroy; +Destructor TRESTDWMemTable.Destroy; var I : Integer; PFValues : TPVariant; Begin If Active then Close; - Inherited Destroy; If FFilterParser <> nil then FreeAndNil(FFilterParser); {$IFNDEF FPC} @@ -1675,6 +1774,7 @@ destructor TRESTDWMemTable.Destroy; //FBlobOfs := 0; If Assigned(FDataSet) Then FreeAndNil(FDataSet); + Inherited Destroy; End; function TRESTDWMemTable.CompareFields(Data1, Data2: Pointer; @@ -1795,7 +1895,7 @@ procedure TRESTDWMemTable.SetCapacity(Value: Integer); function TRESTDWMemTable.AddRecord: TRESTDWMTMemoryRecord; Begin - Result := TRESTDWMTMemoryRecord.Create(Self); + Result := TRESTDWMTMemoryRecord.Create(TRESTDWMemTableAE(Self)); End; function TRESTDWMemTable.FindRecordID(ID: Integer): TRESTDWMTMemoryRecord; @@ -1820,8 +1920,7 @@ function TRESTDWMemTable.InsertRecord(Index: Integer): TRESTDWMTMemoryRecord; function TRESTDWMemTable.GetMemoryRecord(Index: Integer): TRESTDWMTMemoryRecord; Begin - Result := TRESTDWMTMemoryRecord(FRecords[Index]); -// Result := TRESTDWMTMemoryRecord(TRecordList(Pointer(@FRecords)^)[Index]); + Result := TRESTDWMTMemoryRecord(FRecords[Index]); End; Procedure TRESTDWMemTable.CalcOffSets; @@ -1918,14 +2017,14 @@ function TRESTDWMemTable.GetMemoryRecord(Index: Integer): TRESTDWMTMemoryRecord; VFDef.Required := Fields[I].Required; Case Integer(Fields[I].DataType) of dwftFloat, - dwftCurrency : VFDef.Precision := TExtendedField(Fields[I]).Precision; + dwftCurrency : VFDef.Precision := TRESTDWNumericField(Fields[I]).Precision; dwftBCD, dwftFMTBcd : Begin {$IFNDEF FPC} VFDef.Size := 0; VFDef.Precision := 0; {$ELSE} - VFDef.Precision := TExtendedField(Fields[I]).Precision; + VFDef.Precision := TRESTDWNumericField(Fields[I]).Precision; {$ENDIF} End; { @@ -2009,13 +2108,7 @@ function TRESTDWMemTable.FindFieldData(Buffer: Pointer; Field: TField): Pointer; {$ENDIF} End Else - Begin - {$IFDEF FPC} - Result := Pointer(PRESTDWMTMemBuffer(Buffer + FOffsets[Index])); - {$ELSE} - Result := Pointer(PRESTDWMTMemBuffer(Buffer) + FOffsets[Index]); - {$ENDIF} - End; + Result := Pointer(PRESTDWMTMemBuffer(Buffer) + FOffsets[Index]); End; End; @@ -2033,8 +2126,8 @@ procedure TRESTDWMemTable.InitBufferPointers(GetProps: Boolean); If GetProps then FRecordSize := CalcRecordSize; FBookmarkOfs := FRecordSize + sizeof(int64); //o int64 para adicionar o size do blob. o calcfieldssize vem zero //CalcFieldsSize; - FBlobOfs := FBookmarkOfs + SizeOf(TMemBookmarkInfo); - FRecBufSize := FBlobOfs + BlobFieldCount * SizeOf(Pointer); + FBlobOfs := FBookmarkOfs + SizeOf(TMemBookmarkInfo); + FRecBufSize := FBlobOfs + BlobFieldCount * SizeOf(Pointer); End; procedure TRESTDWMemTable.ClearRecords; @@ -2075,12 +2168,14 @@ procedure TRESTDWMemTable.FreeRecordBuffer(var Buffer: TRecordBuffer); FreeMem(Buffer); {$ELSE} {$IFDEF DELPHI10_0UP} - FreeMem(Buffer, 0); +// FreeMem(Buffer, 0); + ReallocMem(Buffer, 0); {$ELSE} StrDispose(Buffer); {$ENDIF DELPHI10_0UP} {$ENDIF} - Buffer := nil; + Inherited FreeRecordBuffer(Buffer); + Buffer := Nil; End; procedure TRESTDWMemTable.ClearCalcFields(Buffer: TRecordBuffer); @@ -2216,9 +2311,10 @@ procedure TRESTDWMemTable.InitRecord(Buffer: TRecordBuffer); function TRESTDWMemTable.GetCurrentRecord(Buffer: TRecordBuffer): Boolean; Begin Result := False; - If not IsEmpty and (GetBookmarkFlag(ActiveBuffer) = bfCurrent) then + If not IsEmpty and (GetBookmarkFlag(ActiveBuffer) = bfCurrent) Then Begin UpdateCursorPos; + New(Buffer); If (FRecordPos >= 0) and (FRecordPos < RecordCount) then Begin Move(Records[FRecordPos].Data^, @@ -2404,21 +2500,23 @@ function TRESTDWMemTable.GetRecordSize: Word; Result := FRecordSize; End; -function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer - ): Boolean; +Function TRESTDWMemTable.GetActiveRecBuf(Var RecBuf : PRESTDWMTMemBuffer): Boolean; Begin case State of dsBrowse: If IsEmpty then RecBuf := nil Else - RecBuf := PRESTDWMTMemBuffer(ActiveBuffer); + RecBuf := PRESTDWMTMemBuffer(ActiveBuffer); dsEdit, dsInsert: RecBuf := PRESTDWMTMemBuffer(ActiveBuffer); dsCalcFields: RecBuf := PRESTDWMTMemBuffer(TempBuffer);//PRESTDWMTMemBuffer(ActiveBuffer);//PRESTDWMTMemBuffer(CalcBuffer); dsFilter: RecBuf := PRESTDWMTMemBuffer(TempBuffer); + {$IFDEF FPC} + dsBlockRead : RecBuf := PRESTDWMTMemBuffer(ActiveBuffer); + {$ENDIF} Else RecBuf := nil; End; @@ -2426,7 +2524,8 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer End; Function TRESTDWMemTable.InternalGetFieldData(Field : TField; - Var Buffer : TRESTDWMTValueBuffer) : Boolean; + Var Buffer : TRESTDWMTValueBuffer; + cSize : Integer = 0) : Boolean; Var aNullData : Boolean; RecBuf : PRESTDWMTMemBuffer; @@ -2449,6 +2548,19 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer vDateTimeInt : DWInteger; vDateTimeRec : TDateTimeRec; vDWFieldType : Byte; + Function CountToNull(Const aBytes : TRESTDWBytes) : Integer; + Var + I : Integer; + Begin + Result := 0; + For I := 0 To Length(aBytes) -1 Do + Begin + If aBytes[I] <> 0 Then + Inc(Result) + Else + Break; + End; + End; Begin Result := False; If Not GetActiveRecBuf(RecBuf) Then @@ -2463,7 +2575,10 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer Result := (Field is TBlobField); If Not Result Then Result := Data <> Nil; - cLen := GetCalcFieldLen(Field.datatype, Field.Size); + If (cSize > 0) Then + cLen := cSize + Else + cLen := GetCalcFieldLen(Field.datatype, Field.Size); {$IFNDEF FPC} {$IF CompilerVersion >= 22} If Field.datatype = ftSingle Then @@ -2484,19 +2599,37 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer Move(Data^, aDataBytes[0], cLen); Result := Result and (not (Char(aDataBytes[0]) = #0)); aNullData := Not Result; + {$IFNDEF FPC} + If Not(State in [dsEdit, dsInsert]) Then + Begin + If aNullData Then + Begin + If Length(TRESTDWBytes(Buffer)) > 0 Then + Begin + If (Not (Char(TRESTDWBytes(Buffer)[0]) = #0)) Then + Begin + Move(TRESTDWBytes(Buffer)[0], aDataBytes[0], cLen); + Result := (not (Char(TRESTDWBytes(Buffer)[0]) = #0)); + aNullData := Not Result; + End; + End; + End; + End; + {$ENDIF} End; ftBoolean : Begin {$IFNDEF FPC} {$IF CompilerVersion > 21} If Not (Field.datatype in [ftByte, ftShortint]) then Begin - Result := Not(Result); + Result := False; If Not(Result) then Begin + cLen := SizeOf(Boolean); aNullData := False; SetLength(aDataBytes, cLen); Move(Data^, aDataBytes[0], cLen); - Move(aDataBytes[0], Pointer(@aNullData)^, SizeOf(Boolean)); +// Move(aDataBytes[0], Pointer(@aNullData)^, SizeOf(Boolean)); Result := Not(aNullData); End; End @@ -2537,10 +2670,18 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer ftDate, ftTime, ftDateTime : Begin - //TODO XyberX O dado DateTime deve ser convertido em DateTimeREC no ponteiro - SetLength(aDataBytes, 1); - Move(Data^, aDataBytes[0], Length(aDataBytes)); - aNullData := IsNullData(aDataBytes); + //TODO XyberX O dado DateTime deve ser convertido em DateTimeREC no ponteiro TODO Internal + aNullData := False; + SetLength(aDataBytes, SizeOf(Boolean)); + Move(Data^, aDataBytes[0], SizeOf(Boolean)); +// Move(aDataBytes[0], aNullData, 1); + If State in [dsEdit, dsInsert] Then + aNullData := aDataBytes[0] > 1; + If Not aNullData Then + Begin + aNullData := IsNullData(aDataBytes); + Result := Not aNullData; + End; If Not aNullData then Begin SetLength(aDataBytes, cLen); @@ -2625,11 +2766,15 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer End Else Begin - cLen := GetCalcFieldLen(Field.datatype, Field.Size); + If (cSize > 0) Then + cLen := cSize + Else If cLen = 0 Then + cLen := GetCalcFieldLen(Field.datatype, Field.Size); {$IFNDEF FPC} {$IF CompilerVersion <= 22} If Result Then - Result := ((Not(aNullData)) and Not(VarIsNull(Data^))); + If Not (Field.datatype in [ftBoolean]) then + Result := ((Not(aNullData)) and Not(VarIsNull(Data^))); If (Field.datatype In [ftLargeint, ftInteger, ftSmallint, ftFloat, ftFMTBCD, ftBCD, ftCurrency, ftDate, ftTime]) Then Result := PRESTDWBytes(@Data)^[1] > 0; @@ -2667,6 +2812,13 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer End; End; End + Else If Field.datatype = ftExtended Then + Begin + If Length(TRESTDWBytes(Buffer)) = 0 Then + SetLength(TRESTDWBytes(Pointer(@Buffer)^), SizeOf(DwLongDouble)); + Move(aDataBytes[1], vLongDouble, SizeOf(vLongDouble)); + Move(vLongDouble, Pointer(Buffer)^, cLen-1); + End Else Begin If Length(TRESTDWBytes(Buffer)) = 0 Then @@ -2677,7 +2829,12 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer Move(PRESTDWBytes(@Data)^[0], Pointer(Buffer)^, cLen); End; {$ELSE} - Result := ((Not(aNullData)) and Not(VarIsNull(Data^))); + If Not (Field.datatype in [ftBoolean{$IFNDEF FPC} + {$IF CompilerVersion > 21} + , ftByte, ftShortint + {$IFEND} + {$ENDIF}]) then + Result := ((Not(aNullData)) and Not(VarIsNull(Data^))); If (Field.datatype In [ftAutoInc, ftLargeint, ftInteger, ftSmallint, ftFloat, ftSingle, ftFMTBCD, ftBCD, ftCurrency]) Then Begin @@ -2709,7 +2866,7 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer End; Else Begin - vTimeStamp := DateTimeToSQLTimeStamp(vDouble); + vTimeStamp := TSQLTimeStamp(DateTimeToSQLTimeStamp(vDouble)); cLen := SizeOf(vTimeStamp); Move(Pointer(@vTimeStamp)^, Pointer(Buffer)^, cLen); End; @@ -2718,13 +2875,28 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer Else If Field.datatype = ftExtended Then Begin If Length(TRESTDWBytes(Buffer)) = 0 Then - SetLength(TRESTDWBytes(Buffer), cLen); - Move(aDataBytes[1], Pointer(Buffer)^, SizeOf(DWLongDouble)); + SetLength(TRESTDWBytes(Pointer(@Buffer)^), SizeOf(vLongDouble)); + Move(aDataBytes[1], vLongDouble, SizeOf(vLongDouble)); + Move(Pointer(@vLongDouble)^, Pointer(Buffer)^, SizeOf(vLongDouble)); End Else Begin +// If Field.datatype in [ftString, ftFixedChar +// {$IF DEFINED(FPC) OR DEFINED(DELPHI10_0UP)} +// , ftFixedWideChar , ftWideString{$IFEND}] Then +// Begin +// cLen := CountToNull(aDataBytes); +// If Length(TRESTDWBytes(Buffer)) > cLen Then +// Begin +// SetLength(TRESTDWBytes(Buffer), 0); +// SetLength(TRESTDWBytes(Buffer), cLen); +// End; +// End +// Else +// Begin If Length(TRESTDWBytes(Buffer)) = 0 Then SetLength(TRESTDWBytes(Buffer), cLen); +// End; If Field.datatype = ftGuid Then Move(PRESTDWBytes(@Data)^[0], Pointer(Buffer)^, cLen -1) Else @@ -2734,19 +2906,25 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer {$ELSE} If Length(TRESTDWBytes(Buffer)) = 0 Then SetLength(TRESTDWBytes(Buffer), cLen); - Result := ((Not(aNullData)) and Not(VarIsNull(Data^))); + If Not (Field.datatype in [ftBoolean]) then + Result := ((Not(aNullData)) and Not(VarIsNull(Data^))); If (Field.datatype In [ftAutoInc, ftLargeint, ftInteger, ftSmallint, ftFloat, ftFMTBCD, ftBCD, ftCurrency]) Then Begin vDataType := FieldTypeToDWFieldType(Field.DataType); - If Length(TRESTDWBytes(Buffer)) = 0 Then - SetLength(TRESTDWBytes(Buffer), cLen); If vDataType = dwftBCD Then Begin Move(aDataBytes[1], Pointer(@vLongDouble)^, SizeOf(vLongDouble)); cLen := SizeOf(vLongDouble); Move(Pointer(@vLongDouble)^, Pointer(Buffer)^, cLen); End + Else If vDataType = 45 Then + Begin + If Length(TRESTDWBytes(Buffer)) = 0 Then + SetLength(TRESTDWBytes(Pointer(@Buffer)^), SizeOf(DwLongDouble)); + Move(aDataBytes[1], vLongDouble, SizeOf(vLongDouble)); + Move(vLongDouble, Pointer(Buffer)^, cLen-1); + End Else Move(aDataBytes[1], Pointer(Buffer)^, cLen-1); End @@ -2757,6 +2935,11 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer SetLength(TRESTDWBytes(Buffer), cLen); cLen := SizeOf(TDateTimeRec); Move(aDataBytes[1], Pointer(@vDouble)^, SizeOf(DWDouble)); + vDataType := FieldTypeToDWFieldType(Field.DataType); + //Em Lazarus é assim + Move(Pointer(@vDouble)^, Pointer(Buffer)^, cLen); + { + //Em Delphi eh diferente Case Field.datatype Of ftTime : Begin vDateTimeRec.Time := DateTimeToTimeStamp(vDouble).Time; @@ -2777,6 +2960,14 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer Move(Pointer(@vTimeStamp)^, Pointer(Buffer)^, cLen); End; End; + } + End + Else If vDataType = dwftExtended Then + Begin + If Length(TRESTDWBytes(Buffer)) = 0 Then + SetLength(TRESTDWBytes(Pointer(@Buffer)^), SizeOf(DwLongDouble)); + Move(aDataBytes[1], vLongDouble, SizeOf(vLongDouble)); + Move(vLongDouble, Pointer(Buffer)^, cLen-1); End Else Begin @@ -2792,7 +2983,12 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer End; End Else - Result := False; + Begin + If (Length(TRESTDWBytes(Buffer)) = 0) And + (cLen > 0) Then + SetLength(TRESTDWBytes(Buffer), cLen); + Result := False; + End; End; End Else @@ -2871,7 +3067,7 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer FreeMem(aDummyVar); End; {$ELSE} - Result := InternalGetFieldData(Field, TRESTDWMTValueBuffer(Buffer)); + Result := InternalGetFieldData(Field, TRESTDWMTValueBuffer(Buffer), Field.Size); {$IFEND} {$ELSE} Result := InternalGetFieldData(Field, TRESTDWMTValueBuffer(Buffer)); @@ -2945,9 +3141,11 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer If I >= 0 Then Begin Case GetFieldDef(I) of - dwftExtended : Result := TExtendedField; + dwftStream : Result := TStreamField; + dwftExtended : Result := TRESTDWNumericField; + dwftString : Result := TStringFieldRESTDW; {$IFNDEF FPC} - dwftTimeStampOffset : Result := TSQLTimeStampOffsetField; + dwftTimeStampOffset : Result := TRESTDWSQLTimeStampOffsetField; {$ENDIF} // dwftColor : Result := TColorField; End; @@ -2969,27 +3167,41 @@ function TRESTDWMemTable.GetActiveRecBuf(var RecBuf: PRESTDWMTMemBuffer Buffer : Pointer {$ENDIF}): Boolean; Var - aPointer: Pointer; + vResult : Boolean; + aDataSize : Integer; + aPointer : Pointer; Begin + aDataSize := CalcFieldLen(Field.datatype, Field.Size); + {$IFNDEF FPC} +// SetLength(Buffer, aDataSize); +//// {$ELSE} + If Length(Buffer) = 0 Then + SetLength(TRESTDWBytes(Buffer), aDataSize); + {$ENDIF} aPointer := @Buffer; - Result := InternalGetFieldData(Field, TRESTDWMTValueBuffer(aPointer^)); + vResult := False; + Try + vResult := InternalGetFieldData(Field, TRESTDWMTValueBuffer(aPointer^)); + Finally + Result := vResult; + End; End; procedure TRESTDWMemTable.InternalSetFieldData(Field : TField; Buffer : Pointer; Const ValidateBuffer : TRESTDWMTValueBuffer); Var - PActualRecord : PRESTDWMTMemBuffer; - aState : TDataSetState; - Data : {$IFDEF FPC}PAnsiChar{$ELSE}PByte{$ENDIF}; - aBytes : TRESTDWBytes; - pBytes : PRESTDWBytes; - VarData : Variant; + PActualRecord : PRESTDWMTMemBuffer; + aState : TDataSetState; + Data : {$IFDEF FPC}PAnsiChar{$ELSE}PByte{$ENDIF}; + aBytes : TRESTDWBytes; + pBytes : PRESTDWBytes; + VarData : Variant; aResult, vBoolean, - IsData : Boolean; + IsData : Boolean; aIndex, - cLen : Integer; + cLen : Integer; vDateTimeInt : DWInteger; vDateFloat : DWFloat; vDateLongDouble : DWLongDouble; @@ -3047,7 +3259,7 @@ procedure TRESTDWMemTable.InternalSetFieldData(Field : TField; End Else Begin - If Length(TRESTDWBytes(Buffer)) = 0 Then + If Length(TRESTDWBytes(ValidateBuffer)) = 0 Then Begin If Field.datatype in [ftWord, ftAutoInc, {$IFNDEF FPC} @@ -3086,8 +3298,8 @@ procedure TRESTDWMemTable.InternalSetFieldData(Field : TField; {$ELSE} FillChar(Data^, cLen, 0); {$ENDIF} -// cLen := Length(String(buffer^)); - Move(buffer^, data^, cLen); + If Length(TRESTDWBytes(ValidateBuffer)) > 0 Then + Move(TRESTDWBytes(ValidateBuffer)[0], data^, cLen); End; dwftWord, dwftAutoInc, @@ -3215,6 +3427,21 @@ procedure TRESTDWMemTable.InternalSetFieldData(Field : TField; DataEvent(deFieldChange, NativeInt(Field)); End; +procedure TRESTDWMemTable.GetFieldList(List: TList; const FieldNames: string); +var + Pos: Integer; + Field: TField; + Len: Integer; +begin + Len := FieldNames.Length; + Pos := 1; + while Pos <= Len do + begin + Field := FieldByName(ExtractFieldName(FieldNames, Pos)); + if Assigned(List) then List.Add(Field); + end; +end; + function TRESTDWMemTable.GetBlob(aRecNo, Index: Integer): PMemBlobData; Begin Result := Nil; @@ -3231,7 +3458,7 @@ function TRESTDWMemTable.GetBlob(aRecNo, Index: Integer): PMemBlobData; If Length(fblobs) > Index Then Result := @fblobs[Index]; End - Else + Else If Length(fblobs) > Index Then Result := @fblobs[Index]; End; @@ -3246,32 +3473,32 @@ function TRESTDWMemTable.GetBlob(aRecNo, Index: Integer): PMemBlobData; InternalSetFieldData(Field, {$IFDEF RTL240_UP}PByte(@Buffer){$ELSE}Buffer{$ENDIF RTL240_UP}, Buffer); {$ELSE} If Length(Buffer) > 0 Then - InternalSetFieldData(Field, {$IFDEF RTL240_UP}PByte(@Buffer[0]){$ELSE}Buffer{$ENDIF RTL240_UP},TRESTDWMTValueBuffer(Buffer)) + InternalSetFieldData(Field, {$IFDEF RTL240_UP}PByte(@Buffer[0]){$ELSE}Buffer{$ENDIF RTL240_UP}, TRESTDWMTValueBuffer(Pointer(@Buffer)^)) Else InternalSetFieldData(Field, {$IFDEF RTL240_UP}PByte(@Buffer){$ELSE}Buffer{$ENDIF RTL240_UP}, Buffer); {$IFEND} {$ELSE} If Length(TRESTDWBytes(Buffer)) > 0 Then - InternalSetFieldData(Field, {$IFDEF RTL240_UP}PByte(@Buffer[0]){$ELSE}Buffer{$ENDIF RTL240_UP}, Buffer) + InternalSetFieldData(Field, Buffer, TRESTDWMTValueBuffer(Pointer(@Buffer)^)) Else - InternalSetFieldData(Field, {$IFDEF RTL240_UP}PByte(@Buffer){$ELSE}Buffer{$ENDIF RTL240_UP}, Buffer); + InternalSetFieldData(Field, Buffer, Buffer); {$ENDIF} End; + {$IFNDEF NEXTGEN} {$IFDEF RTL240_UP} - Procedure TRESTDWMemTable.SetFieldData(Field: TField; Buffer: Pointer); var ValidateBuffer: TRESTDWMTValueBuffer; Begin - If (Buffer <> nil) and (Field.FieldNo > 0) and (Field.DataSize > 0) then + If (Buffer <> nil) and (Field.FieldNo > 0) and (Field.DataSize > 0) then Begin - SetLength(ValidateBuffer, Field.DataSize); - Move(Buffer^, ValidateBuffer[0], Field.DataSize); + SetLength(ValidateBuffer, Field.DataSize); + Move(Buffer^, ValidateBuffer[0], Length(TValueBuffer(Buffer))); //;Field.DataSize); End - Else - ValidateBuffer := nil; - InternalSetFieldData(Field, Buffer, ValidateBuffer); + Else + ValidateBuffer := nil; + InternalSetFieldData(Field, Buffer, ValidateBuffer); End; {$ENDIF RTL240_UP} {$ENDIF ~NEXTGEN} @@ -3366,8 +3593,9 @@ function TRESTDWMemTable.GetBlobData(Field: TField; Buffer: PRESTDWMTMemBuffer Result := FBlobs[Field.Offset]; End; -procedure TRESTDWMemTable.SetBlobData(Field: TField; - Buffer: PRESTDWMTMemBuffer; Value: TMemBlobData); +procedure TRESTDWMemTable.SetBlobData(Field : TField; + Buffer : PRESTDWMTMemBuffer; + Value : TMemBlobData); Begin If Buffer = PRESTDWMTMemBuffer(ActiveBuffer) then Begin @@ -3406,16 +3634,18 @@ function TRESTDWMemTable.CreateBlobStream(Field: TField; Mode: TBlobStreamMode): Result := TRESTDWMTMemBlobStream.Create(Field as TBlobField, Mode); End; -function TRESTDWMemTable.BookmarkValid(aBookmark: TBookmark): Boolean; +Function TRESTDWMemTable.BookmarkValid(aBookmark: TBookmark): Boolean; Begin - Result := (aBookmark <> nil) and FActive and - (FindRecordID({$IFDEF FPC}NativeInt(@aBookmark[0]){$ELSE}TRESTDWMTBookmarkData - ({$IFDEF RTL200_UP}Pointer(@aBookmark[0] - ){$ELSE}aBookmark{$ENDIF RTL200_UP}^){$ENDIF}) <> nil); + Result := (aBookmark <> Nil) And + (FActive) And + (FindRecordID({$IFDEF FPC}NativeInt(@aBookmark[0]) + {$ELSE}TRESTDWMTBookmarkData({$IFDEF RTL200_UP}Pointer(@aBookmark[0]) + {$ELSE}aBookmark + {$ENDIF RTL200_UP}^) + {$ENDIF}) <> Nil); End; -function TRESTDWMemTable.CompareBookmarks(aBookmark1, aBookmark2: TBookmark - ): Integer; +Function TRESTDWMemTable.CompareBookmarks(aBookmark1, aBookmark2: TBookmark): Integer; Begin If (aBookmark1 = nil) and (aBookmark2 = nil) then Result := 0 @@ -4398,7 +4628,7 @@ procedure TRESTDWMemTable.FetchAll; Begin // Release unneeded blob buffers, in order to save memory // TDataSet has own buffer of records, so do not release blobs until they can be referenced - With FDataSet Do + With TRESTDWMemtable(FDataSet) Do Begin h := Length(FBlobs); If h > 0 Then //Free in batches, starting with oldest (at beginning) @@ -4438,7 +4668,7 @@ procedure TRESTDWMemTable.FetchAll; Function TDoubleLinkedBufIndex.GetCurrentBuffer: Pointer; Begin // pointer(FLastRecBuf) + FDataset.BufferOffset; - Result := Pointer(FDataset.ActiveBuffer); //Todo XyberX + Result := Pointer(TRESTDWMemtable(FDataSet).ActiveBuffer); //Todo XyberX End; Function TDoubleLinkedBufIndex.GetCurrentRecord : TRecordBuffer; @@ -4454,7 +4684,7 @@ procedure TRESTDWMemTable.FetchAll; Function TDoubleLinkedBufIndex.GetSpareBuffer : TRecordBuffer; Begin // Pointer(FLastRecBuf) + FDataset.BufferOffset; - Result := Pointer(FDataset.ActiveBuffer); //Todo XyberX + Result := Pointer(TRESTDWMemtable(FDataSet).ActiveBuffer); //Todo XyberX End; Function TDoubleLinkedBufIndex.GetSpareRecord : TRecordBuffer; @@ -4827,7 +5057,7 @@ procedure TRESTDWMemTable.FetchAll; Var ARecord : TRecordBuffer; Begin - ARecord := FDataset.IntAllocRecordBuffer; + ARecord := TRESTDWMemtable(FDataSet).IntAllocRecordBuffer; {$IFNDEF FPC} {$IF CompilerVersion >= 20} FLastRecBuf[IndNr].next := Pointer(ARecord); @@ -5088,6 +5318,7 @@ function TRESTDWMemTable.IntAllocRecordBuffer: TRecordBuffer; I, DataSize : Integer; Begin // Note: Only the internal buffers of TDataset provide bookmark information + New(Result); DataSize := 0; For I := 0 to Fields.Count - 1 do CalcDataSize(Fields[I], DataSize); @@ -5101,9 +5332,9 @@ procedure TRESTDWMemTable.InternalCreateIndex(F : TRESTDWDataSetIndex); If Active and Not Refreshing then FetchAll; if IsUniDirectional then - B:=TUniDirectionalBufIndex.Create(self) + B := TUniDirectionalBufIndex.Create(Nil) else - B:=TDoubleLinkedBufIndex.Create(self); + B := TDoubleLinkedBufIndex.Create(Nil); F.FBufferIndex:=B; with B do begin @@ -5343,24 +5574,26 @@ procedure TRESTDWMemTable.Assign(Source: TPersistent); // Inherited; //End; -procedure TRESTDWMemTable.AssignMemoryRecord(Rec: TRESTDWMTMemoryRecord; - Buffer: PRESTDWMTMemBuffer); +procedure TRESTDWMemTable.AssignMemoryRecord(Rec : TRESTDWMTMemoryRecord; + Buffer : PRESTDWMTMemBuffer); var - I: Integer; + I : Integer; Begin - Move(Buffer^, Rec.Data^, FRecordSize); - For I := 0 to BlobFieldCount - 1 do + Move(Buffer^, Rec.Data^, FRecordSize); + For I := 0 to BlobFieldCount - 1 Do + Begin If Assigned(FBlobs[I]) Then Rec.FBlobs[I] := FBlobs[I]; + End; End; -procedure TRESTDWMemTable.SetMemoryRecordData(Buffer: PRESTDWMTMemBuffer; - Pos: Integer); +procedure TRESTDWMemTable.SetMemoryRecordData(Buffer : PRESTDWMTMemBuffer; + Pos : Integer); var Rec: TRESTDWMTMemoryRecord; Begin If State = dsFilter then - Error('Not Editing...'); + Error('Not Editing...'); Rec := Records[Pos]; AssignMemoryRecord(Rec, Buffer); End; @@ -5555,7 +5788,44 @@ procedure TRESTDWMemTable.InternalPost; End; FActive := True; Inherited OpenCursor(InfoQuery); + {$IFDEF FPC} + If Not DefaultFields then + If (csDesigning in ComponentState) Then + SetProviderFlags; + {$ENDIF} +End; + +{$IFDEF FPC} +Procedure TRESTDWMemTable.SetProviderFlags; +Var + I : Integer; +Begin + If (Length(FFieldAttrs) > 0) And (Fields.Count > 0) Then + Begin + For I := 0 To Length(FFieldAttrs) -1 Do + Begin + If (Fields.Count > I) Then + Begin + Fields[I].ProviderFlags := []; + If FFieldAttrs[I] And 2 > 0 Then + Fields[I].ProviderFlags := Fields[I].ProviderFlags + [pfInUpdate]; + If FFieldAttrs[I] And 4 > 0 Then + Fields[I].ProviderFlags := Fields[I].ProviderFlags + [pfInWhere]; + If FFieldAttrs[I] And 8 > 0 Then + Fields[I].ProviderFlags := Fields[I].ProviderFlags + [pfInKey]; + If FFieldAttrs[I] And 16 > 0 Then + Fields[I].ProviderFlags := Fields[I].ProviderFlags + [pfHidden]; + {$IFDEF RESTDWLAZARUS} + If FFieldAttrs[I] And 32 > 0 Then + Fields[I].ProviderFlags := Fields[I].ProviderFlags + [pfRefreshOnInsert]; + If FFieldAttrs[I] And 64 > 0 Then + Fields[I].ProviderFlags := Fields[I].ProviderFlags + [pfRefreshOnUpdate]; + {$ENDIF} + End; + End; + End; End; +{$ENDIF} procedure TRESTDWMemTable.InternalOpen; Begin @@ -5565,15 +5835,17 @@ procedure TRESTDWMemTable.InternalOpen; {$IFNDEF FPC} FieldDefList.Update; {$ENDIF} - {$IFNDEF HAS_AUTOMATIC_DB_FIELDS} If DefaultFields then - {$ENDIF !HAS_AUTOMATIC_DB_FIELDS} - CreateFields; + CreateFields + {$IFDEF FPC} + Else If (csDesigning in ComponentState) Then + SetProviderFlags + {$ENDIF}; {$IFDEF FPC} CalcOffSets; {$ENDIF} - BindFields(True); InitBufferPointers(True); + BindFields(True); InternalFirst; FAllPacketsFetched := False; End; @@ -5587,7 +5859,17 @@ procedure TRESTDWMemTable.InternalOpen; For I := 0 To FieldDefs.Count -1 Do Begin If FieldDefs[I].DataType = {$IFNDEF FPC}ftExtended{$ELSE}ftFMTBcd{$ENDIF} Then - Field := TExtendedField.Create(Self) + Field := TRESTDWNumericField.Create(Self) + Else If FieldDefs[I].DataType = {$IFNDEF FPC}ftString{$ELSE}ftFixedChar{$ENDIF} Then + Begin + Field := TStringFieldRESTDW.Create(Self); + Field.Size := FieldDefs[I].Size; + End + Else If FieldDefs[I].DataType in [{$IFNDEF FPC}ftStream, {$ENDIF}ftBlob, ftMemo, ftWideMemo] Then + Begin + Field := TStreamField.Create(Self); +// Field.Size := FieldDefs[I].Size; + End Else Begin {$IFNDEF FPC} @@ -5598,9 +5880,27 @@ procedure TRESTDWMemTable.InternalOpen; Field.SetFieldType(FieldDefs[I].DataType); {$ENDIF} End; - Field.FieldName := FieldDefs[I].Name; - Field.DisplayLabel := FieldDefs[I].Name; - Field.DataSet := Self; + Field.FieldName := FieldDefs[I].Name; + Field.DisplayLabel := FieldDefs[I].Name; + Field.DataSet := Self; + If Length(FFieldAttrs) > I Then + Begin + Field.ProviderFlags := []; + If FFieldAttrs[I] And 2 > 0 Then + Field.ProviderFlags := Field.ProviderFlags + [pfInUpdate]; + If FFieldAttrs[I] And 4 > 0 Then + Field.ProviderFlags := Field.ProviderFlags + [pfInWhere]; + If FFieldAttrs[I] And 8 > 0 Then + Field.ProviderFlags := Field.ProviderFlags + [pfInKey]; + If FFieldAttrs[I] And 16 > 0 Then + Field.ProviderFlags := Field.ProviderFlags + [pfHidden]; + {$IFDEF RESTDWLAZARUS} + If FFieldAttrs[I] And 32 > 0 Then + Field.ProviderFlags := Field.ProviderFlags + [pfRefreshOnInsert]; + If FFieldAttrs[I] And 64 > 0 Then + Field.ProviderFlags := Field.ProviderFlags + [pfRefreshOnUpdate]; + {$ENDIF} + End; End; SetLength(FFieldName, 0); SetLength(FFieldName, Fields.Count); @@ -5708,8 +6008,9 @@ function TRESTDWMemTable.ParserGetVariableValue(Sender: TObject; procedure TRESTDWMemTable.InternalClose; Begin ClearBuffer; - FAutoInc := 1; +// SetLength(FFieldAttrs, 0); BindFields(False); + FAutoInc := 1; If DefaultFields then DestroyFields; FreeFieldBuffers; @@ -6715,11 +7016,29 @@ function TRESTDWMemTable.CopyFromDataSet: Integer; constructor TRESTDWIndex.Create(const ADataset: TRESTDWMemtable); Begin Inherited Create; - FDataset := ADataset; + FDataset := TRESTDWMemtable(ADataset); End; -procedure TRESTDWMemTable.DoBeforeApply(ADataset: TDataset; RowsPending: Integer - ); +{$IFDEF FPC} +Function TRESTDWMemTable.GetFieldData(Field : TField; + Buffer : Pointer; + NativeFormat : Boolean): Boolean; +Begin + Result := InternalGetFieldData(Field, TRESTDWMTValueBuffer(Buffer)); +End; +{$ENDIF} + +Function TRESTDWMemTable.GetFieldData(FieldNo : Integer; + Var Buffer : TValueBuffer): Boolean; +Begin +{$IFDEF FPC} + Result := InternalGetFieldData(Fields[FieldNo], TRESTDWMTValueBuffer(Buffer)); //Inherited GetFieldData(Fields[FieldNo], Pointer(@Buffer)); +{$ELSE} + Inherited GetFieldData(FieldNo, Buffer); +{$ENDIF} +End; + +procedure TRESTDWMemTable.DoBeforeApply(ADataset: TDataset; RowsPending: Integer); Begin If Assigned(FBeforeApply) then FBeforeApply(ADataset, RowsPending); @@ -7189,6 +7508,7 @@ destructor TRESTDWMTMemBlobStream.Destroy; End; End; +{$IFDEF FPC} Procedure TRESTDWMTMemBlobStream.SetBlobFromRecord(Field: TField; Value: TMemBlobData); Var Rec: TRESTDWMTMemoryRecord; @@ -7211,6 +7531,7 @@ destructor TRESTDWMTMemBlobStream.Destroy; End; End; +{$ENDIF} Function TRESTDWMTMemBlobStream.Read(Var Buffer; Count: Longint): Longint; Var @@ -7312,25 +7633,84 @@ destructor TRESTDWMTMemBlobStream.Destroy; End; End; -{ TRESTDWStorageBase } +Destructor TBlobStream.Destroy; +begin +// If Assigned(FDataSet) Then +// FDataSet.SetBlobStream(Self); + Inherited Destroy; +end; -constructor TRESTDWStorageBase.Create(AOwner: TComponent); +Constructor TStreamField.Create(AOwner: TComponent); Begin - inherited Create(AOwner); - FEncodeStrs := True; + Inherited Create(AOwner); + FStream := TBlobStream.Create; + TBlobStream(FStream).FDataSet := TRESTDWMemtable(AOwner); End; -Procedure TRESTDWStorageBase.LoadDatasetFromStream(Dataset: TDataset; stream: TStream); +Destructor TStreamField.Destroy; Begin - + TBlobStream(FStream).FDataSet := Nil; + FStream.Free; + Inherited Destroy; End; -Procedure TRESTDWStorageBase.LoadDWMemFromStream(Dataset: IRESTDWMemTable; - stream: TStream); +Procedure TStreamField.Put; +Var + Field : TField; Begin - + If Not DataSet.IsEmpty Then + Begin + With (DataSet as TRESTDWMemtable), TBlobStream(FStream) do + Begin + Field := DataSet.FindField(FieldName); + FFieldIndex := Field.Offset; + FRecNo := RecNo; +// SetBlobStream(FStream); + End; + End; End; +Function TStreamField.GetAsStream: TStream; +Var + aBytes : TRESTDWBytes; + Field : TField; + {$IFDEF FPC} + vStream : TStream; + {$ENDIF} +begin + If Not DataSet.IsEmpty then + Begin + Result := FStream; + With (DataSet as TRESTDWMemTable), TBlobStream(FStream) do + Begin + Clear; + Field := DataSet.FindField(FieldName); + FFieldIndex := Field.Offset; + FRecNo := RecNo; + {$IFDEF FPC} + vStream := DataSet.CreateBlobStream(Field, bmRead); + If Assigned(vStream) Then + Begin + vStream.Position := 0; + SetLength(aBytes, vStream.Size); + vStream.Read(aBytes, Length(aBytes)); + vStream.Free; + End; + {$ELSE} + DataSet.GetBlobFieldData(Field.Offset, TBlobByteData(aBytes)); + {$ENDIF} + If Not Assigned(Result) Then + Result := TBlobStream.Create; + TBlobStream(Result).Clear; + If Length(aBytes) > 0 Then + TBlobStream(Result).Write(aBytes, Length(aBytes)); + End; + Result.Position := 0; + End + Else + Result := nil; +end; + Destructor TRecordList.Destroy; Begin ClearAll; @@ -7361,10 +7741,8 @@ constructor TRESTDWStorageBase.Create(AOwner: TComponent); End; Procedure TRecordList.Delete(Index: Integer); -{$IFDEF FPC} Var vItem : PRESTDWMTMemoryRecord; -{$ENDIF} Begin If (Index > -1) Then Begin @@ -7373,19 +7751,12 @@ constructor TRESTDWStorageBase.Create(AOwner: TComponent); Begin If Assigned(TRESTDWMTMemoryRecord(TList(Self).Items[Index]^)) Then Begin - {$IFDEF FPC} - vItem := TList(Self).Items[Index]; - vItem^.Free; - {$ELSE} - {$IF CompilerVersion > 33} - FreeAndNil(TRESTDWMTMemoryRecord(TList(Self).Items[Index]^)); - {$ELSE} - FreeAndNil(TList(Self).Items[Index]^); - {$IFEND} - {$ENDIF} + vItem := TList(Self).Items[Index]; + vItem^.Free; + Dispose(vItem); + vItem := Nil; End; End; - Dispose(PRESTDWMTMemoryRecord(TList(Self).Items[Index])); Except End; Inherited Delete(Index); @@ -7405,66 +7776,6 @@ constructor TRESTDWStorageBase.Create(AOwner: TComponent); Inherited Clear; End; -Procedure TRESTDWStorageBase.LoadFromFile(Dataset: TDataset; FileName: String); -Var - vFileStream : TFileStream; -Begin - If not FileExists(FileName) then - Exit; - vFileStream := TFileStream.Create(FileName,fmOpenRead or fmShareDenyWrite); - Try - LoadFromStream(Dataset,TStream(vFileStream)); - Finally - vFileStream := Nil; - vFileStream.Free; - End; -End; - -Procedure TRESTDWStorageBase.LoadFromStream(Dataset: TDataset; stream: TStream); -Begin - If Dataset.InheritsFrom(TRESTDWMemTable) then - LoadDWMemFromStream(TRESTDWMemTable(Dataset), stream) - Else - LoadDatasetFromStream(Dataset, stream); - If Dataset.Active then - TRESTDWMemTable(Dataset).SortOnFields; -End; - -Procedure TRESTDWStorageBase.SaveDatasetToStream(Dataset: TDataset; Var stream: TStream); -Begin - -End; - -Procedure TRESTDWStorageBase.SaveDWMemToStream(Dataset: IRESTDWMemTable; - Var stream: TStream); -Begin - -End; - -Procedure TRESTDWStorageBase.SaveToFile(Dataset: TDataset; FileName: String); -Var - vFileStream : TFileStream; -Begin - Try - vFileStream := TFileStream.Create(FileName,fmCreate); - Try - SaveToStream(Dataset,TStream(vFileStream)); - Except - End; - Finally - vFileStream.Free; - End; -End; - -Procedure TRESTDWStorageBase.SaveToStream(Dataset: TDataset; Var stream: TStream); -Begin - If Dataset.InheritsFrom(TRESTDWMemTable) then - SaveDWMemToStream(TRESTDWMemTable(Dataset), stream) - Else - SaveDatasetToStream(Dataset, stream); -End; - - { TRESTDWMemTableEx } Procedure TRESTDWMemTableEx.CopyStructure(Source: TDataSet); diff --git a/CORE/Source/Sockets/Ics/uRESTDWIcsBase.pas b/CORE/Source/Sockets/Ics/uRESTDWIcsBase.pas index a694f9a8..7ceac58d 100644 --- a/CORE/Source/Sockets/Ics/uRESTDWIcsBase.pas +++ b/CORE/Source/Sockets/Ics/uRESTDWIcsBase.pas @@ -40,7 +40,7 @@ interface OverbyteIcsWinSock, OverbyteIcsWSocket, OverbyteIcsWndControl, OverbyteIcsHttpAppServer, OverbyteIcsUtils, OverbyteIcsFormDataDecoder, OverbyteIcsMimeUtils, OverbyteIcsSSLEAY, OverbyteIcsHttpSrv, - OverbyteIcsWSocketS, OverbyteIcsSslX509Utils, OverbyteIcsSslBase; + OverbyteIcsWSocketS, OverbyteIcsSslX509Utils, OverbyteIcsSslBase, OverbyteIcsTypes; type TPoolerHttpConnection = class(THttpAppSrvConnection) diff --git a/CORE/Source/Sockets/Indy/uRESTDWIdBase.pas b/CORE/Source/Sockets/Indy/uRESTDWIdBase.pas index 00f47397..f6483558 100644 --- a/CORE/Source/Sockets/Indy/uRESTDWIdBase.pas +++ b/CORE/Source/Sockets/Indy/uRESTDWIdBase.pas @@ -33,33 +33,45 @@ interface {$IFDEF RESTDWWINDOWS}Windows,{$ENDIF} {$IFNDEF RESTDWLAZARUS}SyncObjs,{$ENDIF} {$IF not Defined(RESTDWLAZARUS) AND not Defined(RESTDWLAMW) AND not Defined(DELPHIXEUP)}uRESTDWMassiveBuffer,{$IFEND} + {$IFDEF USE_TAURUS_TLS} + TaurusTLS, TaurusTLSHeaders_types, TaurusTLSHeaders_evp, TaurusTLSHeaders_bio, TaurusTLSHeaders_rand, + TaurusTLSHeaders_bn, TaurusTLSHeaders_x509, TaurusTLSHeaders_err, TaurusTLSLoader, + {$ENDIF} SysUtils, Classes, Db, Variants, uRESTDWBasic, uRESTDWBasicDB, uRESTDWComponentEvents, uRESTDWBasicTypes, uRESTDWJSONObject, uRESTDWParams, uRESTDWBasicClass, uRESTDWAbout, - uRESTDWConsts, uRESTDWProtoTypes, uRESTDWDataUtils, uRESTDWTools, uRESTDWZlib, + uRESTDWProtoTypes, uRESTDWDataUtils, uRESTDWTools, uRESTDWZlib, uRESTDWAuthenticators, IdContext, IdHeaderList, IdTCPConnection, IdHTTPServer, IdCustomHTTPServer, IdSSLOpenSSL, IdSSL, IdAuthentication, IdTCPClient, IdHTTPHeaderInfo, IdComponent, IdBaseComponent, IdHTTP, IdMultipartFormData, IdMessageCoder, - IdMessage, IdGlobalProtocols, IdGlobal, IdStack; + IdMessage, IdGlobalProtocols, IdGlobal, IdStack, uRESTDWConsts; Type - PIdSSLVersions = ^TIdSSLVersions; + TRESTDWVersionsBase = Array of Integer; + PRESTDWSSLVersions = ^TRESTDWSSLVersion; +Type TRESTDWIdProxyRequest = Class(TRESTDWProxyBase) Private + {$IFDEF USE_TAURUS_TLS} + vUseTaurus : Boolean; + {$ENDIF} vCipherList, vaSSLRootCertFile, ASSLPrivateKeyFile, ASSLPrivateKeyPassword, ASSLCertFile : String; - aSSLMethod : TIdSSLVersion; + aSSLMethod : TRESTDWSSLVersion; HTTPServer : TIdHTTPServer; - lHandler : TIdServerIOHandlerSSLOpenSSL; + lHandler : TComponent;//TIdServerIOHandlerSSLOpenSSL; vSSLVerifyMode : TIdSSLVerifyModeSet; vSSLVerifyDepth : Integer; - vSSLMode : TIdSSLMode; - aSSLVersions : TIdSSLVersions; + vSSLMode : TRESTDWSSLMode; + aSSLVersions : TRESTDWSSLVersions; + Function GetSSlVersion : Integer; + Function GetSSlVersions : TRESTDWVersionsBase; + Function GetSSlMode : Integer; Procedure aCommandGet (AContext : TIdContext; ARequestInfo : TIdHTTPRequestInfo; AResponseInfo : TIdHTTPResponseInfo); @@ -87,32 +99,41 @@ interface Constructor Create (AOwner : TComponent);Override; Destructor Destroy; override; Published + {$IFDEF USE_TAURUS_TLS} + Property UseTaurus : Boolean Read vUseTaurus Write vUseTaurus; + {$ENDIF} Property SSLPrivateKeyFile : String Read aSSLPrivateKeyFile Write aSSLPrivateKeyFile; Property SSLPrivateKeyPassword : String Read aSSLPrivateKeyPassword Write aSSLPrivateKeyPassword; Property SSLCertFile : String Read aSSLCertFile Write aSSLCertFile; Property SSLRootCertFile : String Read vaSSLRootCertFile Write vaSSLRootCertFile; Property SSLVerifyMode : TIdSSLVerifyModeSet Read vSSLVerifyMode Write vSSLVerifyMode; Property SSLVerifyDepth : Integer Read vSSLVerifyDepth Write vSSLVerifyDepth; - Property SSLMode : TIdSSLMode Read vSSLMode Write vSSLMode; - Property SSLMethod : TIdSSLVersion Read aSSLMethod Write aSSLMethod; - Property SSLVersions : TIdSSLVersions Read aSSLVersions Write aSSLVersions; + Property SSLMode : TRESTDWSSLMode Read vSSLMode Write vSSLMode; + Property SSLMethod : TRESTDWSSLVersion Read aSSLMethod Write aSSLMethod; + Property SSLVersions : TRESTDWSSLVersions Read aSSLVersions Write aSSLVersions; Property CipherList : String Read vCipherList Write vCipherList; End; TRESTDWIdServicePooler = Class(TRESTServicePoolerBase) Private + {$IFDEF USE_TAURUS_TLS} + vUseTaurus : Boolean; + {$ENDIF} vCipherList, vaSSLRootCertFile, ASSLPrivateKeyFile, ASSLPrivateKeyPassword, ASSLCertFile : String; - aSSLMethod : TIdSSLVersion; + aSSLMethod : TRESTDWSSLVersion; HTTPServer : TIdHTTPServer; - lHandler : TIdServerIOHandlerSSLOpenSSL; + lHandler : TComponent;//TIdServerIOHandlerSSLOpenSSL; vSSLVerifyMode : TIdSSLVerifyModeSet; vSSLVerifyDepth : Integer; - vSSLMode : TIdSSLMode; - aSSLVersions : TIdSSLVersions; + vSSLMode : TRESTDWSSLMode; + aSSLVersions : TRESTDWSSLVersions; + Function GetSSlVersion : Pointer; + Function GetSSlMode : Pointer; + Function GetSSlVersions : Pointer; Procedure aCommandGet (AContext : TIdContext; ARequestInfo : TIdHTTPRequestInfo; AResponseInfo : TIdHTTPResponseInfo); @@ -145,15 +166,18 @@ interface Constructor Create (AOwner : TComponent);Override; Destructor Destroy; override; Published + {$IFDEF USE_TAURUS_TLS} + Property UseTaurus : Boolean Read vUseTaurus Write vUseTaurus; + {$ENDIF} Property SSLPrivateKeyFile : String Read aSSLPrivateKeyFile Write aSSLPrivateKeyFile; Property SSLPrivateKeyPassword : String Read aSSLPrivateKeyPassword Write aSSLPrivateKeyPassword; Property SSLCertFile : String Read aSSLCertFile Write aSSLCertFile; Property SSLRootCertFile : String Read vaSSLRootCertFile Write vaSSLRootCertFile; Property SSLVerifyMode : TIdSSLVerifyModeSet Read vSSLVerifyMode Write vSSLVerifyMode; Property SSLVerifyDepth : Integer Read vSSLVerifyDepth Write vSSLVerifyDepth; - Property SSLMode : TIdSSLMode Read vSSLMode Write vSSLMode; - Property SSLMethod : TIdSSLVersion Read aSSLMethod Write aSSLMethod; - Property SSLVersions : TIdSSLVersions Read aSSLVersions Write aSSLVersions; + Property SSLMode : TRESTDWSSLMode Read vSSLMode Write vSSLMode; + Property SSLMethod : TRESTDWSSLVersion Read aSSLMethod Write aSSLMethod; + Property SSLVersions : TRESTDWSSLVersions Read aSSLVersions Write aSSLVersions; Property CipherList : String Read vCipherList Write vCipherList; End; @@ -267,9 +291,13 @@ interface vHostCert : String; vPortCert : Integer; vOnGetpassword : TOnGetpassword; - vSSLVersions : TIdSSLVersions; - ssl : TIdSSLIOHandlerSocketOpenSSL; - vCertMode : TIdSSLMode; + vUseTaurus : Boolean; + ssl : TComponent;//TIdSSLIOHandlerSocketOpenSSL; + vSSLVersions : TRESTDWSSLVersions; + vCertMode : TRESTDWSSLMode; + Function GetSSlVersion : Integer; + Function GetSSlMode : Integer; + Function GetSSlVersions : TRESTDWVersionsBase; Procedure SetParams; Procedure SetUseSSL (Value : Boolean);Override; Procedure SetHeaders (AHeaders : TStringList);Overload;Override; @@ -430,8 +458,8 @@ interface IgnoreEvents : Boolean = False):Integer;Overload;Override; Published Property VerifyCert : Boolean Read GetVerifyCert Write SetVerifyCert; - Property SSLVersions : TIdSSLVersions Read vSSLVersions Write vSSLVersions; - Property CertMode : TIdSSLMode Read vCertMode Write vCertMode; + Property SSLVersions : TRESTDWSSLVersions Read vSSLVersions Write vSSLVersions; + Property CertMode : TRESTDWSSLMode Read vCertMode Write vCertMode; Property CertFile : String Read vCertFile Write vCertFile; Property KeyFile : String Read vKeyFile Write vKeyFile; Property RootCertFile : String Read vRootCertFile Write vRootCertFile; @@ -458,10 +486,20 @@ interface TRESTDWIdClientPooler = Class(TRESTClientPoolerBase) Private - vCipherList : String; - aSSLMethod : TIdSSLVersion; + {$IFDEF USE_TAURUS_TLS} + vUseTaurus : Boolean; + {$ENDIF} + vCipherList, + vaSSLRootCertFile, + ASSLPrivateKeyFile, + ASSLPrivateKeyPassword, + ASSLCertFile : String; + aSSLMethod : TRESTDWSSLVersion; HttpRequest : TRESTDWIdClientREST; - vSSLMode : TIdSSLMode; + vSSLMode : TRESTDWSSLMode; + Function GetSSlVersion : Integer; + Function GetSSlMode : Integer; + Function GetSSlVersions : TRESTDWVersionsBase; Function SendEvent (EventData : String; Var Params : TRESTDWParams; EventType : TSendEvent = sePOST; @@ -489,8 +527,12 @@ interface AMessageErro : String): Boolean; Procedure Abort;Override; Published - Property SSLMode : TIdSSLMode Read vSSLMode Write vSSLMode; - Property CipherList : String Read vCipherList Write vCipherList; + Property SSLPrivateKeyFile : String Read aSSLPrivateKeyFile Write aSSLPrivateKeyFile; + Property SSLPrivateKeyPassword : String Read aSSLPrivateKeyPassword Write aSSLPrivateKeyPassword; + Property SSLCertFile : String Read aSSLCertFile Write aSSLCertFile; + Property SSLRootCertFile : String Read vaSSLRootCertFile Write vaSSLRootCertFile; + Property SSLMode : TRESTDWSSLMode Read vSSLMode Write vSSLMode; + Property SSLMethod : TRESTDWSSLVersion Read aSSLMethod Write aSSLMethod; End; TRESTDWIdPoolerList = Class(TRESTDWPoolerListBase) @@ -516,12 +558,12 @@ TIdHTTPAccess = class(TIdHTTP) If Assigned(HttpRequest.IOHandler) Then HttpRequest.IOHandler.CloseGracefully; HttpRequest.Disconnect(false); - If Assigned(ssl) Then - FreeAndNil(ssl); HttpRequest.Free; Except End; End; + If Assigned(ssl) Then + FreeAndNil(ssl); Inherited; End; @@ -2914,6 +2956,21 @@ TIdHTTPAccess = class(TIdHTTP) vOnGetpassword(Password); End; +Function TRESTDWIdClientREST.GetSSlMode : Integer; +Begin + Result := 0; +End; + +Function TRESTDWIdClientREST.GetSSlVersion : Integer; +Begin + Result := 0; +End; + +Function TRESTDWIdClientREST.GetSSlVersions : TRESTDWVersionsBase; +Begin + Result := Nil; +End; + Function TRESTDWIdClientREST.GetVerifyCert : boolean; Begin Result := vVerifyCert; @@ -2925,20 +2982,41 @@ TIdHTTPAccess = class(TIdHTTP) End; Procedure TRESTDWIdClientREST.SetCertOptions; +{$IFDEF USE_TAURUS_TLS} +Var + vRESTDWVersionsBase : TRESTDWVersionsBase; +{$ENDIF} Begin If Assigned(ssl) Then Begin {$IFDEF FPC} - ssl.OnGetPassword := @Getpassword; + TIdSSLIOHandlerSocketOpenSSL(ssl).OnGetPassword := @Getpassword; {$ELSE} - ssl.OnGetPassword := Getpassword; + vRESTDWVersionsBase := GetSSlVersions; + {$IFDEF USE_TAURUS_TLS} + If vUseTaurus Then + Begin + End + Else + Begin + TIdSSLIOHandlerSocketOpenSSL(ssl).OnGetPassword := Getpassword; + TIdSSLIOHandlerSocketOpenSSL(ssl).SSLOptions.CertFile := vCertFile; + TIdSSLIOHandlerSocketOpenSSL(ssl).SSLOptions.KeyFile := vKeyFile; + TIdSSLIOHandlerSocketOpenSSL(ssl).SSLOptions.RootCertFile := vRootCertFile; + TIdSSLIOHandlerSocketOpenSSL(ssl).Host := vHostCert; + TIdSSLIOHandlerSocketOpenSSL(ssl).Port := vPortCert; + TIdSSLIOHandlerSocketOpenSSL(ssl).SSLOptions.Mode := TIdSSLMode(GetSSlMode);; + End; + {$ELSE} + TIdSSLIOHandlerSocketOpenSSL(ssl).OnGetPassword := Getpassword; + TIdSSLIOHandlerSocketOpenSSL(ssl).SSLOptions.CertFile := vCertFile; + TIdSSLIOHandlerSocketOpenSSL(ssl).SSLOptions.KeyFile := vKeyFile; + TIdSSLIOHandlerSocketOpenSSL(ssl).SSLOptions.RootCertFile := vRootCertFile; + TIdSSLIOHandlerSocketOpenSSL(ssl).Host := vHostCert; + TIdSSLIOHandlerSocketOpenSSL(ssl).Port := vPortCert; + TIdSSLIOHandlerSocketOpenSSL(ssl).SSLOptions.Mode := TIdSSLMode(GetSSlMode);; + {$ENDIF} {$ENDIF} - ssl.SSLOptions.CertFile := vCertFile; - ssl.SSLOptions.KeyFile := vKeyFile; - ssl.SSLOptions.RootCertFile := vRootCertFile; - ssl.Host := vHostCert; - ssl.Port := vPortCert; - ssl.SSLOptions.Mode := vCertMode; End; End; @@ -3041,6 +3119,10 @@ TIdHTTPAccess = class(TIdHTTP) End; Procedure TRESTDWIdClientREST.SetUseSSL(Value : Boolean); +{$IFDEF USE_TAURUS_TLS} +Var + vRESTDWVersionsBase : TRESTDWVersionsBase; +{$ENDIF} Begin Inherited; If Assigned(HttpRequest) Then @@ -3049,29 +3131,50 @@ TIdHTTPAccess = class(TIdHTTP) Begin If ssl = Nil Then Begin - ssl := TIdSSLIOHandlerSocketOpenSSL.Create(HttpRequest); {$IFDEF FPC} - ssl.OnVerifyPeer := @IdSSLIOHandlerSocketOpenSSL1VerifyPeer; + ssl := TIdSSLIOHandlerSocketOpenSSL.Create(HttpRequest); + TIdSSLIOHandlerSocketOpenSSL(ssl).OnVerifyPeer := @IdSSLIOHandlerSocketOpenSSL1VerifyPeer; + TIdSSLIOHandlerSocketOpenSSL(ssl).OnGetPassword := @Getpassword; + If Assigned(HttpRequest) Then + HttpRequest.IOHandler := TIdSSLIOHandlerSocketOpenSSL(ssl); {$ELSE} - ssl.OnVerifyPeer := IdSSLIOHandlerSocketOpenSSL1VerifyPeer; + {$IFDEF USE_TAURUS_TLS} + If vUseTaurus Then + Begin + End + Else + Begin + ssl := TIdSSLIOHandlerSocketOpenSSL.Create(HttpRequest); + TIdSSLIOHandlerSocketOpenSSL(ssl).OnVerifyPeer := IdSSLIOHandlerSocketOpenSSL1VerifyPeer; + TIdSSLIOHandlerSocketOpenSSL(ssl).SSLOptions.Method := TIdSSLVersion(GetSSlVersion);//aSSLMethod; + TIdSSLIOHandlerSocketOpenSSL(ssl).SSLOptions.SSLVersions := TIdSSLVersions(Pointer(@vRESTDWVersionsBase)^); + TIdSSLIOHandlerSocketOpenSSL(ssl).SSLOptions.Mode := TIdSSLMode(GetSSlMode);//vSSLMode; + TIdSSLIOHandlerSocketOpenSSL(ssl).OnGetPassword := Getpassword; + If Assigned(HttpRequest) Then + HttpRequest.IOHandler := TIdSSLIOHandlerSocketOpenSSL(ssl); + End; + {$ELSE} + ssl := TIdSSLIOHandlerSocketOpenSSL.Create(HttpRequest); + TIdSSLIOHandlerSocketOpenSSL(ssl).OnVerifyPeer := @IdSSLIOHandlerSocketOpenSSL1VerifyPeer; + TIdSSLIOHandlerSocketOpenSSL(ssl).OnGetPassword := @Getpassword; + If Assigned(HttpRequest) Then + HttpRequest.IOHandler := TIdSSLIOHandlerSocketOpenSSL(ssl); + {$ENDIF} {$ENDIF} End; - ssl.SSLOptions.SSLVersions := vSSLVersions; SetCertOptions; - If Assigned(HttpRequest) Then - HttpRequest.IOHandler := ssl; - If sslvSSLv2 in vSSLVersions Then - ssl.SSLOptions.Method := sslvSSLv2 - Else If sslvSSLv23 in vSSLVersions Then - ssl.SSLOptions.Method := sslvSSLv23 - Else If sslvSSLv3 in vSSLVersions Then - ssl.SSLOptions.Method := sslvSSLv3 - Else If sslvTLSv1 in vSSLVersions Then - ssl.SSLOptions.Method := sslvTLSv1 - Else If sslvTLSv1_1 in vSSLVersions Then - ssl.SSLOptions.Method := sslvTLSv1_1 - Else If sslvTLSv1_2 in vSSLVersions Then - ssl.SSLOptions.Method := sslvTLSv1_2; +// If sslvSSLv2 in vSSLVersions Then +// ssl.SSLOptions.Method := sslvSSLv2 +// Else If sslvSSLv23 in vSSLVersions Then +// ssl.SSLOptions.Method := sslvSSLv23 +// Else If sslvSSLv3 in vSSLVersions Then +// ssl.SSLOptions.Method := sslvSSLv3 +// Else If sslvTLSv1 in vSSLVersions Then +// ssl.SSLOptions.Method := sslvTLSv1 +// Else If sslvTLSv1_1 in vSSLVersions Then +// ssl.SSLOptions.Method := sslvTLSv1_1 +// Else If sslvTLSv1_2 in vSSLVersions Then +// ssl.SSLOptions.Method := sslvTLSv1_2; End Else Begin @@ -3395,8 +3498,8 @@ TIdHTTPAccess = class(TIdHTTP) Begin Inherited; SetSocketKind('Standalone - Indy'); + lHandler := Nil; HTTPServer := TIdHTTPServer.Create(Nil); - lHandler := TIdServerIOHandlerSSLOpenSSL.Create(Nil); {$IFDEF FPC} HTTPServer.OnQuerySSLPort := @IdHTTPServerQuerySSLPort; HTTPServer.OnCommandGet := @aCommandGet; @@ -3556,6 +3659,8 @@ TIdHTTPAccess = class(TIdHTTP) End; Procedure TRESTDWIdServicePooler.SetActive(Value: Boolean); +Var + vRESTDWVersionsBase : Pointer; Begin If (Value) And (Not (HTTPServer.Active)) Then @@ -3564,27 +3669,69 @@ TIdHTTPAccess = class(TIdHTTP) raise Exception.Create(cServerMethodClassNotAssigned); Try - If (ASSLPrivateKeyFile <> '') And - (ASSLPrivateKeyPassword <> '') And - (ASSLCertFile <> '') Then + If (ASSLCertFile <> '') Then Begin - lHandler.SSLOptions.Method := aSSLMethod; - lHandler.SSLOptions.SSLVersions := PIdSSLVersions(@SSLVersions)^; - {$IFDEF FPC} - lHandler.OnGetPassword := @GetSSLPassword; - lHandler.OnVerifyPeer := @SSLVerifyPeer; + vRESTDWVersionsBase := GetSSlVersions; + {$IFDEF USE_TAURUS_TLS} + If vUseTaurus Then + Begin + If (Assigned(lHandler) And (lHandler is TIdServerIOHandlerSSLOpenSSL)) Then + FreeAndNil(lHandler); + If Not Assigned(lHandler) Then + lHandler := TTaurusTLSServerIOHandler.Create(Nil); + TTaurusTLSServerIOHandler(lHandler).SSLOptions.MinTLSVersion := TTaurusTLSSSLVersion(Pointer(GetSSlVersion)^);//vSSLMode; + TTaurusTLSServerIOHandler(lHandler).SSLOptions.Mode := TTaurusTLSSSLMode(Pointer(GetSSlMode)^);//vSSLMode; + TTaurusTLSServerIOHandler(lHandler).DefaultCert.PublicKey := ASSLCertFile; + TTaurusTLSServerIOHandler(lHandler).DefaultCert.PrivateKey := ASSLPrivateKeyFile; + TTaurusTLSServerIOHandler(lHandler).SSLOptions.VerifyDepth := vSSLVerifyDepth; + TTaurusTLSServerIOHandler(lHandler).DefaultCert.RootKey := vASSLRootCertFile; + TTaurusTLSServerIOHandler(lHandler).SSLOptions.CipherList := vCipherList; + TTaurusTLSServerIOHandler(lHandler).SSLOptions.VerifyHostname := False; + HTTPServer.IOHandler := TTaurusTLSServerIOHandler(lHandler); + End + Else + Begin + If (Assigned(lHandler) And (lHandler is TTaurusTLSServerIOHandler)) Then + FreeAndNil(lHandler); + If Not Assigned(lHandler) Then + lHandler := TIdServerIOHandlerSSLOpenSSL.Create(Nil); + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.SSLVersions := TIdSSLVersions(Pointer(vRESTDWVersionsBase)^); + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.Method := TIdSSLVersion(Pointer(GetSSlVersion)^);//aSSLMethod; + {$IFDEF FPC} + TIdServerIOHandlerSSLOpenSSL(lHandler).OnGetPassword := @GetSSLPassword; + TIdServerIOHandlerSSLOpenSSL(lHandler).OnVerifyPeer := @SSLVerifyPeer; + {$ELSE} + TIdServerIOHandlerSSLOpenSSL(lHandler).OnGetPassword := GetSSLPassword; + TIdServerIOHandlerSSLOpenSSL(lHandler).OnVerifyPeer := SSLVerifyPeer; + {$ENDIF} + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.CertFile := ASSLCertFile; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.KeyFile := ASSLPrivateKeyFile; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.VerifyMode := vSSLVerifyMode; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.VerifyDepth := vSSLVerifyDepth; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.RootCertFile := vASSLRootCertFile; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.Mode := TIdSSLMode(Pointer(GetSSlMode)^);//vSSLMode; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.CipherList := vCipherList; + HTTPServer.IOHandler := TIdServerIOHandlerSSLOpenSSL(lHandler); + End; {$ELSE} - lHandler.OnGetPassword := GetSSLPassword; - lHandler.OnVerifyPeer := SSLVerifyPeer; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.SSLVersions := TIdSSLVersions(Pointer(vRESTDWVersionsBase)^); + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.Method := TIdSSLVersion(Pointer(GetSSlVersion)^);//aSSLMethod; + {$IFDEF FPC} + TIdServerIOHandlerSSLOpenSSL(lHandler).OnGetPassword := @GetSSLPassword; + TIdServerIOHandlerSSLOpenSSL(lHandler).OnVerifyPeer := @SSLVerifyPeer; + {$ELSE} + TIdServerIOHandlerSSLOpenSSL(lHandler).OnGetPassword := GetSSLPassword; + TIdServerIOHandlerSSLOpenSSL(lHandler).OnVerifyPeer := SSLVerifyPeer; + {$ENDIF} + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.CertFile := ASSLCertFile; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.KeyFile := ASSLPrivateKeyFile; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.VerifyMode := vSSLVerifyMode; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.VerifyDepth := vSSLVerifyDepth; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.RootCertFile := vASSLRootCertFile; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.Mode := TIdSSLMode(Pointer(GetSSlMode)^);//vSSLMode; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.CipherList := vCipherList; + HTTPServer.IOHandler := TIdServerIOHandlerSSLOpenSSL(lHandler); {$ENDIF} - lHandler.SSLOptions.CertFile := ASSLCertFile; - lHandler.SSLOptions.KeyFile := ASSLPrivateKeyFile; - lHandler.SSLOptions.VerifyMode := vSSLVerifyMode; - lHandler.SSLOptions.VerifyDepth := vSSLVerifyDepth; - lHandler.SSLOptions.RootCertFile := vASSLRootCertFile; - lHandler.SSLOptions.Mode := vSSLMode; - lHandler.SSLOptions.CipherList := vCipherList; - HTTPServer.IOHandler := lHandler; End Else HTTPServer.IOHandler := Nil; @@ -3596,7 +3743,7 @@ TIdHTTPAccess = class(TIdHTTP) With HTTPServer.Bindings.Add do Begin IP := ServerIPVersionConfig.IPv4Address; - IPVersion := Id_IPv4; + IPVersion := TIdIPVersion(Id_IPv4); Port := ServicePort; End; End; @@ -3606,7 +3753,7 @@ TIdHTTPAccess = class(TIdHTTP) With HTTPServer.Bindings.Add do Begin IP := ServerIPVersionConfig.IPv6Address; - IPVersion := Id_IPv6; + IPVersion := TIdIPVersion(Id_IPv6); Port := ServicePort; End; End; @@ -3631,6 +3778,180 @@ TIdHTTPAccess = class(TIdHTTP) Password := aSSLPrivateKeyPassword; End; +Function TRESTDWIdServicePooler.GetSSlMode : Pointer; +{$IFDEF USE_TAURUS_TLS} + Var + bSSLMode : TIdSSLMode; + aTaurSSLMode : TTaurusTLSSSLMode; +{$ENDIF} +Begin + Result := Nil; + {$IFDEF USE_TAURUS_TLS} + If vUseTaurus Then + Begin + If vSSLMode = sslUnassigned Then + aTaurSSLMode := TTaurusTLSSSLMode(sslmUnassigned) + Else If vSSLMode = sslClient Then + aTaurSSLMode := TTaurusTLSSSLMode(sslmClient) + Else If vSSLMode = sslServer Then + aTaurSSLMode := TTaurusTLSSSLMode(sslmServer) + Else If vSSLMode = sslBoth Then + aTaurSSLMode := TTaurusTLSSSLMode(sslmBoth); + Result := @aTaurSSLMode; + End + Else + Begin + If vSSLMode = sslUnassigned Then + bSSLMode := sslmUnassigned + Else If vSSLMode = sslClient Then + bSSLMode := sslmClient + Else If vSSLMode = sslServer Then + bSSLMode := sslmServer + Else If vSSLMode = sslBoth Then + bSSLMode := sslmBoth; + Result := @bSSLMode; + End; + {$ELSE} + If vSSLMode = sslUnassigned Then + SSLMode := sslUnassigned + Else If vSSLMode = sslClient Then + SSLMode := sslClient + Else If vSSLMode = sslServer Then + SSLMode := sslServer + Else If vSSLMode = sslBoth Then + SSLMode := sslBoth; + Result := @SSLMode; + {$ENDIF} +End; + +Function TRESTDWIdServicePooler.GetSSlVersion : Pointer; +Var + SSLVersion : TIdSSLVersion; + {$IFDEF USE_TAURUS_TLS} + MinSSLVersion : TTaurusTLSSSLVersion; + {$ENDIF} +Begin + Result := Nil; + {$IFDEF USE_TAURUS_TLS} + If vUseTaurus Then + Begin + If SSLv2 in aSSLVersions Then + MinSSLVersion := TTaurusTLSSSLVersion(SSLv2); + If SSLv23 in aSSLVersions Then + MinSSLVersion := TTaurusTLSSSLVersion(SSLv23); + If SSLv3 in aSSLVersions Then + MinSSLVersion := TTaurusTLSSSLVersion(SSLv3); + If TLSv1 in aSSLVersions Then + MinSSLVersion := TTaurusTLSSSLVersion(TLSv1); + If TLSv1_1 in aSSLVersions Then + MinSSLVersion := TTaurusTLSSSLVersion(TLSv1_1); + If TLSv1_2 in aSSLVersions Then + MinSSLVersion := TTaurusTLSSSLVersion(TLSv1_2); + If TLSv1_3 in aSSLVersions Then + MinSSLVersion := TTaurusTLSSSLVersion(TLSv1_3); + Result := @MinSSLVersion; + End + Else + Begin + If aSSLMethod = SSLv2 Then + SSLVersion := sslvSSLv2; + If aSSLMethod = SSLv23 Then + SSLVersion := sslvSSLv23; + If aSSLMethod = SSLv3 Then + SSLVersion := sslvSSLv3; + If aSSLMethod = TLSv1 Then + SSLVersion := sslvTLSv1; + If aSSLMethod = TLSv1_1 Then + SSLVersion := sslvTLSv1_1; + If aSSLMethod = TLSv1_2 Then + SSLVersion := sslvTLSv1_2; + If aSSLMethod = TLSv1_3 Then + Raise Exception.Create('Indy no have TLS 1.3 Support...'); + Result := @SSLVersion; + End; + {$ELSE} + If aSSLMethod = SSLv2 Then + SSLVersion := sslvSSLv2; + If aSSLMethod = SSLv23 Then + SSLVersion := sslvSSLv23; + If aSSLMethod = SSLv3 Then + SSLVersion := sslvSSLv3; + If aSSLMethod = TLSv1 Then + SSLVersion := sslvTLSv1; + If aSSLMethod = TLSv1_1 Then + SSLVersion := sslvTLSv1_1; + If aSSLMethod = TLSv1_2 Then + SSLVersion := sslvTLSv1_2; + If aSSLMethod = TLSv1_3 Then + Raise Exception.Create('Indy no have TLS 1.3 Support...'); + Result := @SSLVersion; + {$ENDIF} +End; + +Function TRESTDWIdServicePooler.GetSSlVersions : Pointer; +Var + bSSLVersions : TIdSSLVersions; + {$IFDEF USE_TAURUS_TLS} + MinSSLVersion : TTaurusTLSSSLVersion; + {$ENDIF} +Begin + bSSLVersions := []; + {$IFDEF USE_TAURUS_TLS} + If vUseTaurus Then + Begin + If SSLv2 in aSSLVersions Then + MinSSLVersion := TTaurusTLSSSLVersion(SSLv2); + If SSLv23 in aSSLVersions Then + MinSSLVersion := TTaurusTLSSSLVersion(SSLv23); + If SSLv3 in aSSLVersions Then + MinSSLVersion := TTaurusTLSSSLVersion(SSLv3); + If TLSv1 in aSSLVersions Then + MinSSLVersion := TTaurusTLSSSLVersion(TLSv1); + If TLSv1_1 in aSSLVersions Then + MinSSLVersion := TTaurusTLSSSLVersion(TLSv1_1); + If TLSv1_2 in aSSLVersions Then + MinSSLVersion := TTaurusTLSSSLVersion(TLSv1_2); + If TLSv1_3 in aSSLVersions Then + MinSSLVersion := TTaurusTLSSSLVersion(TLSv1_3); + Result := @MinSSLVersion; + End + Else + Begin + If SSLv2 in aSSLVersions Then + bSSLVersions := bSSLVersions + [sslvSSLv2]; + If SSLv23 in aSSLVersions Then + bSSLVersions := bSSLVersions + [sslvSSLv23]; + If SSLv3 in aSSLVersions Then + bSSLVersions := bSSLVersions + [sslvSSLv3]; + If TLSv1 in aSSLVersions Then + bSSLVersions := bSSLVersions + [sslvTLSv1]; + If TLSv1_1 in aSSLVersions Then + bSSLVersions := bSSLVersions + [sslvTLSv1_1]; + If TLSv1_2 in aSSLVersions Then + bSSLVersions := bSSLVersions + [sslvTLSv1_2]; + If TLSv1_3 in aSSLVersions Then + Raise Exception.Create('Indy no have TLS 1.3 Support...'); + Result := @SSLVersions; + End; + {$ELSE} + If SSLv2 in aSSLVersions Then + bSSLVersions := bSSLVersions + [sslvSSLv2]; + If SSLv23 in aSSLVersions Then + bSSLVersions := bSSLVersions + [sslvSSLv23]; + If SSLv3 in aSSLVersions Then + bSSLVersions := bSSLVersions + [sslvSSLv3]; + If TLSv1 in aSSLVersions Then + bSSLVersions := bSSLVersions + [sslvTLSv1]; + If TLSv1_1 in aSSLVersions Then + bSSLVersions := bSSLVersions + [sslvTLSv1_1]; + If TLSv1_2 in aSSLVersions Then + bSSLVersions := bSSLVersions + [sslvTLSv1_2]; + If TLSv1_3 in aSSLVersions Then + Raise Exception.Create('Indy no have TLS 1.3 Support...'); + Result := @bSSLVersions; + {$ENDIF} +End; + { TRESTDWIdClientPooler } @@ -3687,6 +4008,21 @@ procedure TRESTDWIdClientPooler.Abort; Inherited; End; +Function TRESTDWIdClientPooler.GetSSlMode : Integer; +Begin + Result := 0; +End; + +Function TRESTDWIdClientPooler.GetSSlVersion : Integer; +Begin + Result := 0; +End; + +Function TRESTDWIdClientPooler.GetSSlVersions : TRESTDWVersionsBase; +Begin + Result := Nil; +End; + function TRESTDWIdClientPooler.IsServerLive(Aip: String; Aport: Integer; AMessageErro: String): Boolean; var @@ -3729,6 +4065,8 @@ function TRESTDWIdClientPooler.IsServerLive(Aip: String; Aport: Integer; aEncoding : TEncodeSelect; aAccessTag : String; aAuthenticationOptions : TRESTDWClientAuthOptionParams); +Var + vRESTDWVersionsBase : TRESTDWVersionsBase; Begin {$IFNDEF RESTDWLAZARUS} {$IFNDEF FPC} @@ -3737,8 +4075,22 @@ function TRESTDWIdClientPooler.IsServerLive(Aip: String; Aport: Integer; {$ENDIF} If (UseSSL) Then Begin - HttpRequest.CertMode := vSSLMode; - HttpRequest.SSLVersions := PIdSSLVersions(@SSLVersions)^; + vRESTDWVersionsBase := GetSSlVersions; + {$IFDEF USE_TAURUS_TLS} + If vUseTaurus Then + Begin + End + Else + Begin + HttpRequest.CertMode := TRESTDWSSLMode(GetSSlMode);//vSSLMode; + HttpRequest.SSLVersions := TRESTDWSSLVersions(Pointer(@vRESTDWVersionsBase)^); + HttpRequest.CertFile := ASSLCertFile; + HttpRequest.KeyFile := ASSLPrivateKeyFile; + HttpRequest.RootCertFile := vASSLRootCertFile; +// HttpRequest.CipherList := vCipherList; + End; + {$ELSE} + {$ENDIF} End; End; @@ -4635,7 +4987,7 @@ function TRESTDWIdClientPooler.IsServerLive(Aip: String; Aport: Integer; FreeAndNil(HttpRequest); HttpRequest := TRESTDWIdClientREST.Create(Nil); If (TypeRequest = trHttps) Then - HttpRequest.SSLVersions := PIdSSLVersions(@SSLVersions)^; + HttpRequest.SSLVersions := SSLVersions;//PIdSSLVersions(@SSLVersions)^; HttpRequest.UserAgent := UserAgent; SetCharsetRequest(HttpRequest, Encoding); SetParams(ProxyOptions, RequestTimeout, ConnectTimeout, AuthenticationOptions); @@ -4644,11 +4996,9 @@ function TRESTDWIdClientPooler.IsServerLive(Aip: String; Aport: Integer; If BinaryRequest Then If HttpRequest.DefaultCustomHeader.IndexOfName('binaryrequest') = -1 Then HttpRequest.DefaultCustomHeader.Add('binaryrequest=true'); - If aBinaryCompatibleMode Then If HttpRequest.DefaultCustomHeader.IndexOfName('BinaryCompatibleMode') = -1 Then HttpRequest.DefaultCustomHeader.Add('BinaryCompatibleMode=true'); - LastErrorMessage := ''; LastErrorCode := -1; Try @@ -4803,6 +5153,21 @@ destructor TRESTDWIdPoolerList.Destroy; { TRESTDWIdProxyRequest } +Function TRESTDWIdProxyRequest.GetSSlVersion : Integer; +Begin + Result := 0; +End; + +Function TRESTDWIdProxyRequest.GetSSlVersions : TRESTDWVersionsBase; +Begin + Result := Nil; +End; + +Function TRESTDWIdProxyRequest.GetSSlMode : Integer; +Begin + Result := 0; +End; + Procedure TRESTDWIdProxyRequest.aCommandGet(AContext : TIdContext; ARequestInfo : TIdHTTPRequestInfo; AResponseInfo : TIdHTTPResponseInfo); @@ -5003,6 +5368,10 @@ destructor TRESTDWIdPoolerList.Destroy; HTTPServer := TIdHTTPServer.Create(Nil); ClientHttpBase := TRESTDWClientHttpBase; lHandler := TIdServerIOHandlerSSLOpenSSL.Create(Nil); + {$IFDEF USE_TAURUS_TLS} + vUseTaurus := False; + {$ENDIF} + {$IFDEF FPC} HTTPServer.OnQuerySSLPort := @IdHTTPServerQuerySSLPort; HTTPServer.OnCommandGet := @aCommandGet; @@ -5125,6 +5494,8 @@ procedure TRESTDWIdProxyRequest.OnParseAuthentication(AContext : TIdCont End; procedure TRESTDWIdProxyRequest.SetActive(Value : Boolean); +Var + vRESTDWVersionsBase : TRESTDWVersionsBase; Begin If (Value) And (Not (HTTPServer.Active)) Then @@ -5134,26 +5505,56 @@ procedure TRESTDWIdProxyRequest.SetActive(Value : Boolean); Try If (ASSLPrivateKeyFile <> '') And - (ASSLPrivateKeyPassword <> '') And +// (ASSLPrivateKeyPassword <> '') And (ASSLCertFile <> '') Then Begin - lHandler.SSLOptions.Method := aSSLMethod; - lHandler.SSLOptions.SSLVersions := PIdSSLVersions(@SSLVersions)^; - {$IFDEF FPC} - lHandler.OnGetPassword := @GetSSLPassword; - lHandler.OnVerifyPeer := @SSLVerifyPeer; + vRESTDWVersionsBase := GetSSlVersions; + {$IFDEF USE_TAURUS_TLS} + If vUseTaurus Then + Begin + End + Else + Begin + //TODO SSL + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.Method := TIdSSLVersion(GetSSlVersion);//aSSLMethod; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.SSLVersions := TIdSSLVersions(Pointer(@vRESTDWVersionsBase)^); +// PRESTDWSSLVersions(@SSLVersions)^; + {$IFDEF FPC} + TIdServerIOHandlerSSLOpenSSL(lHandler).OnGetPassword := @GetSSLPassword; + TIdServerIOHandlerSSLOpenSSL(lHandler).OnVerifyPeer := @SSLVerifyPeer; + {$ELSE} + TIdServerIOHandlerSSLOpenSSL(lHandler).OnGetPassword := GetSSLPassword; + TIdServerIOHandlerSSLOpenSSL(lHandler).OnVerifyPeer := SSLVerifyPeer; + {$ENDIF} + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.CertFile := ASSLCertFile; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.KeyFile := ASSLPrivateKeyFile; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.VerifyMode := vSSLVerifyMode; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.VerifyDepth := vSSLVerifyDepth; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.RootCertFile := vASSLRootCertFile; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.Mode := TIdSSLMode(GetSSlMode);//vSSLMode; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.CipherList := vCipherList; + HTTPServer.IOHandler := TIdServerIOHandlerSSLOpenSSL(lHandler); + End; {$ELSE} - lHandler.OnGetPassword := GetSSLPassword; - lHandler.OnVerifyPeer := SSLVerifyPeer; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.Method := TIdSSLVersion(GetSSlVersion);//aSSLMethod; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.SSLVersions := TIdSSLVersions(Pointer(@vRESTDWVersionsBase)^); +// PRESTDWSSLVersions(@SSLVersions)^; + {$IFDEF FPC} + TIdServerIOHandlerSSLOpenSSL(lHandler).OnGetPassword := @GetSSLPassword; + TIdServerIOHandlerSSLOpenSSL(lHandler).OnVerifyPeer := @SSLVerifyPeer; + {$ELSE} + TIdServerIOHandlerSSLOpenSSL(lHandler).OnGetPassword := GetSSLPassword; + TIdServerIOHandlerSSLOpenSSL(lHandler).OnVerifyPeer := SSLVerifyPeer; + {$ENDIF} + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.CertFile := ASSLCertFile; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.KeyFile := ASSLPrivateKeyFile; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.VerifyMode := vSSLVerifyMode; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.VerifyDepth := vSSLVerifyDepth; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.RootCertFile := vASSLRootCertFile; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.Mode := TIdSSLMode(GetSSlMode);//vSSLMode; + TIdServerIOHandlerSSLOpenSSL(lHandler).SSLOptions.CipherList := vCipherList; + HTTPServer.IOHandler := TIdServerIOHandlerSSLOpenSSL(lHandler); {$ENDIF} - lHandler.SSLOptions.CertFile := ASSLCertFile; - lHandler.SSLOptions.KeyFile := ASSLPrivateKeyFile; - lHandler.SSLOptions.VerifyMode := vSSLVerifyMode; - lHandler.SSLOptions.VerifyDepth := vSSLVerifyDepth; - lHandler.SSLOptions.RootCertFile := vASSLRootCertFile; - lHandler.SSLOptions.Mode := vSSLMode; - lHandler.SSLOptions.CipherList := vCipherList; - HTTPServer.IOHandler := lHandler; End Else HTTPServer.IOHandler := Nil; @@ -5165,7 +5566,7 @@ procedure TRESTDWIdProxyRequest.SetActive(Value : Boolean); With HTTPServer.Bindings.Add do Begin IP := ServerIPVersionConfig.IPv4Address; - IPVersion := Id_IPv4; + IPVersion := TIdIpVersion(Id_IPv4); Port := ServicePort; End; End; @@ -5175,7 +5576,7 @@ procedure TRESTDWIdProxyRequest.SetActive(Value : Boolean); With HTTPServer.Bindings.Add do Begin IP := ServerIPVersionConfig.IPv6Address; - IPVersion := Id_IPv6; + IPVersion := TIdIpVersion(Id_IPv6); Port := ServicePort; End; End; diff --git a/CORE/Source/Wizards/RDWCGIWizard.pas b/CORE/Source/Wizards/RDWCGIWizard.pas index 9d06dca9..d28285d7 100644 --- a/CORE/Source/Wizards/RDWCGIWizard.pas +++ b/CORE/Source/Wizards/RDWCGIWizard.pas @@ -343,7 +343,9 @@ Function GetDelphiGlobalKey : String; Begin Result := ''; - {$IF DEFINED(DELPHI12UP)} // delphi 11 Alexandria + {$IF DEFINED(DELPHI13UP)} // delphi 12 Athens + Result := '\Software\Embarcadero\BDS\37.0\Globals'; + {$ELSEIF DEFINED(DELPHI12UP)} // delphi 12 Athens Result := '\Software\Embarcadero\BDS\23.0\Globals'; {$ELSEIF DEFINED(DELPHI11UP)} // delphi 11 Alexandria Result := '\Software\Embarcadero\BDS\22.0\Globals'; diff --git a/CORE/Source/Wizards/STLWizard.pas b/CORE/Source/Wizards/STLWizard.pas index e186ceb5..e7400e17 100644 --- a/CORE/Source/Wizards/STLWizard.pas +++ b/CORE/Source/Wizards/STLWizard.pas @@ -458,9 +458,12 @@ {$IFDEF ver350} // delphi 11 Result := '\Software\Embarcadero\BDS\22.0\Globals'; {$ENDIF} - {$IFDEF ver360} // delphi 11 + {$IFDEF ver360} // delphi 12 Result := '\Software\Embarcadero\BDS\23.0\Globals'; {$ENDIF} + {$IFDEF ver370} // delphi 13 + Result := '\Software\Embarcadero\BDS\37.0\Globals'; + {$ENDIF} End; Function Getideprojectpath: String; diff --git a/CORE/Source/utils/JSON/uRESTDWJSONInterface.pas b/CORE/Source/utils/JSON/uRESTDWJSONInterface.pas index a74f6130..76e6dfbf 100644 --- a/CORE/Source/utils/JSON/uRESTDWJSONInterface.pas +++ b/CORE/Source/utils/JSON/uRESTDWJSONInterface.pas @@ -28,7 +28,7 @@ interface {$ENDIF} Uses SysUtils, Classes, Variants, - {$IFDEF RESTDWFMX} system.json, {$ELSE} uRESTDWJSON, {$ENDIF} + {$IFNDEF FPC} system.json, {$ELSE} uRESTDWJSON, {$ENDIF} uRESTDWConsts; Type @@ -115,8 +115,7 @@ implementation result := stringreplace(Astr, Asubstr, '', [rfReplaceAll, rfIgnoreCase]); End; -{$IFDEF RESTDWFMX} - +{$IFNDEF FPC} Function GetElementJSON(bArray: TJSONObject; Value: String): String; Var I: Integer; @@ -140,7 +139,7 @@ implementation Function TRESTDWJSONInterfaceObject.OpenArray(key: String) : TRESTDWJSONInterfaceArray; Var - {$IFDEF RESTDWFMX} + {$IFNDEF FPC} vEIndex: Integer; aJSONObject: TJSONObject; {$ENDIF} @@ -148,7 +147,7 @@ implementation aJSONArray : TJSONArray; Begin result := TRESTDWJSONInterfaceArray.Create; - {$IFDEF RESTDWFMX} + {$IFNDEF FPC} If TJSONObject(JSONObject).ClassName = 'TJSONObject' Then Begin aJSONObject := TJSONObject.ParseJSONValue(TJSONObject(JSONObject).ToJSON) as TJSONObject; @@ -172,7 +171,7 @@ implementation Function TRESTDWJSONInterfaceObject.OpenArray(Index: Integer) : TRESTDWJSONInterfaceArray; -{$IFDEF RESTDWFMX} +{$IFNDEF FPC} Var vEIndex: Integer; aJSONObject: TJSONObject; @@ -182,7 +181,7 @@ implementation result := TRESTDWJSONInterfaceArray.Create; If Assigned(vJSONObject) Then FreeAndNil(vJSONObject); - {$IFDEF RESTDWFMX} + {$IFNDEF FPC} If TJSONObject(JSONObject).ClassName = 'TJSONObject' Then Begin aJSONObject := TJSONObject.ParseJSONValue(TJSONObject(JSONObject).ToJSON) @@ -226,7 +225,7 @@ implementation result := 0; If vJSONObject = Nil then Exit; - {$IFDEF RESTDWFMX} + {$IFNDEF FPC} result := TJSONArray(vJSONObject).Size; {$ELSE} If TJSONObject(vJSONObject).ClassName = 'TJSONObject' Then @@ -242,7 +241,7 @@ implementation Function TRESTDWJSONInterfaceArray.GetObject(Index: Integer) : TRESTDWJSONInterfaceBase; Var - {$IFDEF RESTDWFMX} + {$IFNDEF FPC} aJSONObject : TJSONArray; aJSONValue : TJSONValue; {$ELSE} @@ -255,7 +254,7 @@ implementation vClassName := TJSONObject(vJSONObject).ClassName; If (Uppercase(TJSONObject(vJSONObject).ClassName) = Uppercase('TJSONArray')) Then Begin - {$IFDEF RESTDWFMX} + {$IFNDEF FPC} aJSONValue := TJSONObject.ParseJSONValue(TJSONObject(JSONObject).Get(Index).ToJSON); If aJSONValue is TJSONObject Then result.vJSONObject := TJSONBaseClass(aJSONValue as TJSONObject) @@ -289,7 +288,7 @@ implementation Else If (Uppercase(TJSONObject(vJSONObject).ClassName) = Uppercase('TJSONObject')) Then Begin - {$IFDEF RESTDWFMX} + {$IFNDEF FPC} result.vJSONObject := TJSONBaseClass (TJSONObject.ParseJSONValue(TJSONObject(vJSONObject).Get(Index) .JSONValue.ToJSON) as TJSONArray); @@ -322,7 +321,7 @@ implementation Begin If Assigned(vJSONObject) Then FreeAndNil(vJSONObject); - {$IFDEF RESTDWFMX} + {$IFNDEF FPC} If JSONValue[InitStrPos] = '[' then vJSONObject := TJSONBaseClass(TJSONObject.ParseJSONValue(JSONValue) as TJSONArray) Else If JSONValue[InitStrPos] = '{' then @@ -351,7 +350,7 @@ implementation Var I: Integer; vElementName, vClassName: String; - {$IFDEF RESTDWFMX} + {$IFNDEF FPC} aJSONObject: TJSONObject; vValueJSON: String; {$ELSE} @@ -366,7 +365,7 @@ implementation Exit; End; vClassName := TJSONObject(vJSONObject).ClassName; - {$IFDEF RESTDWFMX} + {$IFNDEF FPC} If (Uppercase(vClassName) = Uppercase('TRESTDWJSONInterfaceObject')) Or (Uppercase(vClassName) = Uppercase('TJSONObject')) Or (Uppercase(vClassName) = Uppercase('TRESTDWJSONInterfaceBase')) Then @@ -509,32 +508,31 @@ implementation Function TRESTDWJSONInterfaceObject.GetPair(Index: Integer): TRESTDWJSONPair; Var vElementName, vClassName: String; - {$IFDEF RESTDWFMX} + {$IFNDEF FPC} aJSONObject: TJSONObject; vValueJSON: String; {$ELSE} cNames : TJSONArray; {$ENDIF} Begin - result.isnull := False; - result.Value := 'null'; - If vJSONObject = Nil Then + result.isnull := False; + result.Value := 'null'; + If vJSONObject = Nil Then Begin - result.isnull := True; - Exit; + result.isnull := True; + Exit; End; vClassName := TJSONObject(vJSONObject).ClassName; - {$IFDEF RESTDWFMX} + {$IFNDEF FPC} If (Uppercase(vClassName) = Uppercase('TRESTDWJSONInterfaceObject')) Or - (Uppercase(vClassName) = Uppercase('TJSONObject')) Or - (Uppercase(vClassName) = Uppercase('TRESTDWJSONInterfaceBase')) Then - Begin + (Uppercase(vClassName) = Uppercase('TJSONObject')) Or + (Uppercase(vClassName) = Uppercase('TRESTDWJSONInterfaceBase')) Then + Begin If vClassName <> '_String' Then - Begin + Begin If (TJSONObject(vJSONObject).Count > index) Then Begin - result.Name := removestr(TJSONObject(vJSONObject).Pairs[index] - .JsonString.Value, '"'); + result.Name := removestr(TJSONObject(vJSONObject).Pairs[index].JsonString.Value, '"'); If TJSONObject(vJSONObject).Pairs[index].JSONValue is TJSONObject Then Begin result.ClassName := 'TJSONObject'; @@ -542,8 +540,7 @@ implementation .JSONValue.toString; // removestr(TJSONObject(vJSONObject).Pairs[index].JsonValue.tostring, '"'); If (vValueJSON = '') Or (Trim(vValueJSON) = '""') then - result.Value := TJSONObject(vJSONObject).Pairs[index] - .JSONValue.Value + result.Value := TJSONObject(vJSONObject).Pairs[index].JSONValue.Value else result.Value := vValueJSON; End @@ -558,36 +555,51 @@ implementation else result.Value := vValueJSON; End; - End; - End + End; + End Else - Begin + Begin result.Value := TJSONObject(vJSONObject).Pairs[index].JSONValue.Value; // removestr(TJSONObject(vJSONObject).Pairs[index].JsonValue.tostring, '"'); - result.ClassName := TJSONObject(vJSONObject).Pairs[index] - .JSONValue.ClassName; - End; - End + result.ClassName := TJSONObject(vJSONObject).Pairs[index].JSONValue.ClassName; + End; + End Else If Uppercase(vClassName) = Uppercase('TJSONArray') Then - Begin - aJSONObject := TJSONObject.ParseJSONValue(TJSONObject(vJSONObject) - .Get(index).ToJSON) as TJSONObject; - result.Name := removestr(aJSONObject.Value, '"'); - If (aJSONObject.toString = '') Or (Trim(aJSONObject.toString) = '""') then - result.Value := '' + Begin + vClassName := TJSONObject(vJSONObject).Get(index).classname; + If Uppercase(vClassName) = Uppercase('TJSONArray') Then + Begin + aJSONObject := TJSONObject.ParseJSONValue(TJSONObject(vJSONObject).Get(index).ToJSON) as TJSONObject; + result.Name := removestr(aJSONObject.Value, '"'); + If (aJSONObject.toString = '') Or (Trim(aJSONObject.toString) = '""') then + result.Value := '' + Else + result.Value := aJSONObject.toString; + result.ClassName := 'TJSONArray'; + FreeAndNil(aJSONObject); + End Else - result.Value := aJSONObject.toString; - result.ClassName := 'TJSONArray'; - FreeAndNil(aJSONObject); - End + Begin + result.Name := ''; + vValueJSON := TJSONObject(vJSONObject).Get(index).tostring; + result.Value := removestr(vValueJSON, '""'); + If vClassName = 'NULL' Then + result.ClassName := 'TJSONValue' + Else + result.ClassName := vClassName; + End; + End Else - Begin + Begin result.Name := ''; result.Value := TJSONValue(vJSONObject).Value; If (result.Value = '') Or (Trim(result.Value) = '""') then - result.Value := TJSONObject(vJSONObject).ToJSON; - result.ClassName := 'TJSONValue'; - End; + result.Value := removestr(TJSONObject(vJSONObject).ToJSON, '"'); + If vClassName = 'NULL' Then + result.ClassName := 'TJSONValue' + Else + result.ClassName := vClassName; + End; {$ELSE} If (Uppercase(vClassName) = Uppercase('TRESTDWJSONInterfaceObject')) Or (Uppercase(vClassName) = Uppercase('TJSONObject')) Or @@ -619,10 +631,10 @@ implementation If cNames <> Nil Then FreeAndNil(cNames); End - Else + Else Begin - result.Value := TJSONObject(vJSONObject).toString; - result.ClassName := TJSONObject(vJSONObject).ClassName; + result.Value := TJSONObject(vJSONObject).toString; + result.ClassName := TJSONObject(vJSONObject).ClassName; End; End Else If Uppercase(vClassName) = Uppercase('TJSONArray') Then @@ -647,27 +659,41 @@ implementation End Else Begin - vClassName := TJSONArray(vJSONObject).optJSONObject(index).ClassName; - result.ClassName := 'TJSONArray'; - cNames := TJSONObject(TJSONArray(vJSONObject).optJSONObject(index)).names; - If (cNames.length > 0) And (Uppercase(vClassName) = Uppercase('TJSONArray')) Then - Begin - If (cNames.length > index) Then - Begin - result.Name := cNames.Get(index).toString; - result.Value := TJSONObject(TJSONArray(vJSONObject).optJSONObject(index)).Get(result.Name).toString; - End; - End - Else + If Not Assigned(TJSONArray(vJSONObject).optJSONObject(index)) Then Begin + vClassName := TJSONArray(vJSONObject).get(index).ClassName; + If vClassName = 'NULL' Then + result.ClassName := 'tjsonstring'; result.Name := TJSONArray(vJSONObject).Get(index).toString; - If (Trim(result.Name) = '') Or + If (Trim(result.Name) = '') Or (UpperCase(Trim(result.Name)) = 'NULL') Or ((Pos('{', result.Name) > 0) Or (Pos('[', result.Name) > 0)) Then result.Name := 'arrayobj' + IntToStr(Index); result.Value := TJSONArray(vJSONObject).opt(Index).toString; + End + Else + Begin + vClassName := TJSONArray(vJSONObject).optJSONObject(index).ClassName; + result.ClassName := 'TJSONArray'; + cNames := TJSONObject(TJSONArray(vJSONObject).optJSONObject(index)).names; + If (cNames.length > 0) And (Uppercase(vClassName) = Uppercase('TJSONArray')) Then + Begin + If (cNames.length > index) Then + Begin + result.Name := cNames.Get(index).toString; + result.Value := TJSONObject(TJSONArray(vJSONObject).optJSONObject(index)).Get(result.Name).toString; + End; + End + Else + Begin + result.Name := TJSONArray(vJSONObject).Get(index).toString; + If (Trim(result.Name) = '') Or + ((Pos('{', result.Name) > 0) Or (Pos('[', result.Name) > 0)) Then + result.Name := 'arrayobj' + IntToStr(Index); + result.Value := TJSONArray(vJSONObject).opt(Index).toString; + End; + If Assigned(cNames) Then + FreeAndNil(cNames); End; - If Assigned(cNames) Then - FreeAndNil(cNames); End; End Else @@ -679,7 +705,7 @@ implementation If Trim(result.ClassName) = '' Then result.ClassName := vClassName; // Correção para null value - result.isnull := (result.Value = 'null') or (Result.Value = ''); + result.isnull := ((result.Value = 'null') or (Result.Value = '')); If result.isnull Then result.Value := ''; End; @@ -693,7 +719,7 @@ implementation result := 0; If vJSONObject = Nil Then Exit; - {$IFDEF RESTDWFMX} + {$IFNDEF FPC} If vJSONObject <> Nil Then result := TJSONObject(vJSONObject).Count; {$ELSE} @@ -820,18 +846,18 @@ constructor TRESTDWJSONInterfaceBase.Create(ParentJSON: TJSONBaseClass); End; function TRESTDWJSONInterfaceBase.PairCount: Integer; -{$IFNDEF RESTDWFMX} +{$IFDEF FPC} Var cNames : TJSONArray; {$ENDIF} begin - {$IFDEF RESTDWFMX} + {$IFNDEF FPC} result := TJSONObject(vJSONObject).Count; - {$ELSE} - cNames := TJSONObject(vJSONObject).names; - result := cNames.length; - FreeAndNil(cNames); - {$ENDIF} + {$ELSE} + cNames := TJSONObject(vJSONObject).names; + result := cNames.length; + FreeAndNil(cNames); + {$ENDIF} end; end. diff --git a/CORE/Source/utils/uRESTDWMassiveBuffer.pas b/CORE/Source/utils/uRESTDWMassiveBuffer.pas index ba37a165..6847600f 100644 --- a/CORE/Source/utils/uRESTDWMassiveBuffer.pas +++ b/CORE/Source/utils/uRESTDWMassiveBuffer.pas @@ -98,6 +98,7 @@ interface Property Items[Index : Integer] : TMassiveValue Read GetRec Write PutRec; Default; End; + PMassiveField = ^TMassiveField; TMassiveField = Class(TObject) Private vMassiveFields : TList; @@ -116,7 +117,8 @@ interface Function GetOldValue : Variant; Procedure SetValue(Value : Variant); Function GetModified : Boolean; - Procedure SetFieldType(Value : TObjectValue); + Procedure SetFieldType (Value : TObjectValue); + Procedure SetAutoGenerateValue(Value : Boolean); Protected Public Constructor Create(MassiveFields : TList; FieldIndex : Integer); @@ -125,7 +127,7 @@ interface Procedure LoadFromStream(Stream : TMemoryStream); Procedure SaveToStream (var Stream : TMemoryStream); Property Required : Boolean Read vRequired Write vRequired; - Property AutoGenerateValue : Boolean Read vAutoGenerateValue Write vAutoGenerateValue; + Property AutoGenerateValue : Boolean Read vAutoGenerateValue Write SetAutoGenerateValue; Property KeyField : Boolean Read vKeyField Write vKeyField; Property ReadOnly : Boolean Read vReadOnly Write vReadOnly; Property FieldType : TObjectValue Read vFieldType Write SetFieldType; @@ -137,7 +139,6 @@ interface Property Modified : Boolean Read GetModified; End; - PMassiveField = ^TMassiveField; TMassiveFields = Class(TList) Private vMassiveDataset : TMassiveDataset; @@ -151,7 +152,8 @@ interface Procedure Delete(Index : Integer); Overload; Procedure Delete(FieldName : String); Overload; Function Add (Item : TMassiveField) : Integer; Overload; - Function FieldByName(FieldName : String) : TMassiveField; + Function FieldByName (FieldName : String) : TMassiveField; Overload; + Function FieldByNameP(FieldName : String) : PMassiveField; Overload; Property Items[Index : Integer] : TMassiveField Read GetRec Write PutRec; Default; End; @@ -552,6 +554,11 @@ implementation End; End; +Procedure TMassiveField.SetAutoGenerateValue(Value : Boolean); +Begin + vAutoGenerateValue := Value; +End; + Procedure TMassiveField.SaveToStream(var Stream: TMemoryStream); Var vRecNo : Integer; @@ -724,7 +731,7 @@ implementation Inherited; End; -Function TMassiveFields.FieldByName(FieldName : String): TMassiveField; +Function TMassiveFields.FieldByName(FieldName : String) : TMassiveField; Var I : Integer; vFieldName, @@ -764,6 +771,46 @@ implementation End; End; +Function TMassiveFields.FieldByNameP(FieldName : String) : PMassiveField; +Var + I : Integer; + vFieldName, + vFieldNameB : String; + vResult : Boolean; + Function StrCompField(A, B : String) : Boolean; + Var + I, X : Integer; + Begin + Result := Length(A) > 0; + X := 0; + For I := 1 To Length(A) Do + Begin + Result := I <= Length(B); + If Result Then + Begin + Result := A[I] = B[X]; + If Not Result Then + Break; + End + Else + Break; + End; + End; +Begin + Result := Nil; + vFieldNameB := UpperCase(Trim(FieldName)); + For I := 0 To Self.Count -1 Do + Begin + vFieldName := UpperCase(Trim(Items[I].vFieldName)); + vResult := vFieldName = vFieldNameB; + If vResult Then + Begin + Result := TList(Self).Items[I]; + Break; + End; + End; +End; + Function TMassiveFields.GetRec(Index : Integer) : TMassiveField; Begin Result := Nil; @@ -963,7 +1010,7 @@ implementation Dispose(PMassiveValue(TList(Self).Items[Index])); {$ELSE} If Assigned(TMassiveValue(TList(Self).Items[Index]^)) Then - FreeAndNil(TMassiveValue(TList(Self).Items[Index]^)); + TMassiveValue(TList(Self).Items[Index]^).Free; Dispose(TList(Self).Items[Index]); {$ENDIF} Except @@ -1710,8 +1757,9 @@ implementation Procedure TMassiveDatasetBuffer.MassiveCheck(Dataset : TRESTDWClientSQLBase); Var - I : Integer; - MassiveField : TMassiveField; + I : Integer; + MassiveField : PMassiveField; + vAutoGenerateValue : Boolean; Begin vMasterCompTag := ''; vMyCompTag := Dataset.Componenttag; @@ -1740,26 +1788,28 @@ implementation (vReflectChanges And ((Dataset.Fields[I].ReadOnly) Or (Not(Dataset.Fields[I].ProviderFlags = [])))) Then Begin - MassiveField := vMassiveFields.FieldByName(Dataset.Fields[I].FieldName); - If MassiveField = Nil Then + MassiveField := vMassiveFields.FieldByNameP(Dataset.Fields[I].FieldName); + If MassiveField^ = Nil Then Begin - MassiveField := TMassiveField.Create(vMassiveFields, vMassiveFields.Count); - vMassiveFields.Add(MassiveField); + New(MassiveField); + MassiveField^ := TMassiveField.Create(vMassiveFields, vMassiveFields.Count); + vMassiveFields.Add(MassiveField^); End; - MassiveField.vReadOnly := Dataset.Fields[I].ReadOnly; - MassiveField.vRequired := Dataset.Fields[I].Required; - MassiveField.vKeyField := pfInKey in Dataset.Fields[I].ProviderFlags; - MassiveField.vFieldName := Dataset.Fields[I].FieldName; - MassiveField.vFieldType := FieldTypeToObjectValue(Dataset.Fields[I].DataType); - MassiveField.vSize := Dataset.Fields[I].DataSize; + MassiveField^.vReadOnly := Dataset.Fields[I].ReadOnly; + MassiveField^.vRequired := Dataset.Fields[I].Required; + MassiveField^.vKeyField := pfInKey in Dataset.Fields[I].ProviderFlags; + MassiveField^.vFieldName := Dataset.Fields[I].FieldName; + MassiveField^.vFieldType := FieldTypeToObjectValue(Dataset.Fields[I].DataType); + MassiveField^.vSize := Dataset.Fields[I].DataSize; {$IFDEF DELPHIXEUP} - MassiveField.vAutoGenerateValue := ((Dataset.Fields[I].AutoGenerateValue = arAutoInc) Or - (Lowercase(Dataset.Fields[I].FieldName) = Lowercase(vSequenceField))); - If Not (MassiveField.vAutoGenerateValue) Then - MassiveField.vAutoGenerateValue := ((Dataset.Fields[I].FieldKind = fkInternalCalc) Or + vAutoGenerateValue := ((Dataset.Fields[I].AutoGenerateValue = arAutoInc) Or (Lowercase(Dataset.Fields[I].FieldName) = Lowercase(vSequenceField))); + MassiveField^.AutoGenerateValue := vAutoGenerateValue; + If Not (MassiveField^.AutoGenerateValue) Then + MassiveField^.AutoGenerateValue := ((Dataset.Fields[I].FieldKind = fkInternalCalc) Or + (Lowercase(Dataset.Fields[I].FieldName) = Lowercase(vSequenceField))); {$ELSE} - MassiveField.vAutoGenerateValue := ((Dataset.Fields[I].FieldKind = fkInternalCalc) Or + MassiveField^.AutoGenerateValue := ((Dataset.Fields[I].FieldKind = fkInternalCalc) Or (Lowercase(Dataset.Fields[I].FieldName) = Lowercase(vSequenceField))); {$ENDIF} End @@ -1787,18 +1837,19 @@ implementation If vMassiveFields.Count > 0 Then Begin vMassiveLine.vMassiveMode := mmBrowse; - MassiveField := vMassiveFields.FieldByName(RESTDWFieldBookmark); + MassiveField := vMassiveFields.FieldByNameP(RESTDWFieldBookmark); If MassiveField = Nil Then Begin - MassiveField := TMassiveField.Create(vMassiveFields, vMassiveFields.Count); + New(MassiveField); + MassiveField^ := TMassiveField.Create(vMassiveFields, vMassiveFields.Count); vMassiveFields.Add(MassiveField); End; - MassiveField.vRequired := False; - MassiveField.vKeyField := False; - MassiveField.vFieldName := RESTDWFieldBookmark; - MassiveField.vFieldType := ovString; - MassiveField.vSize := 60; - MassiveField.vAutoGenerateValue := True; + MassiveField^.vRequired := False; + MassiveField^.vKeyField := False; + MassiveField^.vFieldName := RESTDWFieldBookmark; + MassiveField^.vFieldType := ovString; + MassiveField^.vSize := 60; + MassiveField^.vAutoGenerateValue := True; End; End; If Dataset Is TRESTDWClientSQL Then diff --git a/CORE/Source/utils/uRESTDWOpenSslLib.pas b/CORE/Source/utils/uRESTDWOpenSslLib.pas index 5d51f81b..60dd24f7 100644 --- a/CORE/Source/utils/uRESTDWOpenSslLib.pas +++ b/CORE/Source/utils/uRESTDWOpenSslLib.pas @@ -22498,7 +22498,7 @@ function LoadCrypto : boolean; {$IFDEF FPC} Pointer(OpenSSL_version_num) := GetProcAddress(RESTDW_CRYPYO_DLL_Handle, 'OpenSSL_version_num'); {$ELSE} - OpenSSL_version_num := GetProcAddress(RESTDW_CRYPYO_DLL_Handle, 'OpenSSL_version_num'); + // OpenSSL_version_num := GetProcAddress(RESTDW_CRYPYO_DLL_Handle, 'OpenSSL_version_num'); {$ENDIF} if @OpenSSL_version_num = nil then begin FreeLibrary(RESTDW_CRYPYO_DLL_Handle);