pytrilogy 0.0.3.84__tar.gz → 0.0.3.85__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.

Potentially problematic release.


This version of pytrilogy might be problematic. Click here for more details.

Files changed (152) hide show
  1. {pytrilogy-0.0.3.84/pytrilogy.egg-info → pytrilogy-0.0.3.85}/PKG-INFO +1 -1
  2. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85/pytrilogy.egg-info}/PKG-INFO +1 -1
  3. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/__init__.py +1 -1
  4. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/utility.py +23 -13
  5. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/std/geography.preql +3 -2
  6. pytrilogy-0.0.3.85/trilogy/std/net.preql +14 -0
  7. pytrilogy-0.0.3.84/trilogy/std/net.preql +0 -9
  8. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/LICENSE.md +0 -0
  9. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/README.md +0 -0
  10. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/pyproject.toml +0 -0
  11. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/pytrilogy.egg-info/SOURCES.txt +0 -0
  12. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/pytrilogy.egg-info/dependency_links.txt +0 -0
  13. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/pytrilogy.egg-info/entry_points.txt +0 -0
  14. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/pytrilogy.egg-info/requires.txt +0 -0
  15. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/pytrilogy.egg-info/top_level.txt +0 -0
  16. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/setup.cfg +0 -0
  17. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/setup.py +0 -0
  18. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_datatypes.py +0 -0
  19. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_declarations.py +0 -0
  20. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_derived_concepts.py +0 -0
  21. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_discovery_nodes.py +0 -0
  22. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_enums.py +0 -0
  23. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_environment.py +0 -0
  24. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_execute_models.py +0 -0
  25. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_executor.py +0 -0
  26. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_failure.py +0 -0
  27. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_functions.py +0 -0
  28. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_imports.py +0 -0
  29. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_metadata.py +0 -0
  30. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_models.py +0 -0
  31. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_multi_join_assignments.py +0 -0
  32. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_parse_engine.py +0 -0
  33. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_parsing.py +0 -0
  34. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_parsing_failures.py +0 -0
  35. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_partial_handling.py +0 -0
  36. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_query_processing.py +0 -0
  37. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_query_render.py +0 -0
  38. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_select.py +0 -0
  39. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_show.py +0 -0
  40. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_statements.py +0 -0
  41. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_typing.py +0 -0
  42. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_undefined_concept.py +0 -0
  43. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_user_functions.py +0 -0
  44. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/tests/test_where_clause.py +0 -0
  45. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/authoring/__init__.py +0 -0
  46. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/compiler.py +0 -0
  47. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/constants.py +0 -0
  48. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/__init__.py +0 -0
  49. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/constants.py +0 -0
  50. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/enums.py +0 -0
  51. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/env_processor.py +0 -0
  52. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/environment_helpers.py +0 -0
  53. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/ergonomics.py +0 -0
  54. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/exceptions.py +0 -0
  55. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/functions.py +0 -0
  56. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/graph_models.py +0 -0
  57. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/internal.py +0 -0
  58. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/models/__init__.py +0 -0
  59. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/models/author.py +0 -0
  60. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/models/build.py +0 -0
  61. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/models/build_environment.py +0 -0
  62. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/models/core.py +0 -0
  63. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/models/datasource.py +0 -0
  64. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/models/environment.py +0 -0
  65. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/models/execute.py +0 -0
  66. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/optimization.py +0 -0
  67. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/optimizations/__init__.py +0 -0
  68. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/optimizations/base_optimization.py +0 -0
  69. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/optimizations/inline_datasource.py +0 -0
  70. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/optimizations/predicate_pushdown.py +0 -0
  71. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/__init__.py +0 -0
  72. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/concept_strategies_v3.py +0 -0
  73. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/discovery_loop.py +0 -0
  74. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/discovery_node_factory.py +0 -0
  75. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/discovery_utility.py +0 -0
  76. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/discovery_validation.py +0 -0
  77. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/graph_utils.py +0 -0
  78. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/__init__.py +0 -0
  79. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/basic_node.py +0 -0
  80. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/common.py +0 -0
  81. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/constant_node.py +0 -0
  82. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/filter_node.py +0 -0
  83. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/group_node.py +0 -0
  84. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/group_to_node.py +0 -0
  85. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/multiselect_node.py +0 -0
  86. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/node_merge_node.py +0 -0
  87. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/recursive_node.py +0 -0
  88. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/rowset_node.py +0 -0
  89. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/select_helpers/__init__.py +0 -0
  90. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/select_helpers/datasource_injection.py +0 -0
  91. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/select_merge_node.py +0 -0
  92. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/select_node.py +0 -0
  93. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/synonym_node.py +0 -0
  94. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/union_node.py +0 -0
  95. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/unnest_node.py +0 -0
  96. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/node_generators/window_node.py +0 -0
  97. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/nodes/__init__.py +0 -0
  98. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/nodes/base_node.py +0 -0
  99. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/nodes/filter_node.py +0 -0
  100. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/nodes/group_node.py +0 -0
  101. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/nodes/merge_node.py +0 -0
  102. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/nodes/recursive_node.py +0 -0
  103. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/nodes/select_node_v2.py +0 -0
  104. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/nodes/union_node.py +0 -0
  105. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/nodes/unnest_node.py +0 -0
  106. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/processing/nodes/window_node.py +0 -0
  107. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/query_processor.py +0 -0
  108. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/statements/__init__.py +0 -0
  109. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/statements/author.py +0 -0
  110. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/statements/build.py +0 -0
  111. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/statements/common.py +0 -0
  112. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/statements/execute.py +0 -0
  113. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/core/utility.py +0 -0
  114. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/dialect/__init__.py +0 -0
  115. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/dialect/base.py +0 -0
  116. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/dialect/bigquery.py +0 -0
  117. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/dialect/common.py +0 -0
  118. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/dialect/config.py +0 -0
  119. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/dialect/dataframe.py +0 -0
  120. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/dialect/duckdb.py +0 -0
  121. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/dialect/enums.py +0 -0
  122. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/dialect/postgres.py +0 -0
  123. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/dialect/presto.py +0 -0
  124. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/dialect/snowflake.py +0 -0
  125. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/dialect/sql_server.py +0 -0
  126. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/engine.py +0 -0
  127. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/executor.py +0 -0
  128. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/hooks/__init__.py +0 -0
  129. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/hooks/base_hook.py +0 -0
  130. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/hooks/graph_hook.py +0 -0
  131. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/hooks/query_debugger.py +0 -0
  132. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/metadata/__init__.py +0 -0
  133. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/parser.py +0 -0
  134. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/parsing/__init__.py +0 -0
  135. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/parsing/common.py +0 -0
  136. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/parsing/config.py +0 -0
  137. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/parsing/exceptions.py +0 -0
  138. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/parsing/helpers.py +0 -0
  139. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/parsing/parse_engine.py +0 -0
  140. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/parsing/render.py +0 -0
  141. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/parsing/trilogy.lark +0 -0
  142. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/py.typed +0 -0
  143. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/render.py +0 -0
  144. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/scripts/__init__.py +0 -0
  145. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/scripts/trilogy.py +0 -0
  146. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/std/__init__.py +0 -0
  147. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/std/date.preql +0 -0
  148. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/std/display.preql +0 -0
  149. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/std/money.preql +0 -0
  150. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/std/ranking.preql +0 -0
  151. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/std/report.preql +0 -0
  152. {pytrilogy-0.0.3.84 → pytrilogy-0.0.3.85}/trilogy/utility.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytrilogy
3
- Version: 0.0.3.84
3
+ Version: 0.0.3.85
4
4
  Summary: Declarative, typed query language that compiles to SQL.
5
5
  Home-page:
6
6
  Author:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pytrilogy
3
- Version: 0.0.3.84
3
+ Version: 0.0.3.85
4
4
  Summary: Declarative, typed query language that compiles to SQL.
5
5
  Home-page:
6
6
  Author:
@@ -4,6 +4,6 @@ from trilogy.dialect.enums import Dialects
4
4
  from trilogy.executor import Executor
5
5
  from trilogy.parser import parse
6
6
 
7
- __version__ = "0.0.3.84"
7
+ __version__ = "0.0.3.85"
8
8
 
9
9
  __all__ = ["parse", "Executor", "Dialects", "Environment", "CONFIG"]
@@ -161,6 +161,9 @@ def resolve_join_order_v2(
161
161
  left_is_partial = any(
162
162
  key in partials.get(left_candidate, []) for key in common
163
163
  )
164
+ left_is_nullable = any(
165
+ key in nullables.get(left_candidate, []) for key in common
166
+ )
164
167
  right_is_partial = any(key in partials.get(right, []) for key in common)
165
168
  # we don't care if left is nullable for join type (just keys), but if we did
166
169
  # left_is_nullable = any(
@@ -169,21 +172,29 @@ def resolve_join_order_v2(
169
172
  right_is_nullable = any(
170
173
  key in nullables.get(right, []) for key in common
171
174
  )
172
- if left_is_partial or right_is_nullable:
175
+ if left_is_nullable and right_is_nullable:
176
+ join_type = JoinType.FULL
177
+ elif left_is_partial and right_is_partial:
178
+ join_type = JoinType.FULL
179
+ elif left_is_partial:
173
180
  join_type = JoinType.FULL
174
- elif right_is_partial:
181
+ elif right_is_nullable:
182
+ join_type = JoinType.RIGHT_OUTER
183
+ elif right_is_partial or left_is_nullable:
175
184
  join_type = JoinType.LEFT_OUTER
176
185
  # we can't inner join if the left was an outer join
177
186
  else:
178
187
  join_type = JoinType.INNER
188
+
179
189
  join_types.add(join_type)
180
190
  joinkeys[left_candidate] = common
181
-
182
191
  final_join_type = JoinType.INNER
183
- if any([x == JoinType.LEFT_OUTER for x in join_types]):
184
- final_join_type = JoinType.LEFT_OUTER
185
- elif any([x == JoinType.FULL for x in join_types]):
192
+ if any([x == JoinType.FULL for x in join_types]):
186
193
  final_join_type = JoinType.FULL
194
+ elif any([x == JoinType.LEFT_OUTER for x in join_types]):
195
+ final_join_type = JoinType.LEFT_OUTER
196
+ elif any([x == JoinType.RIGHT_OUTER for x in join_types]):
197
+ final_join_type = JoinType.RIGHT_OUTER
187
198
  output.append(
188
199
  JoinOrderOutput(
189
200
  # left=left_candidate,
@@ -608,13 +619,12 @@ def find_nullable_concepts(
608
619
  local_nullable = [
609
620
  x for x in datasources if k in [v.address for v in x.nullable_concepts]
610
621
  ]
611
- if all(
612
- [
613
- k in [v.address for v in x.nullable_concepts]
614
- for x in datasources
615
- if k in [z.address for z in x.output_concepts]
616
- ]
617
- ):
622
+ nullable_matches = [
623
+ k in [v.address for v in x.nullable_concepts]
624
+ for x in datasources
625
+ if k in [z.address for z in x.output_concepts]
626
+ ]
627
+ if all(nullable_matches) and len(nullable_matches) > 0:
618
628
  final_nullable.add(k)
619
629
  all_ds = set([ds for ds in local_nullable]).union(nullable_datasources)
620
630
  if nullable_datasources:
@@ -9,10 +9,11 @@ type us_zip_code string; # US ZIP code
9
9
  ## generic types
10
10
  type latitude float; # Latitude in degrees
11
11
  type longitude float; # Longitude in degrees
12
- type lat_long string; # Latitude and longitude in degrees
12
+ type lat_long string; # Latitude and longitude in degrees, as a coordinate pair
13
13
 
14
14
  type city string; # City name
15
- type country string; # Country name
15
+ type country string; # Full Country Name
16
+ type country_code string; # ISO-3166 Country code - ex US, CA, GB
16
17
  type timezone string; # Timezone name
17
18
  type region string; # Region name
18
19
 
@@ -0,0 +1,14 @@
1
+
2
+ ## network types
3
+ type url string; # URL string
4
+ type url_image string; # URL of an image
5
+ type domain string; # Domain name
6
+ type ip_net_mask string; # IP network mask
7
+ type ipv6_address string; # IPv6 address
8
+ type ipv4_address string; # IPv4 address
9
+
10
+ ## communication types
11
+ type email_address string; # Email address, including @
12
+
13
+ ## shared types
14
+ type suffix string; # A file suffix or extension, like .txt, .jpg, etc.
@@ -1,9 +0,0 @@
1
-
2
-
3
- type url string;
4
- type domain string;
5
- type ip_net_mask string;
6
- type ipv6_address string;
7
- type ipv4_address string;
8
- type suffix string;
9
- type url_image string;
File without changes
File without changes
File without changes
File without changes