excel-dbapi 0.2.0__tar.gz → 0.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. excel_dbapi-0.3.0/.editorconfig +9 -0
  2. excel_dbapi-0.3.0/.github/ISSUE_TEMPLATE/bug_report.yml +69 -0
  3. excel_dbapi-0.3.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
  4. excel_dbapi-0.3.0/.github/ISSUE_TEMPLATE/feature_request.yml +65 -0
  5. excel_dbapi-0.3.0/.github/ISSUE_TEMPLATE/task.yml +56 -0
  6. excel_dbapi-0.3.0/.github/PULL_REQUEST_TEMPLATE.md +33 -0
  7. excel_dbapi-0.3.0/.github/RELEASE_CHECKLIST.md +10 -0
  8. excel_dbapi-0.3.0/.github/RELEASE_NOTES_TEMPLATE.md +25 -0
  9. excel_dbapi-0.3.0/.github/dependabot.yml +22 -0
  10. excel_dbapi-0.3.0/.github/labels.yml +47 -0
  11. excel_dbapi-0.3.0/.github/release.yml +21 -0
  12. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/.github/workflows/ci.yml +3 -3
  13. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/.github/workflows/publish-pypi.yml +5 -2
  14. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/.gitignore +7 -0
  15. excel_dbapi-0.3.0/.pre-commit-config.yaml +21 -0
  16. excel_dbapi-0.3.0/CHANGELOG.md +66 -0
  17. excel_dbapi-0.3.0/CODE_OF_CONDUCT.md +56 -0
  18. excel_dbapi-0.3.0/CONTRIBUTING.md +64 -0
  19. excel_dbapi-0.3.0/Makefile +81 -0
  20. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/PKG-INFO +82 -40
  21. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/README.md +81 -39
  22. excel_dbapi-0.3.0/SECURITY.md +35 -0
  23. excel_dbapi-0.3.0/SUPPORT.md +46 -0
  24. excel_dbapi-0.3.0/cliff.toml +32 -0
  25. excel_dbapi-0.3.0/codecov.yml +13 -0
  26. excel_dbapi-0.3.0/docs/SQL_SPEC.md +398 -0
  27. excel_dbapi-0.3.0/logo.svg +21 -0
  28. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/pyproject.toml +1 -1
  29. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/__init__.py +1 -1
  30. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/parser.py +81 -7
  31. excel_dbapi-0.3.0/tests/graph/__init__.py +0 -0
  32. excel_dbapi-0.3.0/tests/test_golden_ddl.py +56 -0
  33. excel_dbapi-0.3.0/tests/test_golden_delete.py +81 -0
  34. excel_dbapi-0.3.0/tests/test_golden_insert.py +103 -0
  35. excel_dbapi-0.3.0/tests/test_golden_select.py +146 -0
  36. excel_dbapi-0.3.0/tests/test_golden_update.py +92 -0
  37. excel_dbapi-0.3.0/tests/test_low_coverage_modules.py +408 -0
  38. excel_dbapi-0.3.0/tests/test_reflection.py +204 -0
  39. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_sql_extensions.py +12 -4
  40. excel_dbapi-0.2.0/.github/ISSUE_TEMPLATE/bug_report.md +0 -32
  41. excel_dbapi-0.2.0/.github/ISSUE_TEMPLATE/feature_request.md +0 -16
  42. excel_dbapi-0.2.0/.github/ISSUE_TEMPLATE/release_checklist.md +0 -23
  43. excel_dbapi-0.2.0/.github/pull_request_template.md +0 -13
  44. excel_dbapi-0.2.0/CHANGELOG.md +0 -18
  45. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/LICENSE +0 -0
  46. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/docs/DEVELOPMENT.md +0 -0
  47. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/docs/OPERATIONS.md +0 -0
  48. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/docs/PUBLIC_ROADMAP.md +0 -0
  49. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/docs/QUICKSTART_10_MIN.md +0 -0
  50. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/docs/ROADMAP.md +0 -0
  51. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/docs/USAGE.md +0 -0
  52. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/examples/advanced_query.py +0 -0
  53. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/examples/basic_usage.py +0 -0
  54. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/examples/education/lesson_01_first_query.py +0 -0
  55. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/examples/education/lesson_02_parameter_binding.py +0 -0
  56. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/examples/pandas_engine.py +0 -0
  57. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/examples/transactions.py +0 -0
  58. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/examples/write_operations.py +0 -0
  59. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/connection.py +0 -0
  60. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/cursor.py +0 -0
  61. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/engines/__init__.py +0 -0
  62. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/engines/base.py +0 -0
  63. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/engines/graph/__init__.py +0 -0
  64. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/engines/graph/auth.py +0 -0
  65. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/engines/graph/backend.py +0 -0
  66. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/engines/graph/client.py +0 -0
  67. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/engines/graph/locator.py +0 -0
  68. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/engines/graph/session.py +0 -0
  69. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/engines/openpyxl/__init__.py +0 -0
  70. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/engines/openpyxl/backend.py +0 -0
  71. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/engines/pandas/__init__.py +0 -0
  72. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/engines/pandas/backend.py +0 -0
  73. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/engines/registry.py +0 -0
  74. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/engines/result.py +0 -0
  75. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/exceptions.py +0 -0
  76. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/executor.py +0 -0
  77. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/openpyxl/__init__.py +0 -0
  78. /excel_dbapi-0.2.0/tests/__init__.py → /excel_dbapi-0.3.0/src/excel_dbapi/py.typed +0 -0
  79. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/reflection.py +0 -0
  80. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/src/excel_dbapi/sanitize.py +0 -0
  81. {excel_dbapi-0.2.0/tests/graph → excel_dbapi-0.3.0/tests}/__init__.py +0 -0
  82. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/data/sample.xlsx +0 -0
  83. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/graph/test_auth.py +0 -0
  84. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/graph/test_backend.py +0 -0
  85. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/graph/test_client.py +0 -0
  86. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/graph/test_locator.py +0 -0
  87. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_additional_coverage.py +0 -0
  88. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_api_extensions.py +0 -0
  89. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_atomic_rollback_integration.py +0 -0
  90. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_base_engine.py +0 -0
  91. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_connection.py +0 -0
  92. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_connection_graph.py +0 -0
  93. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_cursor.py +0 -0
  94. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_engine.py +0 -0
  95. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_engine_state.py +0 -0
  96. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_error_paths.py +0 -0
  97. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_exceptions.py +0 -0
  98. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_executor.py +0 -0
  99. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_formula_injection.py +0 -0
  100. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_integration.py +0 -0
  101. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_openpyxl_edge_cases.py +0 -0
  102. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_openpyxl_facade.py +0 -0
  103. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_parser.py +0 -0
  104. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_parser_errors.py +0 -0
  105. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_pep249_compliance.py +0 -0
  106. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_sql_boundaries.py +0 -0
  107. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_sql_features.py +0 -0
  108. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_stage1_fixes.py +0 -0
  109. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_where_operators.py +0 -0
  110. {excel_dbapi-0.2.0 → excel_dbapi-0.3.0}/tests/test_write_operations.py +0 -0
@@ -0,0 +1,9 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ end_of_line = lf
6
+ indent_style = space
7
+ indent_size = 4
8
+ trim_trailing_whitespace = true
9
+ insert_final_newline = true
@@ -0,0 +1,69 @@
1
+ name: Bug Report
2
+ description: Report a bug or unexpected behavior in excel-dbapi
3
+ title: "[Bug]: "
4
+ labels: ["bug"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Thanks for taking the time to report a bug in `excel-dbapi`!
10
+
11
+ - type: textarea
12
+ id: problem
13
+ attributes:
14
+ label: Problem
15
+ description: A clear description of the bug
16
+ placeholder: What happened? What did you expect to happen?
17
+ validations:
18
+ required: true
19
+
20
+ - type: textarea
21
+ id: current-state
22
+ attributes:
23
+ label: Current State
24
+ description: Describe the current behavior and any relevant context
25
+ placeholder: |
26
+ - What is happening now?
27
+ - Any error messages or logs?
28
+ validations:
29
+ required: true
30
+
31
+ - type: textarea
32
+ id: steps-to-reproduce
33
+ attributes:
34
+ label: Steps to Reproduce
35
+ description: How can we reproduce this issue?
36
+ placeholder: |
37
+ 1. Install package...
38
+ 2. Run query...
39
+ 3. See error...
40
+ validations:
41
+ required: true
42
+
43
+ - type: textarea
44
+ id: expected-outcome
45
+ attributes:
46
+ label: Expected Outcome
47
+ description: What should happen instead?
48
+ validations:
49
+ required: true
50
+
51
+ - type: textarea
52
+ id: environment
53
+ attributes:
54
+ label: Environment
55
+ description: Your environment details
56
+ placeholder: |
57
+ - Python version:
58
+ - Package version:
59
+ - OS:
60
+ validations:
61
+ required: false
62
+
63
+ - type: textarea
64
+ id: references
65
+ attributes:
66
+ label: References
67
+ description: Any related files, links, or resources
68
+ validations:
69
+ required: false
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Documentation
4
+ url: https://github.com/yeongseon/excel-dbapi#readme
5
+ about: Check our README for usage guides and examples
6
+ - name: Security Advisories
7
+ url: https://github.com/yeongseon/excel-dbapi/security/advisories/new
8
+ about: Report security issues privately via GitHub Security Advisories
@@ -0,0 +1,65 @@
1
+ name: Feature Request
2
+ description: Suggest a new feature or enhancement for excel-dbapi
3
+ title: "[Feature]: "
4
+ labels: ["enhancement"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Thanks for suggesting a feature for `excel-dbapi`!
10
+
11
+ - type: textarea
12
+ id: problem
13
+ attributes:
14
+ label: Problem
15
+ description: What problem does this feature solve?
16
+ placeholder: Describe the problem or limitation you're facing
17
+ validations:
18
+ required: true
19
+
20
+ - type: textarea
21
+ id: current-state
22
+ attributes:
23
+ label: Current State
24
+ description: How does the project currently handle this (if at all)?
25
+ placeholder: |
26
+ - Current behavior
27
+ - Current limitations
28
+ validations:
29
+ required: false
30
+
31
+ - type: textarea
32
+ id: proposed-solution
33
+ attributes:
34
+ label: Proposed Solution
35
+ description: How would you like this to work?
36
+ placeholder: Describe your ideal solution
37
+ validations:
38
+ required: true
39
+
40
+ - type: textarea
41
+ id: tasks
42
+ attributes:
43
+ label: Tasks
44
+ description: Break down the implementation into tasks (if known)
45
+ placeholder: |
46
+ - [ ] Task 1
47
+ - [ ] Task 2
48
+ validations:
49
+ required: false
50
+
51
+ - type: textarea
52
+ id: expected-outcome
53
+ attributes:
54
+ label: Expected Outcome
55
+ description: What should be the end result?
56
+ validations:
57
+ required: true
58
+
59
+ - type: textarea
60
+ id: references
61
+ attributes:
62
+ label: References
63
+ description: Any related files, links, documentation, or examples
64
+ validations:
65
+ required: false
@@ -0,0 +1,56 @@
1
+ name: Task
2
+ description: A general task or chore (refactoring, maintenance, etc.)
3
+ title: "[Task]: "
4
+ labels: ["chore"]
5
+ body:
6
+ - type: markdown
7
+ attributes:
8
+ value: |
9
+ Use this template for maintenance tasks, refactoring, or other chores.
10
+
11
+ - type: textarea
12
+ id: problem
13
+ attributes:
14
+ label: Problem
15
+ description: Why is this task needed?
16
+ placeholder: Describe the motivation for this task
17
+ validations:
18
+ required: true
19
+
20
+ - type: textarea
21
+ id: current-state
22
+ attributes:
23
+ label: Current State
24
+ description: What is the current situation?
25
+ placeholder: |
26
+ - Current code/config state
27
+ - Any issues or limitations
28
+ validations:
29
+ required: true
30
+
31
+ - type: textarea
32
+ id: tasks
33
+ attributes:
34
+ label: Tasks
35
+ description: Break down the work into actionable items
36
+ placeholder: |
37
+ - [ ] Task 1
38
+ - [ ] Task 2
39
+ validations:
40
+ required: true
41
+
42
+ - type: textarea
43
+ id: expected-outcome
44
+ attributes:
45
+ label: Expected Outcome
46
+ description: What should be the result when this is complete?
47
+ validations:
48
+ required: true
49
+
50
+ - type: textarea
51
+ id: references
52
+ attributes:
53
+ label: References
54
+ description: Any related files, documentation, or resources
55
+ validations:
56
+ required: false
@@ -0,0 +1,33 @@
1
+ ## Summary
2
+
3
+ <!-- Brief description of changes -->
4
+
5
+ ## Changes
6
+
7
+ <!-- List the specific changes made -->
8
+
9
+ -
10
+
11
+ ## Type of Change
12
+
13
+ <!-- Check the relevant option -->
14
+
15
+ - [ ] Bug fix (non-breaking change that fixes an issue)
16
+ - [ ] New feature (non-breaking change that adds functionality)
17
+ - [ ] Breaking change (fix or feature that would cause existing functionality to change)
18
+ - [ ] Documentation update
19
+ - [ ] Refactoring (no functional changes)
20
+ - [ ] Chore (maintenance, dependencies, CI, etc.)
21
+
22
+ ## Checklist
23
+
24
+ - [ ] My code follows the project's code style
25
+ - [ ] I have run `make check-all`
26
+ - [ ] I have run `make test` and all tests pass
27
+ - [ ] I have added tests for new functionality (if applicable)
28
+ - [ ] I have updated documentation (if applicable)
29
+ - [ ] My changes do not introduce new warnings
30
+
31
+ ## Related Issues
32
+
33
+ <!-- Link to related issues: Closes #123, Fixes #456 -->
@@ -0,0 +1,10 @@
1
+ # Release Checklist
2
+
3
+ - [ ] Verify CI is green on `main`
4
+ - [ ] Run local quality gate with `make check-all`
5
+ - [ ] Build distribution artifacts with `make build`
6
+ - [ ] Update version in `pyproject.toml`
7
+ - [ ] Update `CHANGELOG.md` for the release
8
+ - [ ] Tag release `vX.Y.Z`
9
+ - [ ] Verify package publish succeeded
10
+ - [ ] Publish GitHub Release notes
@@ -0,0 +1,25 @@
1
+ # Release Notes
2
+
3
+ ## Highlights
4
+
5
+ -
6
+
7
+ ## Breaking Changes
8
+
9
+ -
10
+
11
+ ## Features
12
+
13
+ -
14
+
15
+ ## Fixes
16
+
17
+ -
18
+
19
+ ## Documentation
20
+
21
+ -
22
+
23
+ ## Notes
24
+
25
+ -
@@ -0,0 +1,22 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "pip"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+ commit-message:
8
+ prefix: "chore(deps)"
9
+ labels:
10
+ - "dependencies"
11
+ open-pull-requests-limit: 10
12
+
13
+ - package-ecosystem: "github-actions"
14
+ directory: "/"
15
+ schedule:
16
+ interval: "weekly"
17
+ commit-message:
18
+ prefix: "chore(deps)"
19
+ labels:
20
+ - "dependencies"
21
+ - "github-actions"
22
+ open-pull-requests-limit: 10
@@ -0,0 +1,47 @@
1
+ - name: "dependencies"
2
+ color: "0075ca"
3
+ description: "Pull requests that update a dependency file"
4
+
5
+ - name: "github-actions"
6
+ color: "e4e669"
7
+ description: "Pull requests that update GitHub Actions"
8
+
9
+ - name: "bug"
10
+ color: "d73a4a"
11
+ description: "Something isn't working"
12
+
13
+ - name: "enhancement"
14
+ color: "a2eeef"
15
+ description: "New feature or request"
16
+
17
+ - name: "documentation"
18
+ color: "0075ca"
19
+ description: "Improvements or additions to documentation"
20
+
21
+ - name: "question"
22
+ color: "d876e3"
23
+ description: "Further information is requested"
24
+
25
+ - name: "good first issue"
26
+ color: "7057ff"
27
+ description: "Good for newcomers"
28
+
29
+ - name: "help wanted"
30
+ color: "008672"
31
+ description: "Extra attention is needed"
32
+
33
+ - name: "security"
34
+ color: "e11d48"
35
+ description: "Security-related issue or pull request"
36
+
37
+ - name: "duplicate"
38
+ color: "cfd3d7"
39
+ description: "This issue or pull request already exists"
40
+
41
+ - name: "wontfix"
42
+ color: "ffffff"
43
+ description: "This will not be worked on"
44
+
45
+ - name: "invalid"
46
+ color: "e4e669"
47
+ description: "This doesn't seem right"
@@ -0,0 +1,21 @@
1
+ changelog:
2
+ categories:
3
+ - title: "🚀 Features"
4
+ labels:
5
+ - enhancement
6
+ - title: "🐛 Bug Fixes"
7
+ labels:
8
+ - bug
9
+ - title: "📖 Documentation"
10
+ labels:
11
+ - documentation
12
+ - title: "🧹 Maintenance"
13
+ labels:
14
+ - dependencies
15
+ - chore
16
+ - title: "Other Changes"
17
+ labels:
18
+ - "*"
19
+ exclude:
20
+ labels:
21
+ - skip-changelog
@@ -11,9 +11,9 @@ jobs:
11
11
  matrix:
12
12
  python-version: ["3.10", "3.11", "3.12", "3.13"]
13
13
  steps:
14
- - uses: actions/checkout@v4
14
+ - uses: actions/checkout@v6
15
15
  - name: Set up Python
16
- uses: actions/setup-python@v5
16
+ uses: actions/setup-python@v6
17
17
  with:
18
18
  python-version: ${{ matrix.python-version }}
19
19
  - name: Install dependencies
@@ -24,7 +24,7 @@ jobs:
24
24
  run: pytest tests/ -v --cov=excel_dbapi --cov-report=xml --cov-report=term-missing
25
25
  - name: Upload coverage to Codecov
26
26
  if: matrix.python-version == '3.12'
27
- uses: codecov/codecov-action@v5
27
+ uses: codecov/codecov-action@v6
28
28
  with:
29
29
  files: coverage.xml
30
30
  fail_ci_if_error: false
@@ -11,10 +11,10 @@ jobs:
11
11
  permissions:
12
12
  id-token: write
13
13
  steps:
14
- - uses: actions/checkout@v4
14
+ - uses: actions/checkout@v6
15
15
 
16
16
  - name: Set up Python
17
- uses: actions/setup-python@v5
17
+ uses: actions/setup-python@v6
18
18
  with:
19
19
  python-version: "3.12"
20
20
 
@@ -24,5 +24,8 @@ jobs:
24
24
  - name: Build package
25
25
  run: python -m build
26
26
 
27
+ - name: Validate package
28
+ run: pip install twine && twine check dist/*
29
+
27
30
  - name: Publish to PyPI
28
31
  uses: pypa/gh-action-pypi-publish@release/v1
@@ -22,6 +22,13 @@ build/
22
22
  dist/
23
23
  *.egg-info/
24
24
 
25
+ # Docs
26
+ site/
27
+
28
+ # Review
29
+ .venv-review/
30
+ .venv-review-cli/
31
+
25
32
  # Data files
26
33
  *.xlsx
27
34
  !tests/data/*.xlsx
@@ -0,0 +1,21 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.15.6
4
+ hooks:
5
+ - id: ruff-format
6
+ - id: ruff
7
+ args: ["--fix"]
8
+
9
+ - repo: https://github.com/pre-commit/mirrors-mypy
10
+ rev: v1.19.1
11
+ hooks:
12
+ - id: mypy
13
+ language: python
14
+ files: "^src/"
15
+ pass_filenames: false
16
+ args:
17
+ [
18
+ "--config-file=pyproject.toml",
19
+ "--install-types",
20
+ "--non-interactive"
21
+ ]
@@ -0,0 +1,66 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ ## [0.3.0] - 2026-04-12
6
+
7
+ ### Added
8
+ - Formal SQL subset specification (`docs/SQL_SPEC.md`) with EBNF grammar
9
+ - Parser golden tests for all statement families (SELECT, INSERT, UPDATE, DELETE, DDL)
10
+ - Reflection helpers unit tests
11
+ - Comprehensive low-coverage module tests (executor, backends, graph engine)
12
+
13
+ ### Changed
14
+ - README restructured: limitations-first layout, Graph API moved to experimental section
15
+ - Test coverage: 84% → 98% (397 tests)
16
+
17
+ ### Fixed
18
+ - Parser tokenizer: quoted strings with embedded spaces now handled correctly
19
+ - Parser: escaped quotes (`''`, `""`) parsed correctly in all contexts
20
+
21
+ ## [0.2.1] - 2026-04-12
22
+
23
+ ### Added
24
+ - Project logo (modern minimalist SVG)
25
+ - Comprehensive README documentation (WHERE operators section, Related Projects)
26
+ - Contributing guide, Code of Conduct, Security and Support policies
27
+ - Development tooling: Makefile, .editorconfig, pre-commit-config, codecov.yml, git-cliff config
28
+ - GitHub issue/PR templates and project management files
29
+ - py.typed marker for PEP 561 compliance
30
+ - twine check step in publish workflow
31
+
32
+ ### Changed
33
+ - Classifier updated from Alpha to Beta
34
+ - Homepage metadata updated
35
+ - Version bumped to 0.2.1
36
+
37
+ ### Fixed
38
+ - Oracle review findings: rollback docs, absolute logo URLs, metadata alignment
39
+
40
+ ## [0.2.0] - 2026-04-12
41
+
42
+ ### Added
43
+ - IN, BETWEEN, LIKE operators for SQL parser and executor
44
+ - Test coverage reporting with Codecov CI integration
45
+
46
+ ### Changed
47
+ - Version bumped from 0.1.x to 0.2.0 (skipping reserved PyPI versions)
48
+
49
+ ### Fixed
50
+ - All mypy strict errors resolved; strict mode enabled in CI
51
+ - CI: install pandas extra for test suite
52
+
53
+ ## [0.1.0] - 2026-04-12
54
+
55
+ ### Added
56
+ - PEP 249 (DB-API 2.0) compliant driver for Excel files
57
+ - SQL support: SELECT, INSERT, UPDATE, DELETE, CREATE TABLE, DROP TABLE
58
+ - WHERE clauses with AND/OR, comparison operators, LIKE, IN, IS NULL/IS NOT NULL
59
+ - ORDER BY and LIMIT for SELECT queries
60
+ - Openpyxl engine (default) for local .xlsx files
61
+ - Pandas engine (optional) for DataFrame-based operations
62
+ - Microsoft Graph API engine (optional) for remote Excel files
63
+ - Formula injection defense (enabled by default)
64
+ - Transaction simulation (commit/rollback)
65
+ - Reflection helpers for dialect integration
66
+ - Metadata sheet support for schema persistence
@@ -0,0 +1,56 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ We as members, contributors, and leaders pledge to make participation in our
6
+ community a harassment-free experience for everyone, regardless of age, body
7
+ size, visible or invisible disability, ethnicity, sex characteristics, gender
8
+ identity and expression, level of experience, education, socio-economic status,
9
+ nationality, personal appearance, race, religion, or sexual identity and
10
+ orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to a positive environment:
15
+
16
+ * Using welcoming and inclusive language
17
+ * Being respectful of differing viewpoints and experiences
18
+ * Gracefully accepting constructive criticism
19
+ * Focusing on what is best for the community
20
+ * Showing empathy towards other community members
21
+
22
+ Examples of unacceptable behavior:
23
+
24
+ * The use of sexualized language or imagery and unwelcome sexual attention
25
+ * Trolling, insulting or derogatory comments, and personal or political attacks
26
+ * Public or private harassment
27
+ * Publishing others' private information without explicit permission
28
+ * Other conduct which could reasonably be considered inappropriate
29
+
30
+ ## Enforcement Responsibilities
31
+
32
+ Community leaders are responsible for clarifying and enforcing our standards of
33
+ acceptable behavior and will take appropriate and fair corrective action in
34
+ response to any behavior that they deem inappropriate, threatening, offensive,
35
+ or harmful.
36
+
37
+ ## Scope
38
+
39
+ This Code of Conduct applies within all community spaces, and also applies when
40
+ an individual is officially representing the community in public spaces.
41
+
42
+ ## Enforcement
43
+
44
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
45
+ reported to the community leaders responsible for enforcement at
46
+ yeongseon.choe@gmail.com.
47
+
48
+ All complaints will be reviewed and investigated promptly and fairly.
49
+
50
+ ## Attribution
51
+
52
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
53
+ version 2.0, available at
54
+ https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
55
+
56
+ [homepage]: https://www.contributor-covenant.org
@@ -0,0 +1,64 @@
1
+ # Contributing Guide
2
+
3
+ We welcome contributions to the `excel-dbapi` project.
4
+
5
+ ## Branch Strategy
6
+
7
+ Use GitHub Flow and branch from `main`.
8
+
9
+ Recommended branch prefixes:
10
+
11
+ - `feat/` for new features
12
+ - `fix/` for bug fixes
13
+ - `docs/` for documentation-only changes
14
+ - `chore/` for tooling and maintenance
15
+ - `ci/` for workflow updates
16
+
17
+ ## Development Workflow
18
+
19
+ 1. Create a branch from `main`.
20
+ ```bash
21
+ git checkout main
22
+ git pull origin main
23
+ git checkout -b feat/your-feature-name
24
+ ```
25
+ 2. Write code and tests.
26
+ 3. Run the local quality gate.
27
+ ```bash
28
+ make check-all
29
+ ```
30
+ 4. Push and create a pull request.
31
+ ```bash
32
+ git push origin feat/your-feature-name
33
+ ```
34
+
35
+ ## Project Commands
36
+
37
+ ```bash
38
+ make format # Format code with ruff
39
+ make lint # Lint with ruff
40
+ make typecheck # Type check with mypy
41
+ make test # Run tests
42
+ make cov # Run tests with coverage
43
+ make check-all # Run the full local gate
44
+ ```
45
+
46
+ ## Commit Message Guidelines
47
+
48
+ We follow the [Conventional Commits](https://www.conventionalcommits.org/) specification.
49
+
50
+ ### Examples
51
+
52
+ ```bash
53
+ git commit -m "feat: add LIKE operator support"
54
+ git commit -m "fix: handle empty IN clause gracefully"
55
+ git commit -m "docs: improve quickstart documentation"
56
+ git commit -m "refactor: extract SQL parser logic"
57
+ git commit -m "chore: update dev dependencies"
58
+ ```
59
+
60
+ Use imperative present tense and keep the message concise.
61
+
62
+ ## Code of Conduct
63
+
64
+ Be respectful and inclusive. See our [Code of Conduct](CODE_OF_CONDUCT.md) for details.