For DSE 6.8+
| 2904 | |
| 2905 | |
| 2906 | class SchemaParserDSE68(SchemaParserDSE67): |
| 2907 | """ |
| 2908 | For DSE 6.8+ |
| 2909 | """ |
| 2910 | |
| 2911 | _SELECT_VERTICES = "SELECT * FROM system_schema.vertices" |
| 2912 | _SELECT_EDGES = "SELECT * FROM system_schema.edges" |
| 2913 | |
| 2914 | _table_metadata_class = TableMetadataDSE68 |
| 2915 | |
| 2916 | def __init__(self, connection, timeout): |
| 2917 | super(SchemaParserDSE68, self).__init__(connection, timeout) |
| 2918 | self.keyspace_table_vertex_rows = defaultdict(lambda: defaultdict(list)) |
| 2919 | self.keyspace_table_edge_rows = defaultdict(lambda: defaultdict(list)) |
| 2920 | |
| 2921 | def get_all_keyspaces(self): |
| 2922 | for keyspace_meta in super(SchemaParserDSE68, self).get_all_keyspaces(): |
| 2923 | self._build_graph_metadata(keyspace_meta) |
| 2924 | yield keyspace_meta |
| 2925 | |
| 2926 | def get_table(self, keyspaces, keyspace, table): |
| 2927 | table_meta = super(SchemaParserDSE68, self).get_table(keyspaces, keyspace, table) |
| 2928 | cl = ConsistencyLevel.ONE |
| 2929 | where_clause = bind_params(" WHERE keyspace_name = %%s AND %s = %%s" % (self._table_name_col), (keyspace, table), _encoder) |
| 2930 | vertices_query = QueryMessage(query=self._SELECT_VERTICES + where_clause, consistency_level=cl) |
| 2931 | edges_query = QueryMessage(query=self._SELECT_EDGES + where_clause, consistency_level=cl) |
| 2932 | |
| 2933 | (vertices_success, vertices_result), (edges_success, edges_result) \ |
| 2934 | = self.connection.wait_for_responses(vertices_query, edges_query, timeout=self.timeout, fail_on_error=False) |
| 2935 | vertices_result = self._handle_results(vertices_success, vertices_result) |
| 2936 | edges_result = self._handle_results(edges_success, edges_result) |
| 2937 | |
| 2938 | try: |
| 2939 | if vertices_result: |
| 2940 | table_meta.vertex = self._build_table_vertex_metadata(vertices_result[0]) |
| 2941 | elif edges_result: |
| 2942 | table_meta.edge = self._build_table_edge_metadata(keyspaces[keyspace], edges_result[0]) |
| 2943 | except Exception: |
| 2944 | table_meta.vertex = None |
| 2945 | table_meta.edge = None |
| 2946 | table_meta._exc_info = sys.exc_info() |
| 2947 | log.exception("Error while parsing graph metadata for table %s.%s.", keyspace, table) |
| 2948 | |
| 2949 | return table_meta |
| 2950 | |
| 2951 | @staticmethod |
| 2952 | def _build_keyspace_metadata_internal(row): |
| 2953 | name = row["keyspace_name"] |
| 2954 | durable_writes = row.get("durable_writes", None) |
| 2955 | replication = dict(row.get("replication")) if 'replication' in row else {} |
| 2956 | replication_class = replication.pop("class") if 'class' in replication else None |
| 2957 | graph_engine = row.get("graph_engine", None) |
| 2958 | return KeyspaceMetadata(name, durable_writes, replication_class, replication, graph_engine) |
| 2959 | |
| 2960 | def _build_graph_metadata(self, keyspace_meta): |
| 2961 | |
| 2962 | def _build_table_graph_metadata(table_meta): |
| 2963 | for row in self.keyspace_table_vertex_rows[keyspace_meta.name][table_meta.name]: |