diff --git a/report-tools/adaptors/sql/sqlite.py b/report-tools/adaptors/sql/sqlite.py
new file mode 100755
index 0000000..0adf493
--- /dev/null
+++ b/report-tools/adaptors/sql/sqlite.py
@@ -0,0 +1,37 @@
+##############################################################################
+# Copyright (c) 2021, ARM Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+##############################################################################
+"""
+SQL adaptor for SQLite queries
+"""
+import sqlite3
+
+
+class Database:
+    """
+    Class used to represent an sqlite database
+
+    Methods:
+        execute_query: Executes and sqlite query and returns response
+    """
+
+    def __init__(self, db):
+        """Inits Database class with an sqlite db instance"""
+        self.mydb = sqlite3.connect(db)
+        self.cursor = self.mydb.cursor()
+
+    def execute_query(self, query):
+        """Executes a sqlite query
+        Args:
+            query(str): sqlite query
+        Returns:
+            response to the query
+        """
+        try:
+            self.cursor.execute(query)
+            self.mydb.commit()
+            return self.cursor.fetchall()
+        except sqlite3.Error as err:
+            raise err
diff --git a/report-tools/adaptors/sql/yaml_parser.py b/report-tools/adaptors/sql/yaml_parser.py
new file mode 100755
index 0000000..b0ce15e
--- /dev/null
+++ b/report-tools/adaptors/sql/yaml_parser.py
@@ -0,0 +1,116 @@
+##############################################################################
+# Copyright (c) 2021, ARM Limited and Contributors. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+##############################################################################
+"""
+Class to parse .yaml file to generate a report.db
+"""
+import sys
+import yaml
+import sqlite
+
+
+class YAMLParser:
+    """
+    Class to represent a YAML Parser and creates database
+
+    Methods:
+        create_table: Creates sqlite db table with necessary fields.
+        parse_file: Parses the yaml file to obtain necessary data for the test result table and updates it.
+        update_test_config_table: Parses the yaml file to obtain necessary data fot the test config table and updates it
+    """
+    root_string = ""
+    test_suite_list = []
+
+    # contents of the test_config table
+    test_config_table = [
+        "build_id",
+        "target",
+        "bitbake_version",
+        "yocto_version"
+    ]
+
+    # contents of test_result table
+    test_result_table = [
+        "build_id",
+        "date",
+        "test_suite",
+        "test_case",
+        "result"
+    ]
+
+    def __init__(self, file_name=sys.argv[1]):
+        """Creates an instance for sqlite_obj and loads the contents of the yamlfile to be parsed """
+
+        try:
+            self.sqlite_obj = sqlite.Database("report.db")
+            with open(file_name) as file:
+                self.contents = yaml.load(file, Loader=yaml.FullLoader)
+                self.root_string = [i for i in self.contents.keys()][0]
+        except Exception as err:
+            print(err)
+
+    def create_table(self):
+        """Creates empty tables in the sqlite database from the contents of test_config_table and test_result_table"""
+
+        test_config_query = """
+        CREATE TABLE `test_configuration` (
+        {0} TEXT,
+        {1} TEXT,
+        {2} TEXT,
+        {3} TEXT,
+        PRIMARY KEY ({0})
+        );
+        """.format(self.test_config_table[0], self.test_config_table[1], self.test_config_table[2],
+                   self.test_config_table[3])
+
+        test_results_query = """
+        CREATE TABLE `test_results` (
+        {0} TEXT,
+        {1} TEXT,
+        {2} TEXT,
+        {3} TEXT,
+        {4} TEXT,
+        FOREIGN KEY ({0}) REFERENCES `test_configuration`({0})
+        );
+        """.format(self.test_result_table[0], self.test_result_table[1], self.test_result_table[2],
+                   self.test_result_table[3], self.test_result_table[4])
+
+        self.sqlite_obj.execute_query(test_config_query)
+        self.sqlite_obj.execute_query(test_results_query)
+
+    def parse_file(self):
+        """Parses the yaml file"""
+
+        build_id = self.contents[self.root_string]['metadata']['CI_PIPELINE_ID']
+        # dependent on the generated yaml file. Code will be uncommented based
+        # on the yaml file
+        # self.contents[self.root_string]['metadata']['CI_COMMIT_TIMESTAMP']
+        date = ""
+        for test_suite in self.contents[self.root_string]['test-suites'].keys():
+            for test_case in self.contents[self.root_string]['test-suites'][test_suite]['test-results'].keys():
+                result = self.contents[self.root_string]['test-suites'][test_suite]['test-results'][test_case]["status"]
+                update_result_table_query = "INSERT INTO test_results VALUES ('{0}', '{1}', '{2}', '{3}', '{4}')". \
+                    format(build_id, date, test_suite, test_case, result)
+                self.sqlite_obj.execute_query(update_result_table_query)
+
+    def update_test_config_table(self):
+        """Updates tables in the report.db with the values from the yaml file"""
+
+        build_id = self.contents[self.root_string]['metadata']['CI_PIPELINE_ID']
+        target = self.contents[self.root_string]['target']['platform'] + \
+            "_" + self.contents[self.root_string]['target']['version']
+
+        bitbake_version = "1.0"
+        yocto_version = "2.0"
+        update_table_query = "INSERT INTO test_configuration VALUES ('{0}', '{1}', '{2}', '{3}')".\
+            format(build_id, target, bitbake_version, yocto_version)
+        self.sqlite_obj.execute_query(update_table_query)
+
+
+if __name__ == "__main__":
+    yaml_obj = YAMLParser()
+    yaml_obj.create_table()
+    yaml_obj.parse_file()
+    yaml_obj.update_test_config_table()
