sqlmirror 0.2.0__py3-none-any.whl
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.
- sqlmirror/__init__.py +1 -0
- sqlmirror/apply.py +136 -0
- sqlmirror/backfill.py +65 -0
- sqlmirror/cli.py +335 -0
- sqlmirror/cron.py +103 -0
- sqlmirror/db.py +469 -0
- sqlmirror/db_mssql.py +530 -0
- sqlmirror/dev/__init__.py +1 -0
- sqlmirror/dev/cli.py +166 -0
- sqlmirror/dev/compare.py +87 -0
- sqlmirror/dev/e2e.py +261 -0
- sqlmirror/dev/golden.py +182 -0
- sqlmirror/dev/mock_jira.py +347 -0
- sqlmirror/dev/site.py +383 -0
- sqlmirror/dev/synth.py +769 -0
- sqlmirror/golden/01_issues_by_status.sql +8 -0
- sqlmirror/golden/02_issue_keys.sql +7 -0
- sqlmirror/golden/03_created_vs_resolved.sql +8 -0
- sqlmirror/golden/04_open_by_priority.sql +10 -0
- sqlmirror/golden/05_time_in_status.sql +16 -0
- sqlmirror/golden/06_cycle_time.sql +16 -0
- sqlmirror/golden/07_worklog_by_user.sql +11 -0
- sqlmirror/golden/08_fix_versions.sql +11 -0
- sqlmirror/golden/09_bugs_by_affected_version.sql +11 -0
- sqlmirror/golden/10_components.sql +10 -0
- sqlmirror/golden/11_top_labels.sql +9 -0
- sqlmirror/golden/12_select_field_distribution.sql +11 -0
- sqlmirror/golden/13_story_points_by_sprint.sql +11 -0
- sqlmirror/golden/14_sprint_completion.sql +14 -0
- sqlmirror/golden/15_epics.sql +12 -0
- sqlmirror/golden/16_subtasks.sql +10 -0
- sqlmirror/golden/17_blocked_issues.sql +11 -0
- sqlmirror/golden/18_most_discussed.sql +10 -0
- sqlmirror/golden/19_assignee_workload.sql +11 -0
- sqlmirror/golden/20_resolutions.sql +7 -0
- sqlmirror/golden/21_issue_history.sql +10 -0
- sqlmirror/golden/22_reopened.sql +11 -0
- sqlmirror/golden/23_overdue.sql +8 -0
- sqlmirror/golden/24_cascading_select.sql +13 -0
- sqlmirror/golden/25_user_picker.sql +12 -0
- sqlmirror/golden/26_attachments.sql +9 -0
- sqlmirror/golden/27_project_categories.sql +8 -0
- sqlmirror/golden/28_issue_types.sql +7 -0
- sqlmirror/golden/29_estimate_accuracy.sql +11 -0
- sqlmirror/golden/30_project_leads.sql +7 -0
- sqlmirror/golden/tsql/01_issues_by_status.sql +8 -0
- sqlmirror/golden/tsql/02_issue_keys.sql +6 -0
- sqlmirror/golden/tsql/03_created_vs_resolved.sql +8 -0
- sqlmirror/golden/tsql/04_open_by_priority.sql +10 -0
- sqlmirror/golden/tsql/05_time_in_status.sql +16 -0
- sqlmirror/golden/tsql/06_cycle_time.sql +16 -0
- sqlmirror/golden/tsql/07_worklog_by_user.sql +11 -0
- sqlmirror/golden/tsql/08_fix_versions.sql +11 -0
- sqlmirror/golden/tsql/09_bugs_by_affected_version.sql +11 -0
- sqlmirror/golden/tsql/10_components.sql +10 -0
- sqlmirror/golden/tsql/11_top_labels.sql +8 -0
- sqlmirror/golden/tsql/12_select_field_distribution.sql +11 -0
- sqlmirror/golden/tsql/13_story_points_by_sprint.sql +11 -0
- sqlmirror/golden/tsql/14_sprint_completion.sql +14 -0
- sqlmirror/golden/tsql/15_epics.sql +11 -0
- sqlmirror/golden/tsql/16_subtasks.sql +9 -0
- sqlmirror/golden/tsql/17_blocked_issues.sql +11 -0
- sqlmirror/golden/tsql/18_most_discussed.sql +9 -0
- sqlmirror/golden/tsql/19_assignee_workload.sql +11 -0
- sqlmirror/golden/tsql/20_resolutions.sql +7 -0
- sqlmirror/golden/tsql/21_issue_history.sql +10 -0
- sqlmirror/golden/tsql/22_reopened.sql +11 -0
- sqlmirror/golden/tsql/23_overdue.sql +8 -0
- sqlmirror/golden/tsql/24_cascading_select.sql +13 -0
- sqlmirror/golden/tsql/25_user_picker.sql +12 -0
- sqlmirror/golden/tsql/26_attachments.sql +9 -0
- sqlmirror/golden/tsql/27_project_categories.sql +8 -0
- sqlmirror/golden/tsql/28_issue_types.sql +7 -0
- sqlmirror/golden/tsql/29_estimate_accuracy.sql +11 -0
- sqlmirror/golden/tsql/30_project_leads.sql +7 -0
- sqlmirror/idmap.py +161 -0
- sqlmirror/jira.py +223 -0
- sqlmirror/mapper.py +774 -0
- sqlmirror/reconcile.py +73 -0
- sqlmirror/samples/dc_export_example.csv +19 -0
- sqlmirror/samples/dc_reports/mysql_sprint_report.sql +10 -0
- sqlmirror/samples/dc_reports/postgres_assigned_to_user.sql +6 -0
- sqlmirror/samples/dc_reports/postgres_customer_impact.sql +7 -0
- sqlmirror/samples/dc_reports/postgres_time_logged.sql +7 -0
- sqlmirror/samples/dc_reports/postgres_workflow_steps.sql +4 -0
- sqlmirror/samples/dc_reports/sqlserver_open_by_status.sql +9 -0
- sqlmirror/schema.py +518 -0
- sqlmirror/source.py +117 -0
- sqlmirror/sqlcheck.py +647 -0
- sqlmirror/util.py +80 -0
- sqlmirror-0.2.0.dist-info/METADATA +19 -0
- sqlmirror-0.2.0.dist-info/RECORD +95 -0
- sqlmirror-0.2.0.dist-info/WHEEL +5 -0
- sqlmirror-0.2.0.dist-info/entry_points.txt +3 -0
- sqlmirror-0.2.0.dist-info/top_level.txt +1 -0
sqlmirror/util.py
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import hashlib
|
|
4
|
+
import re
|
|
5
|
+
from datetime import date, datetime, timezone
|
|
6
|
+
from typing import Any
|
|
7
|
+
|
|
8
|
+
_TZ_NO_COLON = re.compile(r"([+-]\d{2})(\d{2})$")
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def parse_ts(value: Any) -> datetime | None:
|
|
12
|
+
"""Parse the timestamp formats Jira Cloud returns into an aware datetime.
|
|
13
|
+
|
|
14
|
+
Handles "2026-01-02T10:00:00.000+0000", "...Z", "...+00:00", plain dates
|
|
15
|
+
("2026-02-01", returned as midnight UTC) and epoch milliseconds.
|
|
16
|
+
"""
|
|
17
|
+
if value is None or value == "":
|
|
18
|
+
return None
|
|
19
|
+
if isinstance(value, datetime):
|
|
20
|
+
return value if value.tzinfo else value.replace(tzinfo=timezone.utc)
|
|
21
|
+
if isinstance(value, date):
|
|
22
|
+
return datetime(value.year, value.month, value.day, tzinfo=timezone.utc)
|
|
23
|
+
if isinstance(value, (int, float)):
|
|
24
|
+
return datetime.fromtimestamp(value / 1000.0, tz=timezone.utc)
|
|
25
|
+
s = str(value).strip()
|
|
26
|
+
if len(s) == 10 and s[4] == "-" and s[7] == "-":
|
|
27
|
+
y, m, d = s.split("-")
|
|
28
|
+
return datetime(int(y), int(m), int(d), tzinfo=timezone.utc)
|
|
29
|
+
if s.endswith("Z"):
|
|
30
|
+
s = s[:-1] + "+00:00"
|
|
31
|
+
s = _TZ_NO_COLON.sub(r"\1:\2", s)
|
|
32
|
+
try:
|
|
33
|
+
dt = datetime.fromisoformat(s)
|
|
34
|
+
except ValueError:
|
|
35
|
+
return None
|
|
36
|
+
return dt if dt.tzinfo else dt.replace(tzinfo=timezone.utc)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def to_epoch_ms(value: Any) -> int | None:
|
|
40
|
+
dt = parse_ts(value)
|
|
41
|
+
return int(dt.timestamp() * 1000) if dt else None
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
def stable_id(*parts: Any) -> int:
|
|
45
|
+
"""Deterministic 56-bit id for rows Cloud does not give an id to.
|
|
46
|
+
|
|
47
|
+
Stable across runs, so re-applying the same data produces the same ids
|
|
48
|
+
(useful for customers who copy mirror tables incrementally).
|
|
49
|
+
"""
|
|
50
|
+
h = hashlib.sha1("|".join(str(p) for p in parts).encode("utf-8")).hexdigest()
|
|
51
|
+
return int(h[:14], 16)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def to_int(value: Any) -> int | None:
|
|
55
|
+
if value is None or value == "":
|
|
56
|
+
return None
|
|
57
|
+
try:
|
|
58
|
+
return int(value)
|
|
59
|
+
except (TypeError, ValueError):
|
|
60
|
+
try:
|
|
61
|
+
return int(float(value))
|
|
62
|
+
except (TypeError, ValueError):
|
|
63
|
+
return None
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def to_float(value: Any) -> float | None:
|
|
67
|
+
if value is None or value == "":
|
|
68
|
+
return None
|
|
69
|
+
try:
|
|
70
|
+
return float(value)
|
|
71
|
+
except (TypeError, ValueError):
|
|
72
|
+
return None
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def utcnow() -> datetime:
|
|
76
|
+
return datetime.now(timezone.utc)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def iso(dt: datetime | None) -> str | None:
|
|
80
|
+
return dt.astimezone(timezone.utc).isoformat().replace("+00:00", "Z") if dt else None
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: sqlmirror
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Mirror Jira Cloud into your own Postgres or SQL Server under Data Center table names
|
|
5
|
+
Requires-Python: >=3.10
|
|
6
|
+
Requires-Dist: boto3>=1.28
|
|
7
|
+
Requires-Dist: click>=8.1
|
|
8
|
+
Requires-Dist: httpx>=0.27
|
|
9
|
+
Requires-Dist: psycopg[binary]>=3.2
|
|
10
|
+
Requires-Dist: python-dotenv>=1.0
|
|
11
|
+
Requires-Dist: sqlglot>=25
|
|
12
|
+
Provides-Extra: sqlserver
|
|
13
|
+
Requires-Dist: python-tds>=1.15; extra == "sqlserver"
|
|
14
|
+
Requires-Dist: pyOpenSSL>=23; extra == "sqlserver"
|
|
15
|
+
Requires-Dist: certifi; extra == "sqlserver"
|
|
16
|
+
Provides-Extra: dev
|
|
17
|
+
Requires-Dist: moto[server]>=5; extra == "dev"
|
|
18
|
+
Requires-Dist: pytest>=8; extra == "dev"
|
|
19
|
+
Requires-Dist: python-tds>=1.15; extra == "dev"
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
sqlmirror/__init__.py,sha256=Zn1KFblwuFHiDRdRAiRnDBRkbPttWh44jKa5zG2ov0E,22
|
|
2
|
+
sqlmirror/apply.py,sha256=7CTx2OFqfs6ZR-toLCwb5jPGiqqBTpW_tOCkB7-SabY,5361
|
|
3
|
+
sqlmirror/backfill.py,sha256=lH8-Xxu3Yy8gka2rXKY5m2kQ7t0Pi-ewPiR_aKnsDJE,3008
|
|
4
|
+
sqlmirror/cli.py,sha256=Dcm2ZAZDuvAjZSMUmZ-YvmGnZ5QgfYZ4oaoA2w36IUY,15365
|
|
5
|
+
sqlmirror/cron.py,sha256=l0i-G9eRBp0uMMWuWfSehqPtoMh87QUE65GossoKj8o,3549
|
|
6
|
+
sqlmirror/db.py,sha256=cyXKjAF8SxIrXkRZeprbox8oAJTapWZkguXapP8xGB0,22164
|
|
7
|
+
sqlmirror/db_mssql.py,sha256=Snv3hSjuWHe6CiIXq4CFt-hoDv-XpHRoDipGyubM7JM,25046
|
|
8
|
+
sqlmirror/idmap.py,sha256=pYzRuzPJXPENN9-S-Tgi8RjUJjbLF5JJbceqMfeOrdE,7585
|
|
9
|
+
sqlmirror/jira.py,sha256=RMgHh6HRnX3oobraMFZaYvpF_Hgz-Enf2OWj2JeeVpA,9844
|
|
10
|
+
sqlmirror/mapper.py,sha256=TIXoqvee0t-Gv_zgcBYvcM-wk8psAefCMVxyqwYogQE,33607
|
|
11
|
+
sqlmirror/reconcile.py,sha256=Zoex_K3iaupKFxg1EyyFH6GaEITwo3qTp4Dj-nlcmBc,3454
|
|
12
|
+
sqlmirror/schema.py,sha256=XXnyFQEzsU8k-IjQnHfrl75wQu-v7tdqpIWst2eKWhI,20370
|
|
13
|
+
sqlmirror/source.py,sha256=ZY1XS-UYX3tPiO6T_dosCOpwi3g1Ou1LwKdUtKwSkGA,4337
|
|
14
|
+
sqlmirror/sqlcheck.py,sha256=XpotzPkt6yyDRZ5xD_YsfWITyYqzMNnEA9J1oyD2ERs,34495
|
|
15
|
+
sqlmirror/util.py,sha256=_PhMacCVd_yVn7HA-5M_-4_N0Q-Gw7uL2g7RhTC6ZA4,2449
|
|
16
|
+
sqlmirror/dev/__init__.py,sha256=6tswKyKSKRz1nPEUVndTlUJshDmIW07UetJEsc_7744,94
|
|
17
|
+
sqlmirror/dev/cli.py,sha256=0LFYv_AWMFjCl_D98-VXm-I9OaFgS_VFNnz0_b38MWg,7481
|
|
18
|
+
sqlmirror/dev/compare.py,sha256=wd9dY27SF3xvehBb4Nzgn6Me4rjLCL7ClMnYZ5xkn2I,3220
|
|
19
|
+
sqlmirror/dev/e2e.py,sha256=qt3Xbcu-im03OH-QvnwFi1KTftEPZGNLcRdw6z9hsqU,12028
|
|
20
|
+
sqlmirror/dev/golden.py,sha256=yFoRYLmoPqucaVueVDzG1FX1Lj0VLZ9eSbLyKVXiZhs,7944
|
|
21
|
+
sqlmirror/dev/mock_jira.py,sha256=kURrzZyBDvFs2c-pSqc9vXZtY5_LdGfqE7_PxxusgPY,16478
|
|
22
|
+
sqlmirror/dev/site.py,sha256=48yyMrI3fs728tQTbJuDLurzq6DY33_QwhXSkXJg__A,19904
|
|
23
|
+
sqlmirror/dev/synth.py,sha256=0dPVMhWfo2_uHGGAsba1csgpwiZlWOVUCmVsBON4Osg,43265
|
|
24
|
+
sqlmirror/golden/01_issues_by_status.sql,sha256=zxBX34IGgfZwo6iN8zDsOHW1tDTHWQ1J_KC14YEFYVU,251
|
|
25
|
+
sqlmirror/golden/02_issue_keys.sql,sha256=9M2kGDRsAnItwyt7nNyphab2NdqU7pllNZH3WlAWW-Y,241
|
|
26
|
+
sqlmirror/golden/03_created_vs_resolved.sql,sha256=rdufsQqt6RQRJjthltMoS3jMLLFtcuhPZXDoHmztO-Q,202
|
|
27
|
+
sqlmirror/golden/04_open_by_priority.sql,sha256=vsE_Weu2vB1DIFvdPSxtShUAOhJYkJ8iDI6VNH6w0nE,328
|
|
28
|
+
sqlmirror/golden/05_time_in_status.sql,sha256=FHgkNkvvxjjL7R3LHERyGVK2SEQ7Eg9hq1B-_B9yfJM,576
|
|
29
|
+
sqlmirror/golden/06_cycle_time.sql,sha256=Xri7pcsKO4oxVZKZENr2OVkzfT2KbI3BDVL_peU9agg,619
|
|
30
|
+
sqlmirror/golden/07_worklog_by_user.sql,sha256=4u5m_24H7QTYt7D-KpIbQEFl6OTvj3GMcXydciqcbFQ,443
|
|
31
|
+
sqlmirror/golden/08_fix_versions.sql,sha256=0NxEoxAHXR8drU7qw50k-gLNtpmZYRk29b0-Z4u_8qo,429
|
|
32
|
+
sqlmirror/golden/09_bugs_by_affected_version.sql,sha256=cTeOy5tr-umY_KsLHTc4xKRyJ-4pVG_OjiBNsSbredo,375
|
|
33
|
+
sqlmirror/golden/10_components.sql,sha256=toeCB2_tHSpR105l9_R1uGzcZAIhhLru-AF4mSybPBo,312
|
|
34
|
+
sqlmirror/golden/11_top_labels.sql,sha256=rorzLfS7hSU83V9xg9UEnVEIzGb1T3fVmRDjhXAm-KQ,195
|
|
35
|
+
sqlmirror/golden/12_select_field_distribution.sql,sha256=VG_3FwcmjBfQVoCfWW_Efuwqu2T0xhfx0dMPVohE50M,580
|
|
36
|
+
sqlmirror/golden/13_story_points_by_sprint.sql,sha256=YD5utju5K273Q5ACexziW5rfk3DyvK5ZSSPQLWmNSoc,563
|
|
37
|
+
sqlmirror/golden/14_sprint_completion.sql,sha256=b-xsoU4wu5jpI5egyqSaR-k3lLB45tPE5HHIycIKq8A,573
|
|
38
|
+
sqlmirror/golden/15_epics.sql,sha256=qLNJTXvFkJytbNOxNIm_H5lJt9642mliha3hbkxvFg0,534
|
|
39
|
+
sqlmirror/golden/16_subtasks.sql,sha256=yKWK_igAjEznTJjj2PWe_XI0Oa2sgbxImToRFZyY3l8,360
|
|
40
|
+
sqlmirror/golden/17_blocked_issues.sql,sha256=UxQRFoygXyYAVYI6TIZKTffBmwdKzHN4vWeRxF_tnEM,445
|
|
41
|
+
sqlmirror/golden/18_most_discussed.sql,sha256=Q6D4KVX-BdPUNUHqpQb-ZnYNHWXCd0ADaAhRcMlxP2A,247
|
|
42
|
+
sqlmirror/golden/19_assignee_workload.sql,sha256=Z4c6R8r0beMsRFn1NUrSwdF70nBzzqr1WrghkSfJxzQ,394
|
|
43
|
+
sqlmirror/golden/20_resolutions.sql,sha256=C3HolYL4IJWxxhsUsDOTSKbo02YiCNlEoCqkamNY-b8,211
|
|
44
|
+
sqlmirror/golden/21_issue_history.sql,sha256=6kTkDQTT_3Gvxwl_wCxrP3OxZZp69bFhB2ZWn0zKORA,483
|
|
45
|
+
sqlmirror/golden/22_reopened.sql,sha256=gZqiJWkacUGdr2uw2Pq2DdbxD2UEpSO9FaXfLCm4mf8,499
|
|
46
|
+
sqlmirror/golden/23_overdue.sql,sha256=ijOLv7g2n7W6iMFUudtIzTgZatN7azSNktqthKilUyw,306
|
|
47
|
+
sqlmirror/golden/24_cascading_select.sql,sha256=W8i6HdAA8RCCRM-xdYEPlEqlSmvTYSBeyEE4qOLzCaY,714
|
|
48
|
+
sqlmirror/golden/25_user_picker.sql,sha256=NFP7GZXkZkDhOcoH7bHlz03o5kS-qg74OtALzIrszio,601
|
|
49
|
+
sqlmirror/golden/26_attachments.sql,sha256=4wcsL93Hyr4qK0EIOXC7U34FJxyp6ovEnY_ZeMSYEQo,289
|
|
50
|
+
sqlmirror/golden/27_project_categories.sql,sha256=Mx7k16pWJkRKdizjU27XiN-WiRKHT5XHVBipzfHAisU,323
|
|
51
|
+
sqlmirror/golden/28_issue_types.sql,sha256=1y3I64Q7CuJo-MphU_7T693mZaJfG0gwv7E1itVZk0w,228
|
|
52
|
+
sqlmirror/golden/29_estimate_accuracy.sql,sha256=OnuBB-pu15pOGb2690M05fvYRNltwDGGcRKKyDYnWXc,470
|
|
53
|
+
sqlmirror/golden/30_project_leads.sql,sha256=PHmFjXo7TCfhxjlhl4hnkzyuHS1hKHdV87Zn1KJqjx0,221
|
|
54
|
+
sqlmirror/golden/tsql/01_issues_by_status.sql,sha256=5uPzh6yUrK9JNu9V2T_HE0gjE6_UZaNU3epj98cj4zU,251
|
|
55
|
+
sqlmirror/golden/tsql/02_issue_keys.sql,sha256=kJHFGgsy7luWEfpkNuwtdgtlQ_3Oni-kcOWlS4p7Q3U,258
|
|
56
|
+
sqlmirror/golden/tsql/03_created_vs_resolved.sql,sha256=djJXkeqvyahZk_01MnP6fKkxLkHoKULKPyskFgDhX9Q,273
|
|
57
|
+
sqlmirror/golden/tsql/04_open_by_priority.sql,sha256=XkZE0WHr_mnNmubw2g1hgD64sEI3O4xbySF_7fq37xo,328
|
|
58
|
+
sqlmirror/golden/tsql/05_time_in_status.sql,sha256=NikUnUlYcaV2mFD_rpoRRikQvSB9R46ApS4Uo04NYBc,564
|
|
59
|
+
sqlmirror/golden/tsql/06_cycle_time.sql,sha256=x5J8d7fksSokvxJhjoB26lVxTlMxjgl4po-KhvSoVwY,598
|
|
60
|
+
sqlmirror/golden/tsql/07_worklog_by_user.sql,sha256=8AqYVaj9BZZ46DFXcPvXiVqxTOcI9B51qcMbq7MLg6Q,443
|
|
61
|
+
sqlmirror/golden/tsql/08_fix_versions.sql,sha256=YC27lHaW495dudH26EUdmfXTs-nsjpbnyDroVZmEC6E,429
|
|
62
|
+
sqlmirror/golden/tsql/09_bugs_by_affected_version.sql,sha256=tMZCcTyqO7E8nsgFXHZjpSt9N-wjqVTBsN6LnkiqOwc,375
|
|
63
|
+
sqlmirror/golden/tsql/10_components.sql,sha256=9-1aowRp1YDlYPaLeem7QoPKNxWaAI2pzpyjrLmumaI,312
|
|
64
|
+
sqlmirror/golden/tsql/11_top_labels.sql,sha256=e85nnC-Fd5c_6OXoCB_6TPrHp6Z4yv8CpKvUGmbtnnM,193
|
|
65
|
+
sqlmirror/golden/tsql/12_select_field_distribution.sql,sha256=t_Y06jcyqOrblg4zxA6TvEBMtgDKVSwfUu4-IfwGA-I,597
|
|
66
|
+
sqlmirror/golden/tsql/13_story_points_by_sprint.sql,sha256=zrcWIMcXgH0HWi999axdA7kxn5lCJGW6kxTQlXjc0XI,568
|
|
67
|
+
sqlmirror/golden/tsql/14_sprint_completion.sql,sha256=spS7knuZQwLTWk-5MN2vO-RX85Gek-1OgddadovnVxM,573
|
|
68
|
+
sqlmirror/golden/tsql/15_epics.sql,sha256=4ZaNnXSPG0FcrlO0_-4zzz7sY6FJfLt13ibfudihAwg,532
|
|
69
|
+
sqlmirror/golden/tsql/16_subtasks.sql,sha256=n1Bz7jzC5oTSefU4GGSvwE38b2Xr9cRbt0yV9f8UxPY,358
|
|
70
|
+
sqlmirror/golden/tsql/17_blocked_issues.sql,sha256=UxQRFoygXyYAVYI6TIZKTffBmwdKzHN4vWeRxF_tnEM,445
|
|
71
|
+
sqlmirror/golden/tsql/18_most_discussed.sql,sha256=vrVVTia3T4fXuztgJSUWGgmcUiVXm_eLKSkdxqqDw7Q,245
|
|
72
|
+
sqlmirror/golden/tsql/19_assignee_workload.sql,sha256=c01G_itg0ox-TukCTmp1HV0xm0A8RB60-1QlL6NVCck,427
|
|
73
|
+
sqlmirror/golden/tsql/20_resolutions.sql,sha256=YSJL3luWq0jATHyb_mvZl9rr0R88bYcmdSLQkAA025Y,237
|
|
74
|
+
sqlmirror/golden/tsql/21_issue_history.sql,sha256=iB1OW8aGETYeA5GMXOiwIskjJtZOKMTqCc_W4r_P82c,481
|
|
75
|
+
sqlmirror/golden/tsql/22_reopened.sql,sha256=gZqiJWkacUGdr2uw2Pq2DdbxD2UEpSO9FaXfLCm4mf8,499
|
|
76
|
+
sqlmirror/golden/tsql/23_overdue.sql,sha256=lZ8BHNFUJvieoxKVE6IhR4lHHIN1MzTuJQT5XyuW-f4,313
|
|
77
|
+
sqlmirror/golden/tsql/24_cascading_select.sql,sha256=vI7SyOs2pXEnNJl4S9UmfAqy6BKqhcIzDN8TIjWUWqg,797
|
|
78
|
+
sqlmirror/golden/tsql/25_user_picker.sql,sha256=7xtW9XIv99usarr8KriURLddCOjSZCz-VOTIjWL8J38,601
|
|
79
|
+
sqlmirror/golden/tsql/26_attachments.sql,sha256=7Qe4ofI3_ftGRnjC8qcDdcxEMDyCIb8_UA3K3Srs7v0,289
|
|
80
|
+
sqlmirror/golden/tsql/27_project_categories.sql,sha256=Mx7k16pWJkRKdizjU27XiN-WiRKHT5XHVBipzfHAisU,323
|
|
81
|
+
sqlmirror/golden/tsql/28_issue_types.sql,sha256=lZyJAtOc0V8SVG2BY2J5PnlCvNc2W_hjsxFOoVPDCdU,228
|
|
82
|
+
sqlmirror/golden/tsql/29_estimate_accuracy.sql,sha256=pJGuq5duAB85M9SB47oeTXBXMX_ecF0kB8el8aMO6NY,470
|
|
83
|
+
sqlmirror/golden/tsql/30_project_leads.sql,sha256=PHmFjXo7TCfhxjlhl4hnkzyuHS1hKHdV87Zn1KJqjx0,221
|
|
84
|
+
sqlmirror/samples/dc_export_example.csv,sha256=ZggC49NsKbh3TRuYGgYn_6Y5Xwv8CajHMK6WiE0R3hE,669
|
|
85
|
+
sqlmirror/samples/dc_reports/mysql_sprint_report.sql,sha256=UaHN46wNsPRJPVOwaEvOeKmVU7ARBfheTbQSYWjJf9E,427
|
|
86
|
+
sqlmirror/samples/dc_reports/postgres_assigned_to_user.sql,sha256=OOFYEXgkRWvc-fUjaCSzg_7gtwoeUhiJtb6FnPJpCLE,229
|
|
87
|
+
sqlmirror/samples/dc_reports/postgres_customer_impact.sql,sha256=J_akYHm0BCK9xuwW2iz5umee53PPvfZUSFWmztOVfZQ,260
|
|
88
|
+
sqlmirror/samples/dc_reports/postgres_time_logged.sql,sha256=AFYaTwdVccY4Ppohl2ihw7DXQvKqIgEqjZGcOD-guzY,250
|
|
89
|
+
sqlmirror/samples/dc_reports/postgres_workflow_steps.sql,sha256=nik5Kmazc5SsgKt9YOLBZu5XE30i826eehboSU46j-s,176
|
|
90
|
+
sqlmirror/samples/dc_reports/sqlserver_open_by_status.sql,sha256=cUTq895Jl4PlKK_FgUgDY433inSE8jDOTPeyU7P9-r0,422
|
|
91
|
+
sqlmirror-0.2.0.dist-info/METADATA,sha256=I3zGMJRLcQ7l92OKFvZ9EaKODp4rah6Lxb6kLOvmXO8,680
|
|
92
|
+
sqlmirror-0.2.0.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
|
|
93
|
+
sqlmirror-0.2.0.dist-info/entry_points.txt,sha256=K4nZqKycijq_pRcSbCq8qfo4Hx-j9ATp0Og4I3KS6wc,88
|
|
94
|
+
sqlmirror-0.2.0.dist-info/top_level.txt,sha256=i8vLm3PIRFmg4b8tFslxqzid4Fq1ntQrsUNeX4OSbqg,10
|
|
95
|
+
sqlmirror-0.2.0.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
sqlmirror
|