def _validate_and_load(self, query_name_filters): """Validates that the Workload is legal.""" query_name_filters = map( str.strip, query_name_filters) if query_name_filters else [] self._base_dir = os.path.join(Workload.WORKLOAD_DIR, self._name, 'queries') # Check whether the workload name corresponds to an existing directory. if not os.path.isdir(self._base_dir): raise ValueError("Workload %s not found in %s" % (self._name, self._base_dir)) sections = list() # Parse all queries files for the given workload. for file_name in self._list_query_files(): sections.extend(parse_query_test_file(file_name)) # If the user has specified query names, check whether all the user specified queries # exist in the query files. all_query_names = [ s['QUERY_NAME'] for s in sections if s['QUERY_NAME'].strip() ] regex = re.compile(r'|'.join(['^%s$' % n for n in query_name_filters]), re.I) matched_query_names = filter(lambda x: re.match(regex, x), all_query_names) assert len(matched_query_names ) > 0, "No matching queries found for %s" % self._name # Filter the sections based on the queries the user wants. sections = filter(lambda x: x['QUERY_NAME'] in matched_query_names, sections) # Add the filtered queries to the query map for section in sections: self._query_map[section['QUERY_NAME']] = section['QUERY']
def load_query_test_file(self, workload, file_name, valid_section_names=None, encoding=None): """ Loads/Reads the specified query test file. Accepts the given section names as valid. Uses a default list of valid section names if valid_section_names is None. """ test_file_path = os.path.join(WORKLOAD_DIR, workload, 'queries', file_name + '.test') if not os.path.isfile(test_file_path): assert False, 'Test file not found: %s' % file_name return parse_query_test_file(test_file_path, valid_section_names, encoding=encoding)
def load_queries_from_test_file(file_path, db_name=None): LOG.debug("Loading queries from %s", file_path) test_cases = test_file_parser.parse_query_test_file(file_path) queries = list() for test_case in test_cases: query = Query() query.sql = test_file_parser.remove_comments(test_case["QUERY"]) query.db_name = db_name queries.append(query) return queries
def load_tpc_queries(workload): """Returns a list of tpc queries. 'workload' should either be 'tpch' or 'tpcds'.""" queries = list() query_dir = os.path.join(os.path.dirname(__file__), "..", "..", "testdata", "workloads", workload, "queries") for query_file in os.listdir(query_dir): if workload + "-q" not in query_file: continue test_cases = test_file_parser.parse_query_test_file( os.path.join(query_dir, query_file)) for test_case in test_cases: query = Query() query.sql = test_file_parser.remove_comments(test_case["QUERY"]) queries.append(query) return queries
def _validate_and_load(self, query_name_filters): """Validates that the Workload is legal.""" query_name_filters = map(str.strip, query_name_filters) if query_name_filters else [] self._base_dir = os.path.join(Workload.WORKLOAD_DIR, self._name, 'queries') # Check whether the workload name corresponds to an existing directory. if not os.path.isdir(self._base_dir): raise ValueError("Workload %s not found in %s" % (self._name, self._base_dir)) sections = list() # Parse all queries files for the given workload. for file_name in self._list_query_files(): sections.extend(parse_query_test_file(file_name)) # If the user has specified query names, check whether all the user specified queries # exist in the query files. all_query_names = [s['QUERY_NAME'] for s in sections if s['QUERY_NAME'].strip()] regex = re.compile(r'|'.join(['^%s$' % n for n in query_name_filters]), re.I) matched_query_names = filter(lambda x: re.match(regex, x), all_query_names) assert len(matched_query_names) > 0, "No matching queries found for %s" % self._name # Filter the sections based on the queries the user wants. sections = filter(lambda x: x['QUERY_NAME'] in matched_query_names, sections) # Add the filtered queries to the query map for section in sections: self._query_map[section['QUERY_NAME']] = section['QUERY']