(self,
table_exprs,
table_alias_prefix,
required_table_expr_col_type)
| 1088 | (order_by_expr, choice([None, 'ASC', 'DESC', 'DESC']))) |
| 1089 | |
| 1090 | def _create_from_clause(self, |
| 1091 | table_exprs, |
| 1092 | table_alias_prefix, |
| 1093 | required_table_expr_col_type): |
| 1094 | from_clause = None |
| 1095 | table_count = self.profile.get_table_count() |
| 1096 | |
| 1097 | candidate_table_exprs = TableExprList(table_exprs) |
| 1098 | candidate_table_exprs.extend(candidate_table_exprs.collections) |
| 1099 | # If filter out table expressions with no scalar columns. |
| 1100 | candidate_table_exprs = TableExprList( |
| 1101 | table_expr for table_expr in candidate_table_exprs if table_expr.cols) |
| 1102 | |
| 1103 | if required_table_expr_col_type: |
| 1104 | candidate_table_exprs = \ |
| 1105 | candidate_table_exprs.by_col_type[required_table_expr_col_type] |
| 1106 | if not candidate_table_exprs: |
| 1107 | raise Exception('No tables have the required column type') |
| 1108 | |
| 1109 | if table_count > 1: |
| 1110 | # If there are multiple multiple tables, the first chosen table must have joinable |
| 1111 | # columns. |
| 1112 | candidate_table_exprs = TableExprList( |
| 1113 | table_expr for table_expr in candidate_table_exprs |
| 1114 | if table_expr.joinable_cols_by_type) |
| 1115 | if not candidate_table_exprs: |
| 1116 | raise Exception('No tables have any joinable types') |
| 1117 | required_type = self.profile.choose_type( |
| 1118 | candidate_table_exprs.joinable_cols_by_type) |
| 1119 | else: |
| 1120 | required_type = None |
| 1121 | table_expr = self._create_table_expr(candidate_table_exprs, |
| 1122 | required_type=required_type) |
| 1123 | table_expr.alias = self.get_next_id() |
| 1124 | from_clause = FromClause(table_expr) |
| 1125 | |
| 1126 | for idx in range(1, table_count): |
| 1127 | join_clause = self._create_join_clause(from_clause, table_exprs) |
| 1128 | join_clause.table_expr.alias = self.get_next_id() |
| 1129 | from_clause.join_clauses.append(join_clause) |
| 1130 | |
| 1131 | return from_clause |
| 1132 | |
| 1133 | def _create_table_expr(self, table_exprs, required_type=None): |
| 1134 | if not table_exprs: |
no test coverage detected