Latest commit

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

SQL Query Database Engine in Python

Uses sqlparse and sql-metadata parsers to evaluate the SQL queries and print the result. Some additional features of SQL parser and translator are created in Python for this project.

Implemented SQL Operations

  • SELECT
  • INNER JOIN
  • WHERE
  • LIMIT
  • AGGREGATION (SUM, MIN, MAX, AVG, COUNT)
  • ALIAS

Architecture

The database reads the data from .dat files. The .dat files contain a single tuple at each line, with each column separated by pipe ( | ) symbol. The name of the data files is read from the CREATE statement. The SQL query must be given using .sql file that consists of CREATE statements at the beginning for all tables and SELECT queries in each line. The sample .dat files are given in this repository under the data folder. The sample .sql files are provided under the queries folder.

alt text

The database reads one tuple at a time from the tables that are asked in the query. The tuples from different tables are merged into a single tuple based on the JOIN condition. Then, the columns in the tuple are compared for the WHERE condition, and if the comparison is met, the tuple is then printed to the output or stored in the memory for the final aggregation to be performed. If the LIMIT is reached, the query execution will stop. The detailed query plan is given below:

alt text

Usage

Clone this Git repository

git clone https://github.com/rdpahalavan/sql-dbms-python.git

Change directory

cd sql-dbms-python

Running SQL queries

To run the queries stored in the .sql file, run the code below in the given format.

python3 DBMS.py data/ queries/Q1.SQL

Note:

  • DBMS.py is the main program file
  • data/ is the address of the folder where the .dat data files are located
  • queries/Q1.SQL is the address of the .sql file to be executed

To save the output to the file,

python3 DBMS.py data/ queries/Q1.SQL > output.txt

Note: Add the address of the file that the result of the queries to be stored at the end of the command

To run a different query at the command line, use the format below:

python3 DBMS.py data/ queries/Q1.SQL "SELECT SUM(A) FROM R WHERE B > 4;"

Note:

  • Give the custom query next to the .sql file address
  • The given query will replace the first SELECT query present inside the .sql file
  • This database engine supports only the type of queries given in the example files

About

SQL Query Database Engine in Python

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

SQL Query Database Engine in Python

Uses sqlparse and sql-metadata parsers to evaluate the SQL queries and print the result. Some additional features of SQL parser and translator are created in Python for this project.

Implemented SQL Operations

  • SELECT
  • INNER JOIN
  • WHERE
  • LIMIT
  • AGGREGATION (SUM, MIN, MAX, AVG, COUNT)
  • ALIAS

Architecture

The database reads the data from .dat files. The .dat files contain a single tuple at each line, with each column separated by pipe ( | ) symbol. The name of the data files is read from the CREATE statement. The SQL query must be given using .sql file that consists of CREATE statements at the beginning for all tables and SELECT queries in each line. The sample .dat files are given in this repository under the data folder. The sample .sql files are provided under the queries folder.

alt text

The database reads one tuple at a time from the tables that are asked in the query. The tuples from different tables are merged into a single tuple based on the JOIN condition. Then, the columns in the tuple are compared for the WHERE condition, and if the comparison is met, the tuple is then printed to the output or stored in the memory for the final aggregation to be performed. If the LIMIT is reached, the query execution will stop. The detailed query plan is given below:

alt text

Usage

Clone this Git repository

git clone https://github.com/rdpahalavan/sql-dbms-python.git

Change directory

cd sql-dbms-python

Running SQL queries

To run the queries stored in the .sql file, run the code below in the given format.

python3 DBMS.py data/ queries/Q1.SQL

Note:

  • DBMS.py is the main program file
  • data/ is the address of the folder where the .dat data files are located
  • queries/Q1.SQL is the address of the .sql file to be executed

To save the output to the file,

python3 DBMS.py data/ queries/Q1.SQL > output.txt

Note: Add the address of the file that the result of the queries to be stored at the end of the command

To run a different query at the command line, use the format below:

python3 DBMS.py data/ queries/Q1.SQL "SELECT SUM(A) FROM R WHERE B > 4;"

Note:

  • Give the custom query next to the .sql file address
  • The given query will replace the first SELECT query present inside the .sql file
  • This database engine supports only the type of queries given in the example files

About

SQL Query Database Engine in Python

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

SQL Query Database Engine in Python

Uses sqlparse and sql-metadata parsers to evaluate the SQL queries and print the result. Some additional features of SQL parser and translator are created in Python for this project.

Implemented SQL Operations

  • SELECT
  • INNER JOIN
  • WHERE
  • LIMIT
  • AGGREGATION (SUM, MIN, MAX, AVG, COUNT)
  • ALIAS

Architecture

The database reads the data from .dat files. The .dat files contain a single tuple at each line, with each column separated by pipe ( | ) symbol. The name of the data files is read from the CREATE statement. The SQL query must be given using .sql file that consists of CREATE statements at the beginning for all tables and SELECT queries in each line. The sample .dat files are given in this repository under the data folder. The sample .sql files are provided under the queries folder.

alt text

The database reads one tuple at a time from the tables that are asked in the query. The tuples from different tables are merged into a single tuple based on the JOIN condition. Then, the columns in the tuple are compared for the WHERE condition, and if the comparison is met, the tuple is then printed to the output or stored in the memory for the final aggregation to be performed. If the LIMIT is reached, the query execution will stop. The detailed query plan is given below:

alt text

Usage

Clone this Git repository

git clone https://github.com/rdpahalavan/sql-dbms-python.git

Change directory

cd sql-dbms-python

Running SQL queries

To run the queries stored in the .sql file, run the code below in the given format.

python3 DBMS.py data/ queries/Q1.SQL

Note:

  • DBMS.py is the main program file
  • data/ is the address of the folder where the .dat data files are located
  • queries/Q1.SQL is the address of the .sql file to be executed

To save the output to the file,

python3 DBMS.py data/ queries/Q1.SQL > output.txt

Note: Add the address of the file that the result of the queries to be stored at the end of the command

To run a different query at the command line, use the format below:

python3 DBMS.py data/ queries/Q1.SQL "SELECT SUM(A) FROM R WHERE B > 4;"

Note:

  • Give the custom query next to the .sql file address
  • The given query will replace the first SELECT query present inside the .sql file
  • This database engine supports only the type of queries given in the example files

About

SQL Query Database Engine in Python

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

SQL Query Database Engine in Python

Uses sqlparse and sql-metadata parsers to evaluate the SQL queries and print the result. Some additional features of SQL parser and translator are created in Python for this project.

Implemented SQL Operations

  • SELECT
  • INNER JOIN
  • WHERE
  • LIMIT
  • AGGREGATION (SUM, MIN, MAX, AVG, COUNT)
  • ALIAS

Architecture

The database reads the data from .dat files. The .dat files contain a single tuple at each line, with each column separated by pipe ( | ) symbol. The name of the data files is read from the CREATE statement. The SQL query must be given using .sql file that consists of CREATE statements at the beginning for all tables and SELECT queries in each line. The sample .dat files are given in this repository under the data folder. The sample .sql files are provided under the queries folder.

alt text

The database reads one tuple at a time from the tables that are asked in the query. The tuples from different tables are merged into a single tuple based on the JOIN condition. Then, the columns in the tuple are compared for the WHERE condition, and if the comparison is met, the tuple is then printed to the output or stored in the memory for the final aggregation to be performed. If the LIMIT is reached, the query execution will stop. The detailed query plan is given below:

alt text

Usage

Clone this Git repository

git clone https://github.com/rdpahalavan/sql-dbms-python.git

Change directory

cd sql-dbms-python

Running SQL queries

To run the queries stored in the .sql file, run the code below in the given format.

python3 DBMS.py data/ queries/Q1.SQL

Note:

  • DBMS.py is the main program file
  • data/ is the address of the folder where the .dat data files are located
  • queries/Q1.SQL is the address of the .sql file to be executed

To save the output to the file,

python3 DBMS.py data/ queries/Q1.SQL > output.txt

Note: Add the address of the file that the result of the queries to be stored at the end of the command

To run a different query at the command line, use the format below:

python3 DBMS.py data/ queries/Q1.SQL "SELECT SUM(A) FROM R WHERE B > 4;"

Note:

  • Give the custom query next to the .sql file address
  • The given query will replace the first SELECT query present inside the .sql file
  • This database engine supports only the type of queries given in the example files

About

SQL Query Database Engine in Python

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

SQL Query Database Engine in Python

Uses sqlparse and sql-metadata parsers to evaluate the SQL queries and print the result. Some additional features of SQL parser and translator are created in Python for this project.

Implemented SQL Operations

  • SELECT
  • INNER JOIN
  • WHERE
  • LIMIT
  • AGGREGATION (SUM, MIN, MAX, AVG, COUNT)
  • ALIAS

Architecture

The database reads the data from .dat files. The .dat files contain a single tuple at each line, with each column separated by pipe ( | ) symbol. The name of the data files is read from the CREATE statement. The SQL query must be given using .sql file that consists of CREATE statements at the beginning for all tables and SELECT queries in each line. The sample .dat files are given in this repository under the data folder. The sample .sql files are provided under the queries folder.

alt text

The database reads one tuple at a time from the tables that are asked in the query. The tuples from different tables are merged into a single tuple based on the JOIN condition. Then, the columns in the tuple are compared for the WHERE condition, and if the comparison is met, the tuple is then printed to the output or stored in the memory for the final aggregation to be performed. If the LIMIT is reached, the query execution will stop. The detailed query plan is given below:

alt text

Usage

Clone this Git repository

git clone https://github.com/rdpahalavan/sql-dbms-python.git

Change directory

cd sql-dbms-python

Running SQL queries

To run the queries stored in the .sql file, run the code below in the given format.

python3 DBMS.py data/ queries/Q1.SQL

Note:

  • DBMS.py is the main program file
  • data/ is the address of the folder where the .dat data files are located
  • queries/Q1.SQL is the address of the .sql file to be executed

To save the output to the file,

python3 DBMS.py data/ queries/Q1.SQL > output.txt

Note: Add the address of the file that the result of the queries to be stored at the end of the command

To run a different query at the command line, use the format below:

python3 DBMS.py data/ queries/Q1.SQL "SELECT SUM(A) FROM R WHERE B > 4;"

Note:

  • Give the custom query next to the .sql file address
  • The given query will replace the first SELECT query present inside the .sql file
  • This database engine supports only the type of queries given in the example files

About

SQL Query Database Engine in Python

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

SQL Query Database Engine in Python

Uses sqlparse and sql-metadata parsers to evaluate the SQL queries and print the result. Some additional features of SQL parser and translator are created in Python for this project.

Implemented SQL Operations

  • SELECT
  • INNER JOIN
  • WHERE
  • LIMIT
  • AGGREGATION (SUM, MIN, MAX, AVG, COUNT)
  • ALIAS

Architecture

The database reads the data from .dat files. The .dat files contain a single tuple at each line, with each column separated by pipe ( | ) symbol. The name of the data files is read from the CREATE statement. The SQL query must be given using .sql file that consists of CREATE statements at the beginning for all tables and SELECT queries in each line. The sample .dat files are given in this repository under the data folder. The sample .sql files are provided under the queries folder.

alt text

The database reads one tuple at a time from the tables that are asked in the query. The tuples from different tables are merged into a single tuple based on the JOIN condition. Then, the columns in the tuple are compared for the WHERE condition, and if the comparison is met, the tuple is then printed to the output or stored in the memory for the final aggregation to be performed. If the LIMIT is reached, the query execution will stop. The detailed query plan is given below:

alt text

Usage

Clone this Git repository

git clone https://github.com/rdpahalavan/sql-dbms-python.git

Change directory

cd sql-dbms-python

Running SQL queries

To run the queries stored in the .sql file, run the code below in the given format.

python3 DBMS.py data/ queries/Q1.SQL

Note:

  • DBMS.py is the main program file
  • data/ is the address of the folder where the .dat data files are located
  • queries/Q1.SQL is the address of the .sql file to be executed

To save the output to the file,

python3 DBMS.py data/ queries/Q1.SQL > output.txt

Note: Add the address of the file that the result of the queries to be stored at the end of the command

To run a different query at the command line, use the format below:

python3 DBMS.py data/ queries/Q1.SQL "SELECT SUM(A) FROM R WHERE B > 4;"

Note:

  • Give the custom query next to the .sql file address
  • The given query will replace the first SELECT query present inside the .sql file
  • This database engine supports only the type of queries given in the example files

About

SQL Query Database Engine in Python

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

SQL Query Database Engine in Python

Uses sqlparse and sql-metadata parsers to evaluate the SQL queries and print the result. Some additional features of SQL parser and translator are created in Python for this project.

Implemented SQL Operations

  • SELECT
  • INNER JOIN
  • WHERE
  • LIMIT
  • AGGREGATION (SUM, MIN, MAX, AVG, COUNT)
  • ALIAS

Architecture

The database reads the data from .dat files. The .dat files contain a single tuple at each line, with each column separated by pipe ( | ) symbol. The name of the data files is read from the CREATE statement. The SQL query must be given using .sql file that consists of CREATE statements at the beginning for all tables and SELECT queries in each line. The sample .dat files are given in this repository under the data folder. The sample .sql files are provided under the queries folder.

alt text

The database reads one tuple at a time from the tables that are asked in the query. The tuples from different tables are merged into a single tuple based on the JOIN condition. Then, the columns in the tuple are compared for the WHERE condition, and if the comparison is met, the tuple is then printed to the output or stored in the memory for the final aggregation to be performed. If the LIMIT is reached, the query execution will stop. The detailed query plan is given below:

alt text

Usage

Clone this Git repository

git clone https://github.com/rdpahalavan/sql-dbms-python.git

Change directory

cd sql-dbms-python

Running SQL queries

To run the queries stored in the .sql file, run the code below in the given format.

python3 DBMS.py data/ queries/Q1.SQL

Note:

  • DBMS.py is the main program file
  • data/ is the address of the folder where the .dat data files are located
  • queries/Q1.SQL is the address of the .sql file to be executed

To save the output to the file,

python3 DBMS.py data/ queries/Q1.SQL > output.txt

Note: Add the address of the file that the result of the queries to be stored at the end of the command

To run a different query at the command line, use the format below:

python3 DBMS.py data/ queries/Q1.SQL "SELECT SUM(A) FROM R WHERE B > 4;"

Note:

  • Give the custom query next to the .sql file address
  • The given query will replace the first SELECT query present inside the .sql file
  • This database engine supports only the type of queries given in the example files

About

SQL Query Database Engine in Python

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

SQL Query Database Engine in Python

Uses sqlparse and sql-metadata parsers to evaluate the SQL queries and print the result. Some additional features of SQL parser and translator are created in Python for this project.

Implemented SQL Operations

  • SELECT
  • INNER JOIN
  • WHERE
  • LIMIT
  • AGGREGATION (SUM, MIN, MAX, AVG, COUNT)
  • ALIAS

Architecture

The database reads the data from .dat files. The .dat files contain a single tuple at each line, with each column separated by pipe ( | ) symbol. The name of the data files is read from the CREATE statement. The SQL query must be given using .sql file that consists of CREATE statements at the beginning for all tables and SELECT queries in each line. The sample .dat files are given in this repository under the data folder. The sample .sql files are provided under the queries folder.

alt text

The database reads one tuple at a time from the tables that are asked in the query. The tuples from different tables are merged into a single tuple based on the JOIN condition. Then, the columns in the tuple are compared for the WHERE condition, and if the comparison is met, the tuple is then printed to the output or stored in the memory for the final aggregation to be performed. If the LIMIT is reached, the query execution will stop. The detailed query plan is given below:

alt text

Usage

Clone this Git repository

git clone https://github.com/rdpahalavan/sql-dbms-python.git

Change directory

cd sql-dbms-python

Running SQL queries

To run the queries stored in the .sql file, run the code below in the given format.

python3 DBMS.py data/ queries/Q1.SQL

Note:

  • DBMS.py is the main program file
  • data/ is the address of the folder where the .dat data files are located
  • queries/Q1.SQL is the address of the .sql file to be executed

To save the output to the file,

python3 DBMS.py data/ queries/Q1.SQL > output.txt

Note: Add the address of the file that the result of the queries to be stored at the end of the command

To run a different query at the command line, use the format below:

python3 DBMS.py data/ queries/Q1.SQL "SELECT SUM(A) FROM R WHERE B > 4;"

Note:

  • Give the custom query next to the .sql file address
  • The given query will replace the first SELECT query present inside the .sql file
  • This database engine supports only the type of queries given in the example files

About

SQL Query Database Engine in Python

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages