| 785 | |
| 786 | |
| 787 | class InsertStatement(AbstractStatement): |
| 788 | |
| 789 | def __init__(self, with_clause=None, insert_clause=None, select_query=None, |
| 790 | values_clause=None, execution=None): |
| 791 | """ |
| 792 | Represent an INSERT/UPSERT statement. Note that UPSERTs are very similar to INSERTs, |
| 793 | so this data structure can easily deal with both. |
| 794 | |
| 795 | The INSERT/UPSERT may have an optional WithClause, and then either a SELECT query |
| 796 | (Query) object from whose rows we INSERT, or a VALUES clause, but not both. |
| 797 | |
| 798 | The execution attribute is used by the discrepancy_searcher to track whether this |
| 799 | InsertStatement is some sort of setup operation or a true random statement test. |
| 800 | """ |
| 801 | super(InsertStatement, self).__init__() |
| 802 | self._select_query = None |
| 803 | self._values_clause = None |
| 804 | self.execution = execution |
| 805 | self.select_query = select_query |
| 806 | self.values_clause = values_clause |
| 807 | self.with_clause = with_clause |
| 808 | self.insert_clause = insert_clause |
| 809 | |
| 810 | @property |
| 811 | def select_query(self): |
| 812 | return self._select_query |
| 813 | |
| 814 | @select_query.setter |
| 815 | def select_query(self, select_query): |
| 816 | if self.values_clause is None or select_query is None: |
| 817 | self._select_query = select_query |
| 818 | else: |
| 819 | raise Exception('An INSERT/UPSERT statement may not have both the select_query and ' |
| 820 | 'values_clause set: {select}; {values}'.format( |
| 821 | select=select_query, values=self.values_clause)) |
| 822 | |
| 823 | @property |
| 824 | def values_clause(self): |
| 825 | return self._values_clause |
| 826 | |
| 827 | @values_clause.setter |
| 828 | def values_clause(self, values_clause): |
| 829 | if self.select_query is None or values_clause is None: |
| 830 | self._values_clause = values_clause |
| 831 | else: |
| 832 | raise Exception('An INSERT/UPSERT statement may not have both the select_query and ' |
| 833 | 'values_clause set: {select}; {values}'.format( |
| 834 | select=self.select_query, values=values_clause)) |
| 835 | |
| 836 | @property |
| 837 | def table_exprs(self): |
| 838 | table_exprs = super(InsertStatement, self).table_exprs # WITH clause |
| 839 | if self.select_query is not None: |
| 840 | table_exprs.extend(self.select_query.table_exprs) |
| 841 | return table_exprs |
| 842 | |
| 843 | @property |
| 844 | def nested_queries(self): |
no outgoing calls
no test coverage detected