diff options
Diffstat (limited to 'srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/src/MariaDB.js')
| -rw-r--r-- | srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/src/MariaDB.js | 271 |
1 files changed, 271 insertions, 0 deletions
diff --git a/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/src/MariaDB.js b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/src/MariaDB.js new file mode 100644 index 0000000..a6f3c01 --- /dev/null +++ b/srcs/phpmyadmin/vendor/williamdes/mariadb-mysql-kbs/src/MariaDB.js @@ -0,0 +1,271 @@ +'use strict'; + +const common = require(__dirname + '/common'); +const cleaner = require(__dirname + '/cleaner'); + +/** + * Create a doc element + * @param {Element} element The root element + * @returns object The doc object + */ +const createDoc = function($, element) { + let doc = { + id: $(element).attr('id'), + name: $(element) + .text() + .trim(), + }; + try { + /* jshint -W083 */ + // Parse ul > li + const ulElementList = $(element) + .nextAll() + .not('p') + .first(); + if (ulElementList.find('li > strong').length === 0) { + return { id: null }; + } + ulElementList.find('li').each((i, elementDescr) => { + const valueKey = $(elementDescr); + const key = valueKey + .find('strong') + .text() + .toLowerCase() + .trim(); + const value = $(elementDescr) + .text() + .replace(valueKey.find('strong').text(), '') + .trim(); + switch (key) { + case 'dynamic:': + doc.dynamic = value.toLowerCase() === 'yes'; + break; + case 'scope:': + doc.scope = value + .toLowerCase() + .split(',') + .map(item => { + if (item.match(/session/)) { + return 'session'; + } else if (item.match(/global/)) { + return 'global'; + } else { + return item.trim(); + } + }); + doc.scope = doc.scope.filter(function(e) { + return e === 0 || e; + }); + break; + case 'type:': + doc.type = cleaner.cleanType(value.toLowerCase()); + break; + case 'data type:': + /* + * Default method, <li> has a <code> child + * Example: <li><strong>Data Type:</strong> <code>numeric</code></li> + */ + let dataType = valueKey.find('code'); + if (dataType.length > 0) { + doc.type = cleaner.cleanType( + dataType + .first() + .text() + .toLowerCase() + .trim() + ); + } else { + /* + * Fallback method, <li> has text + * Example: <li><strong>Data Type:</strong> boolean</li> + */ + let dataType = value.replace(/undefined/gi, ''); + dataType = dataType.toLowerCase().trim(); + if (dataType !== '') { + doc.type = cleaner.cleanType(dataType); + } else if (dataType === '') { + console.log('Empty datatype found for : ' + doc.id); + } else { + console.log('No datatype found for : ' + doc.id); + } + } + break; + case 'description:': + doc.type = cleaner.cleanType(value.toLowerCase()); + break; + case 'default value:': + case 'default:': + doc.default = cleaner.cleanDefault( + valueKey + .text() + .replace(valueKey.find('strong').text(), '') + .trim() + ); + break; + case 'valid values:': + doc.validValues = valueKey + .find('code') + .get() + .map(el => $(el).text()); + break; + case 'range:': + doc.range = valueKey + .find('code') + .get() + .map(el => $(el).text()); + if (doc.range.length === 1) { + // try x-y + doc.range = doc.range[0].split('-').map(item => item.trim()); + } + if (doc.range.length === 1) { + // try x to y + doc.range = doc.range[0].split('to').map(item => item.trim()); + } + if (doc.range[1] !== undefined) { + doc.range[1] = parseFloat(doc.range[1]); + } + if (doc.range.length === 1) { + // try x upwards + if (value.includes('upwards')) { + doc.range[1] = value; + } + } + // Could be oneday a float + doc.range = { + from: parseFloat(doc.range[0]), + to: doc.range[1], + }; + doc.range = cleaner.cleanRange(doc.range); + + break; + case 'commandline:': + if ( + typeof value === 'string' && + (value.toLowerCase() !== 'no' && + value.toLowerCase() !== 'none' && + value.toLowerCase() !== 'n/a' && + value.toLowerCase() !== 'no commandline option') + ) { + doc.cli = cleaner.cleanCli(value, true); + } + break; + default: + break; + } + }); + /* jshint +W083 */ + } catch (e) { + console.error(e); + console.log('Error at : #' + doc.id); + } + if (doc.type !== undefined) { + if (doc.type === 'numeric') { + doc.type = 'integer'; + } + } + return doc; +}; + +function parsePage($, cbSuccess) { + var anchors = []; + $('.anchored_heading').each(function(i, el) { + let doc = createDoc($, el); + if (doc.id && typeof doc.id === 'string') { + anchors.push(doc); + } + }); + cbSuccess(anchors); +} + +const KB_URL = 'https://mariadb.com/kb/en/library/documentation/'; + +const storageEngines = ['aria', 'myrocks', 'cassandra', 'galera-cluster', 'mroonga', 'myisam', 'tokudb', 'connect']; + +const systemVariables = ['xtradbinnodb-server', 'mariadb-audit-plugin', 'ssltls', 'performance-schema']; + +const custom = [ + { + url: 'columns-storage-engines-and-plugins/storage-engines/spider/spider-server-system-variables/', + name: 'spider-server-system-variables', + }, + { + url: 'semisynchronous-replication/', + name: 'semisynchronous-replication-system-variables', + }, + { + url: 'replication-and-binary-log-server-system-variables/', + name: 'replication-and-binary-log-server-system-variables', + }, + { + url: 'gtid/', + name: 'gtid-system-variables', + }, + { + url: 'replication/optimization-and-tuning/system-variables/server-system-variables/', + name: 'server-system-variables', + }, + { + url: 'system-versioned-tables/', + name: 'versioned-tables-system-variables', + }, +]; + +const status = [ + 'server', + 'galera-cluster', + 'aria-server', + 'cassandra', + 'mroonga', + 'spider-server', + 'sphinx', + 'tokudb', + 'xtradbinnodb-server', + 'replication-and-binary-log', + 'oqgraph-system-and', + 'thread-pool-system-and', + 'ssltls', + 'mariadb-audit-plugin', + 'semisynchronous-replication-plugin', +]; + +const pages = []; + +storageEngines.forEach(se => { + pages.push({ + url: KB_URL + 'columns-storage-engines-and-plugins/storage-engines/' + se + '/' + se + '-system-variables/', + name: se + '-system-variables', + }); +}); + +custom.forEach(cu => { + pages.push({ + url: KB_URL + cu.url, + name: cu.name, + }); +}); + +status.forEach(statusName => { + pages.push({ + url: KB_URL + statusName + '-status-variables/', + name: statusName + '-status-variables', + }); +}); + +systemVariables.forEach(systemVariableName => { + pages.push({ + url: KB_URL + systemVariableName + '-system-variables/', + name: systemVariableName + '-system-variables', + }); +}); + +module.exports = { + run: () => { + /*var pages = [ + { + url: 'http://7.2.local/Global%20Transaction%20ID%20-%20MariaDB%20Knowledge%20Base.html', + name: 'gtid-system-variables' + } + ]*/ + return common.processDataExtraction(pages, 'mariadb-', parsePage); + }, +}; |
