Showing with 8,765 additions and 6,676 deletions.
  1. +2 −3 .github/workflows/coverage.yaml
  2. +50 −19 .github/workflows/release.yaml
  3. +303 −30 Cargo.lock
  4. +4 −2 Cargo.toml
  5. +201 −43 LICENSE.txt
  6. +1 −1 README.md
  7. +5 −1 dozer-admin/Cargo.toml
  8. +1 −1 dozer-admin/src/errors.rs
  9. +60 −6 dozer-admin/src/server.rs
  10. +178 −14 dozer-admin/src/services/application_service.rs
  11. +12 −15 dozer-admin/src/services/connection_service.rs
  12. +1 −1 dozer-admin/src/tests/applications.rs
  13. +2 −1 dozer-api/Cargo.toml
  14. +47 −26 dozer-api/src/cache_builder/mod.rs
  15. +15 −6 dozer-api/src/grpc/client_server.rs
  16. +21 −0 dozer-api/src/grpc/internal/internal_pipeline_client.rs
  17. +50 −11 dozer-api/src/grpc/internal/internal_pipeline_server.rs
  18. +15 −2 dozer-api/src/grpc/typed/tests/fake_internal_pipeline_server.rs
  19. +2 −7 dozer-api/src/grpc/typed/tests/service.rs
  20. +38 −12 dozer-api/src/lib.rs
  21. +4 −3 dozer-api/src/rest/api_generator.rs
  22. +18 −13 dozer-api/src/rest/mod.rs
  23. +2 −21 dozer-api/src/rest/tests/auth.rs
  24. +3 −30 dozer-api/src/rest/tests/routes.rs
  25. +0 −6 dozer-api/src/test_utils.rs
  26. +3 −1 dozer-cache/Cargo.toml
  27. +27 −23 dozer-cache/src/cache/lmdb/cache/main_environment/conflict_resolution_tests.rs
  28. +29 −0 dozer-cache/src/cache/lmdb/cache/main_environment/hash_tests.rs
  29. +111 −44 dozer-cache/src/cache/lmdb/cache/main_environment/mod.rs
  30. +74 −0 dozer-cache/src/cache/lmdb/cache/main_environment/operation_log/hash_metadata.rs
  31. +4 −69 dozer-cache/src/cache/lmdb/cache/main_environment/operation_log/lmdb_val_impl.rs
  32. +143 −0 dozer-cache/src/cache/lmdb/cache/main_environment/operation_log/metadata.rs
  33. +173 −266 dozer-cache/src/cache/lmdb/cache/main_environment/operation_log/mod.rs
  34. +74 −0 dozer-cache/src/cache/lmdb/cache/main_environment/operation_log/primary_key_metadata.rs
  35. +314 −0 dozer-cache/src/cache/lmdb/cache/main_environment/operation_log/tests.rs
  36. +4 −4 dozer-cache/src/cache/lmdb/cache/mod.rs
  37. +10 −2 dozer-cache/src/cache/lmdb/cache/secondary_environment/indexer.rs
  38. +12 −5 dozer-cache/src/cache/lmdb/tests/basic.rs
  39. +8 −3 dozer-cache/src/cache/mod.rs
  40. +5 −17 dozer-cache/src/errors.rs
  41. +1 −0 dozer-cache/src/lib.rs
  42. +1 −1 dozer-core/Cargo.toml
  43. +4 −0 dozer-core/src/errors.rs
  44. +1 −2 dozer-ingestion/Cargo.toml
  45. +6 −6 dozer-ingestion/README.md
  46. +19 −20 dozer-ingestion/benches/connectors.rs
  47. +32 −38 dozer-ingestion/benches/grpc.rs
  48. +12 −12 dozer-ingestion/benches/helper.rs
  49. +5 −5 dozer-ingestion/examples/postgres/main.rs
  50. +17 −9 dozer-ingestion/src/connectors/delta_lake/connector.rs
  51. +3 −4 dozer-ingestion/src/connectors/delta_lake/reader.rs
  52. +2 −4 dozer-ingestion/src/connectors/delta_lake/schema_helper.rs
  53. +8 −10 dozer-ingestion/src/connectors/delta_lake/test/deltalake_test.rs
  54. +26 −20 dozer-ingestion/src/connectors/ethereum/log/connector.rs
  55. +3 −3 dozer-ingestion/src/connectors/ethereum/log/tests/connector.rs
  56. +14 −12 dozer-ingestion/src/connectors/ethereum/log/tests/helper.rs
  57. +17 −11 dozer-ingestion/src/connectors/ethereum/trace/connector.rs
  58. +7 −7 dozer-ingestion/src/connectors/ethereum/trace/tests.rs
  59. +41 −40 dozer-ingestion/src/connectors/grpc/connector.rs
  60. +6 −5 dozer-ingestion/src/connectors/grpc/tests.rs
  61. +16 −10 dozer-ingestion/src/connectors/kafka/connector.rs
  62. +22 −10 dozer-ingestion/src/connectors/mod.rs
  63. +22 −11 dozer-ingestion/src/connectors/object_store/connector.rs
  64. +37 −33 dozer-ingestion/src/connectors/object_store/schema_mapper.rs
  65. +21 −13 dozer-ingestion/src/connectors/object_store/table_reader.rs
  66. +23 −20 dozer-ingestion/src/connectors/object_store/tests/local_storage_tests.rs
  67. +13 −5 dozer-ingestion/src/connectors/postgres/connection/helper.rs
  68. +14 −11 dozer-ingestion/src/connectors/postgres/connection/tables_validator.rs
  69. +96 −77 dozer-ingestion/src/connectors/postgres/connection/validator.rs
  70. +34 −16 dozer-ingestion/src/connectors/postgres/connector.rs
  71. +2 −2 dozer-ingestion/src/connectors/postgres/helper.rs
  72. +41 −46 dozer-ingestion/src/connectors/postgres/iterator.rs
  73. +52 −69 dozer-ingestion/src/connectors/postgres/replication_slot_helper.rs
  74. +8 −8 dozer-ingestion/src/connectors/postgres/schema/helper.rs
  75. +42 −38 dozer-ingestion/src/connectors/postgres/schema/tests.rs
  76. +48 −40 dozer-ingestion/src/connectors/postgres/snapshotter.rs
  77. +12 −15 dozer-ingestion/src/connectors/postgres/test_utils.rs
  78. +24 −20 dozer-ingestion/src/connectors/postgres/tests/client.rs
  79. +36 −25 dozer-ingestion/src/connectors/postgres/tests/continue_replication_tests.rs
  80. +8 −6 dozer-ingestion/src/connectors/snowflake/connector/placeholder.rs
  81. +23 −17 dozer-ingestion/src/connectors/snowflake/connector/snowflake.rs
  82. +28 −24 dozer-ingestion/src/connectors/snowflake/tests.rs
  83. +4 −11 dozer-ingestion/src/errors.rs
  84. +18 −14 dozer-ingestion/src/test_util.rs
  85. +9 −9 dozer-ingestion/tests/test_connectors.rs
  86. +23 −19 dozer-ingestion/tests/test_suite/basic.rs
  87. +5 −2 dozer-ingestion/tests/test_suite/connectors/object_store/local_storage.rs
  88. +27 −13 dozer-ingestion/tests/test_suite/connectors/postgres.rs
  89. +7 −3 dozer-ingestion/tests/test_suite/mod.rs
  90. +5 −0 dozer-log-js/.gitignore
  91. +25 −0 dozer-log-js/Cargo.toml
  92. +119 −0 dozer-log-js/README.md
  93. +16 −0 dozer-log-js/examples/reader.js
  94. +34 −0 dozer-log-js/package-lock.json
  95. +30 −0 dozer-log-js/package.json
  96. +146 −0 dozer-log-js/src/lib.rs
  97. +118 −0 dozer-log-js/src/mapper.rs
  98. +19 −0 dozer-log-python/Cargo.toml
  99. +28 −0 dozer-log-python/README.md
  100. +11 −0 dozer-log-python/examples/reader.py
  101. +59 −0 dozer-log-python/src/lib.rs
  102. +91 −0 dozer-log-python/src/mapper.rs
  103. +13 −0 dozer-log/Cargo.toml
  104. +6 −6 {dozer-api → dozer-log}/examples/reader.rs
  105. +18 −0 dozer-log/src/errors.rs
  106. +5 −0 dozer-log/src/lib.rs
  107. +30 −51 dozer-api/src/cache_builder/log_reader.rs → dozer-log/src/reader.rs
  108. +1 −1 dozer-orchestrator/Cargo.toml
  109. +2 −2 dozer-orchestrator/src/errors.rs
  110. +12 −10 dozer-orchestrator/src/lib.rs
  111. +25 −43 dozer-orchestrator/src/main.rs
  112. +14 −6 dozer-orchestrator/src/pipeline/builder.rs
  113. +0 −65 dozer-orchestrator/src/pipeline/conflict_resolver.rs
  114. +34 −6 dozer-orchestrator/src/pipeline/connector_source.rs
  115. +30 −1 dozer-orchestrator/src/pipeline/log_sink.rs
  116. +0 −1 dozer-orchestrator/src/pipeline/mod.rs
  117. +11 −2 dozer-orchestrator/src/pipeline/source_builder.rs
  118. +12 −4 dozer-orchestrator/src/pipeline/tests/builder.rs
  119. +3 −2 dozer-orchestrator/src/pipeline/validate.rs
  120. +53 −0 dozer-orchestrator/src/shutdown.rs
  121. +9 −4 dozer-orchestrator/src/simple/executor.rs
  122. +2 −0 dozer-orchestrator/src/simple/mod.rs
  123. +94 −79 dozer-orchestrator/src/simple/orchestrator.rs
  124. +19 −17 dozer-orchestrator/src/simple/schemas.rs
  125. +10 −2 dozer-orchestrator/src/utils.rs
  126. +1 −1 dozer-sql/Cargo.toml
  127. +788 −252 dozer-sql/src/pipeline/expression/comparison.rs
  128. +28 −0 dozer-sql/src/pipeline/expression/execution.rs
  129. +172 −2 dozer-sql/src/pipeline/expression/tests/comparison.rs
  130. +0 −120 dozer-sql/src/pipeline/product/tests/factory_tests.rs
  131. +0 −186 dozer-sql/src/pipeline/product/tests/join_operator_test.rs
  132. +0 −551 dozer-sql/src/pipeline/product/tests/left_join_test.rs
  133. +0 −6 dozer-sql/src/pipeline/product/tests/mod.rs
  134. +1 −1 dozer-sql/src/pipeline/product/tests/pipeline_test.rs
  135. +0 −468 dozer-sql/src/pipeline/product/tests/set_operator_test.rs
  136. +1 −1 dozer-sql/src/pipeline/window/tests/pipeline_test.rs
  137. +1 −1 dozer-storage/Cargo.toml
  138. +1 −0 dozer-storage/src/lmdb_database/lmdb_val.rs
  139. +1 −0 dozer-storage/src/lmdb_map.rs
  140. +55 −6 dozer-storage/src/lmdb_multimap.rs
  141. +10 −7 dozer-tests/Cargo.toml
  142. +30 −0 dozer-tests/src/e2e_tests/cases/error_non_existing_primary_key/dozer-config.yaml
  143. +5 −0 dozer-tests/src/e2e_tests/cases/error_non_existing_primary_key/error.json
  144. +1 −1 dozer-tests/src/init.rs
  145. +2 −5 dozer-tests/src/lib.rs
  146. +2 −8 dozer-tests/src/{sqllogictest → sql_tests}/README.md
  147. +1 −1 dozer-tests/src/{sqllogictest/src → sql_tests}/arg.rs
  148. 0 dozer-tests/src/{sqllogictest/src → sql_tests}/error.rs
  149. +0 −70 dozer-tests/src/sql_tests/framework.rs
  150. +237 −0 dozer-tests/src/sql_tests/full/account.test
  151. +16 −25 dozer-tests/src/{sqllogictest/suits → sql_tests/full}/agg.test
  152. +232 −0 dozer-tests/src/sql_tests/full/aggregations.test
  153. +268 −0 dozer-tests/src/sql_tests/full/complex.test
  154. +42 −0 dozer-tests/src/sql_tests/full/example.test
  155. +129 −0 dozer-tests/src/sql_tests/full/functions.test
  156. +72 −84 dozer-tests/src/{sqllogictest/suits → sql_tests/full}/join.test
  157. +47 −35 dozer-tests/src/{sqllogictest/suits → sql_tests/full}/nested.test
  158. +87 −93 dozer-tests/src/{sqllogictest/suits → sql_tests/full}/simple.test
  159. +4 −12 dozer-tests/src/{sqllogictest/suits → sql_tests/full}/union.test
  160. +0 −268 dozer-tests/src/sql_tests/helper.rs
  161. +242 −0 dozer-tests/src/sql_tests/helper/mapper.rs
  162. +1 −1 dozer-tests/src/{sqllogictest/src/sql_tests → sql_tests/helper}/mod.rs
  163. +100 −87 dozer-tests/src/{sqllogictest/src/sql_tests → sql_tests/helper}/pipeline.rs
  164. +47 −0 dozer-tests/src/sql_tests/helper/schema.rs
  165. +227 −0 dozer-tests/src/sql_tests/logic_test.rs
  166. +0 −293 dozer-tests/src/sql_tests/mapper.rs
  167. +0 −7 dozer-tests/src/sql_tests/mod.rs
  168. +0 −366 dozer-tests/src/sql_tests/pipeline.rs
  169. +232 −0 dozer-tests/src/sql_tests/prototype/account.test
  170. +159 −0 dozer-tests/src/sql_tests/prototype/agg.test
  171. +152 −0 dozer-tests/src/sql_tests/prototype/aggregations.test
  172. +235 −0 dozer-tests/src/sql_tests/prototype/complex.test
  173. +32 −0 dozer-tests/src/sql_tests/prototype/example.test
  174. +126 −0 dozer-tests/src/sql_tests/prototype/functions.test
  175. +208 −0 dozer-tests/src/sql_tests/prototype/join.test
  176. +100 −0 dozer-tests/src/sql_tests/prototype/nested.test
  177. +107 −0 dozer-tests/src/sql_tests/prototype/simple.test
  178. +129 −0 dozer-tests/src/sql_tests/prototype/union.test
  179. +4 −4 dozer-tests/src/{sqllogictest/src → sql_tests}/validator.rs
  180. +0 −186 dozer-tests/src/sqllogictest/src/main.rs
  181. +0 −190 dozer-tests/src/sqllogictest/src/sql_tests/helper.rs
  182. +0 −297 dozer-tests/src/sqllogictest/src/sql_tests/mapper.rs
  183. +0 −35 dozer-tests/src/sqllogictest/suits/example.test
  184. +54 −107 dozer-tests/src/tests/e2e/basic.rs
  185. +19 −56 dozer-tests/src/tests/e2e/basic_sql.rs
  186. +45 −0 dozer-tests/src/tests/e2e/fixtures/left_join.yaml
  187. +42 −0 dozer-tests/src/tests/e2e/left_join.rs
  188. +103 −0 dozer-tests/src/tests/e2e/mod.rs
  189. +0 −223 dozer-tests/src/tests/mapper.rs
  190. +0 −4 dozer-tests/src/tests/mod.rs
  191. +0 −40 dozer-tests/src/tests/sql/agg.rs
  192. +0 −166 dozer-tests/src/tests/sql/helper.rs
  193. +0 −244 dozer-tests/src/tests/sql/join.rs
  194. +0 −16 dozer-tests/src/tests/sql/mod.rs
  195. +0 −147 dozer-tests/src/tests/sql/nested.rs
  196. +0 −30 dozer-tests/src/tests/sql/python_udf.rs
  197. +0 −43 dozer-tests/src/tests/sql/simple.rs
  198. +0 −112 dozer-tests/src/tests/sql/union.rs
  199. +3 −2 dozer-tracing/Cargo.toml
  200. +1 −0 dozer-tracing/src/lib.rs
  201. +33 −2 dozer-tracing/src/telemetry.rs
  202. +2 −1 dozer-types/Cargo.toml
  203. +21 −1 dozer-types/protos/admin.proto
  204. +15 −0 dozer-types/protos/admin_types.proto
  205. +9 −0 dozer-types/protos/internal.proto
  206. +1 −0 dozer-types/src/helper.rs
  207. +9 −3 dozer-types/src/models/app_config.rs
  208. +2 −2 dozer-types/src/types/mod.rs
  209. +1 −1 dozer-utils/Cargo.toml
5 changes: 2 additions & 3 deletions .github/workflows/coverage.yaml
Expand Up @@ -91,8 +91,7 @@ jobs:
SN_DRIVER: ${{ secrets.SN_DRIVER }}
shell: bash
run: |
source ./dozer-tests/python_udf/virtualenv.sh
cargo test test_connector_ --all-features --no-fail-fast -- --ignored
cargo test test_connector_ --lib --features snowflake,ethereum,kafka,python --no-fail-fast -- --ignored
- name: Run tests
env:
Expand All @@ -102,7 +101,7 @@ jobs:
shell: bash
run: |
source ./dozer-tests/python_udf/virtualenv.sh
cargo test --all-features --no-fail-fast
cargo test --features snowflake,ethereum,kafka,python --no-fail-fast
- name: Get current date
id: date
Expand Down
69 changes: 50 additions & 19 deletions .github/workflows/release.yaml
Expand Up @@ -99,7 +99,7 @@ jobs:
uses: arduino/setup-protoc@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}

- name: ⚡ Cache
uses: actions/cache@v3
with:
Expand Down Expand Up @@ -130,7 +130,13 @@ jobs:
args: --release --target ${{ matrix.target }}
- name: List target output files
run: ls -lR ./target


- name: Install cargo-deb
run: cargo install cargo-deb

- name: Compile deb file
run: cargo-deb -p dozer-orchestrator --output ./deb/${{matrix.asset_name}}.deb

- name: Prepare release assets
shell: bash
run: |
Expand All @@ -141,6 +147,10 @@ jobs:
mv release/ ${{matrix.asset_name}}/
tar -czvf ${{matrix.asset_name}}.tar.gz ${{matrix.asset_name}}/
cp deb/${{matrix.asset_name}}.deb ${{matrix.asset_name}}/
ls -l ${{matrix.asset_name}}
- name: Upload the release
uses: svenstaro/upload-release-action@v2
Expand All @@ -153,16 +163,20 @@ jobs:
release_name: "Development Release - ${{ needs.prepare.outputs.version }}"
prerelease: ${{ needs.prepare.outputs.prerelease }}
body: "${{ needs.prepare.outputs.release_body }}"

- name: Set env variables
env:
env:
VERSION: ${{ needs.prepare.outputs.version }}
RELEASE_NAME: ${{matrix.asset_name}}.tar.gz
run: |
echo "RELEASE_NAME=${{env.RELEASE_NAME}}" >> $GITHUB_ENV
echo "DEB_NAME=${{matrix.asset_name}}.deb" >> $GITHUB_ENV
echo "VERSION=${{env.VERSION}}" >> $GITHUB_ENV
echo "ARTIFACT_URL=https://${{ env.BUCKET_NAME }}.s3.ap-southeast-1.amazonaws.com/${{ env.VERSION }}/${{ env.RELEASE_NAME }}" >> $GITHUB_ENV
- name: List deb output files
run: ls -lR ./deb

- name: configure aws credentials
uses: aws-actions/configure-aws-credentials@v1
with:
Expand All @@ -174,7 +188,12 @@ jobs:
id: upload_s3
run: |
aws s3 cp $RELEASE_NAME s3://${{ env.BUCKET_NAME }}/$VERSION/$RELEASE_NAME
- name: Upload release deb to S3
id: upload_s3_deb
run: |
aws s3 cp deb/$DEB_NAME s3://${{ env.BUCKET_NAME }}/$VERSION/$DEB_NAME
release-macos-apple-silicon:
name: Release binary for macOS silicon
runs-on: ${{ matrix.os }}
Expand Down Expand Up @@ -222,10 +241,10 @@ jobs:
with:
command: build
args: --release --target ${{ matrix.target }}

- name: List target output files
run: ls -lR ./target

- name: Prepare release assets
shell: bash
run: |
Expand All @@ -250,7 +269,7 @@ jobs:
body: "${{ needs.prepare.outputs.release_body }}"

- name: Set env variables
env:
env:
VERSION: ${{ needs.prepare.outputs.version }}
RELEASE_NAME: ${{matrix.asset_name}}.tar.gz
run: |
Expand All @@ -270,12 +289,9 @@ jobs:
run: |
aws s3 cp $RELEASE_NAME s3://${{ env.BUCKET_NAME }}/$VERSION/$RELEASE_NAME
release:
name: Release
runs-on:
runs-on:
labels: ${{ matrix.os }}
needs: prepare
timeout-minutes: 60
Expand Down Expand Up @@ -323,6 +339,14 @@ jobs:
- name: Build package
run: cargo build --release

- name: Install cargo-deb
if: matrix.os == 'ubuntu-20-16-cores'
run: cargo install cargo-deb

- name: Compile deb file
if: matrix.os == 'ubuntu-20-16-cores'
run: cargo-deb -p dozer-orchestrator --output ./deb/${{matrix.asset_name}}.deb

# - name: Build Linux binary
# if: matrix.os == 'ubuntu-20-16-cores'
# run: cargo build --features=snowflake --release
Expand All @@ -339,6 +363,10 @@ jobs:
tar -czvf ${{matrix.asset_name}}.tar.gz \
${{matrix.asset_name}}/
cp deb/${{matrix.asset_name}}.deb ${{matrix.asset_name}}/ 2>/dev/null || :
ls -l ${{matrix.asset_name}}
- name: Upload the release
uses: svenstaro/upload-release-action@v2
with:
Expand All @@ -352,11 +380,12 @@ jobs:
body: "${{ needs.prepare.outputs.release_body }}"

- name: Set env variables
env:
env:
VERSION: ${{ needs.prepare.outputs.version }}
RELEASE_NAME: ${{matrix.asset_name}}.tar.gz
run: |
echo "RELEASE_NAME=${{env.RELEASE_NAME}}" >> $GITHUB_ENV
echo "DEB_NAME=${{matrix.asset_name}}.deb" >> $GITHUB_ENV
echo "VERSION=${{env.VERSION}}" >> $GITHUB_ENV
echo "ARTIFACT_URL=https://${{ env.BUCKET_NAME }}.s3.ap-southeast-1.amazonaws.com/${{ env.VERSION }}/${{ env.RELEASE_NAME }}" >> $GITHUB_ENV
Expand All @@ -374,6 +403,12 @@ jobs:
run: |
aws s3 cp $RELEASE_NAME s3://${{ env.BUCKET_NAME }}/$VERSION/$RELEASE_NAME
- name: Upload release deb to S3
id: upload_s3_deb
if: matrix.os == 'ubuntu-20-16-cores'
run: |
aws s3 cp deb/$DEB_NAME s3://${{ env.BUCKET_NAME }}/$VERSION/$DEB_NAME
- name: Build, tag, and push image to Amazon ECR
id: build_push_ecr
if: matrix.os == 'ubuntu-20-16-cores'
Expand All @@ -383,7 +418,7 @@ jobs:
aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin $ECR_REGISTRY
docker build -f ci/Dockerfile -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG -t $ECR_REGISTRY/$ECR_REPOSITORY:$GITHUB_SHA .
docker push $ECR_REGISTRY/$ECR_REPOSITORY --all-tags
- name: Update latest image if releasing
if: (needs.prepare.outputs.prerelease == 'false') && (matrix.os == 'ubuntu-20-16-cores')
env:
Expand All @@ -396,7 +431,7 @@ jobs:
if: ${{ env.VERSION != 'dev' && matrix.os == 'ubuntu-20-16-cores'}}
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_RELEASE_HOOK }}
DISCORD_EMBEDS: '[ {
DISCORD_EMBEDS: '[ {
"title": "New version `${{env.VERSION}}` released",
"author": { "icon_url": "https://avatars.githubusercontent.com/${{ github.actor }}", "name": "${{ github.actor }}", "url": "https://github.com/${{github.actor}}" },
"fields": [
Expand All @@ -408,7 +443,3 @@ jobs:
"color": 990099
}]'
uses: Ilshidur/action-discord@master