///////////////////////////////////////////////////////////////////////////
//
// XBSDB - Cross-Browser JavaScript Database library
// Copyright (C) 2010 Alexey A.Znayev
//
// This file is part of XBSDB demo.
//
// Alexey A.Znayev, znaeff@mail.ru
//
///////////////////////////////////////////////////////////////////////////
//global variable containing database, initiated in function 'InitDemoPage()'
var DB1;
//global variables containing current table related info
var sTableName;
var sTableDescription;
var aTableStructureDescription;
var sTableQueryFieldsValue;
var sTableQueryWhereValue;
var sTableQueryOrderByValue;
var sTableQueryLimitValue;
var sTableDump2Load;
//functions
function InitDemoPage(sLocale){
var t0 = new Date();
DB1 = new XBSDB(sLocale);
if(DB1.sResultCode != 'OK'){
alert(DB1.ResultText() + "\nCurrent locale is '" + DB1.GetLocale() + "'");
}
document.getElementById('query_fields').value = '';
document.getElementById('query_where').value = '';
document.getElementById('query_order_by').value = '';
document.getElementById('query_limit').value = '';
MakeTableActionActive(-1);
var t1 = new Date();
var sResultTime = (t1.getTime()-t0.getTime())/1000 + ' sec.';
ShowResultInfo(sResultTime,'Database created','','','');
}
function ButtonTableLoadClick(sTableName){
if(DB1.IsTable(sTableName) && !confirm('Table ' + sTableName + " exists\nConfirm to overload")){
return;
}
switch(sTableName){
case 'table1' :
sTableDump2Load = sTable1Dump;
break;
case 'table2':
sTableDump2Load = sTable2Dump;
break;
case 'table3':
sTableDump2Load = sTable3Dump;
break;
default :
return;
}
MakeDatabaseChanged('load', sTableName);
}
function ButtonTableDropClick(sTableName){
MakeDatabaseChanged('drop', sTableName);
}
function ButtonTableDumpClick(sTableName){
MakeDatabaseChanged('dump', sTableName);
}
function MakeDatabaseChanged(sTableAction,sTableName){
var vResult, sResultOper = "Table '" + sTableName + "' ", sResultHeader = '', sResultBody = '', sResultAlert = '', sDone;
var t0 = new Date();
switch(sTableAction){
case 'load' :
sDone = 'loaded';
sResultHeader = '<tr><th class="r">String to load "' + sTableName + '" (length = ' + sTableDump2Load.length + ')</th></tr>';
sResultBody = '<tr><td class="r"><textarea cols="100" rows="10" readonly="1">' + sTableDump2Load + '</textarea></td></tr>';
vResult = DB1.LoadTable(sTableName,sTableDump2Load);
sTableDump2Load = '';
break;
case 'drop' :
sDone = 'dropped';
vResult = DB1.DropTable(sTableName);
break;
case 'dump' :
sDone = 'dumped';
vResult = DB1.DumpTable(sTableName,'string');
if(typeof vResult == 'string'){
sResultHeader = '<tr><th class="r">Dump of "' + sTableName + '" (length = ' + vResult.length + ')</th></tr>';
sResultBody = '<tr><td class="r"><textarea cols="100" rows="10" readonly="1">' + vResult + '</textarea></td></tr>';
}
break;
}
var t1 = new Date();
var sResultTime = (t1.getTime()-t0.getTime())/1000 + ' sec.';
var sTableNewName = '';
if(vResult){
ShowResultInfo(sResultTime,sResultOper + sDone,sResultHeader,sResultBody,sResultAlert);
switch(sTableAction){
case 'load' :
document.getElementById('drop_' + sTableName).disabled = false;
document.getElementById('dump_' + sTableName).disabled = false;
sTableNewName = sTableName;
break;
case 'drop':
document.getElementById('drop_' + sTableName).disabled = true;
document.getElementById('dump_' + sTableName).disabled = true;
break;
}
}else{
sResultAlert = DB1.ResultText();
ShowResultInfo(sResultTime,sResultOper + "not " + sDone,sResultHeader,sResultBody,sResultAlert);
return;
}
var aTables = DB1.ShowTables();
var sSelectedTable = '';
if(Object.prototype.toString.call(aTables) === '[object Array]'){
document.getElementById('tables_number').innerHTML = 'Tables in database <B>' + aTables.length + '</B>';
var oTableSelect = document.getElementById('table_select');
if(aTables.length > 0){
oTableSelect.disabled = false;
oTableSelect.options.length = 0;
if(sTableNewName != ''){
sSelectedTable = sTableNewName;
}
for(var i=0; i<aTables.length; i++){
if(sSelectedTable == ''){
sSelectedTable = (aTables[i] == sTableName) ? sTableName : '';
}
oTableSelect.options[i] = new Option(aTables[i],aTables[i],false,(aTables[i] == sSelectedTable) ? true : false);
}
if(sSelectedTable == ''){
oTableSelect.selectedIndex = 0;
sSelectedTable = aTables[0];
}
}else{
oTableSelect.disabled = true;
oTableSelect.options.length = 0;
oTableSelect.options[0] = new Option('no tables available','no tables available',false,false);
}
MakeTableChanged(sSelectedTable);
}
}
function MakeTableChanged(sTableNewName){
switch(sTableNewName){
case 'table1' :
sTableName = sTable1Name;
sTableDescription = sTable1Description;
aTableStructureDescription = aTable1StructureDescription;
sTableQueryFieldsValue = sTable1QueryFieldsValue;
sTableQueryWhereValue = sTable1QueryWhereValue;
sTableQueryOrderByValue = sTable1QueryOrderByValue;
sTableQueryLimitValue = sTable1QueryLimitValue;
document.getElementById('table_descr').innerHTML = ' - ' + sTableDescription;
ShowTableStructurePlace(true);
ShowTableIndexPlace(true);
ShowQueryPlace(true);
break;
case 'table2':
sTableName = sTable2Name;
sTableDescription = sTable2Description;
aTableStructureDescription = aTable2StructureDescription;
sTableQueryFieldsValue = sTable2QueryFieldsValue;
sTableQueryWhereValue = sTable2QueryWhereValue;
sTableQueryOrderByValue = sTable2QueryOrderByValue;
sTableQueryLimitValue = sTable2QueryLimitValue;
document.getElementById('table_descr').innerHTML = ' - ' + sTableDescription;
ShowTableStructurePlace(true);
ShowTableIndexPlace(true);
ShowQueryPlace(true);
break;
case 'table3':
sTableName = sTable3Name;
sTableDescription = sTable3Description;
aTableStructureDescription = aTable3StructureDescription;
sTableQueryFieldsValue = sTable3QueryFieldsValue;
sTableQueryWhereValue = sTable3QueryWhereValue;
sTableQueryOrderByValue = sTable3QueryOrderByValue;
sTableQueryLimitValue = sTable3QueryLimitValue;
document.getElementById('table_descr').innerHTML = ' - ' + sTableDescription;
ShowTableStructurePlace(true);
ShowTableIndexPlace(true);
ShowQueryPlace(true);
break;
default :
sTableName = '';
sTableDescription = '';
aTableStructureDescription = [];
sTableQueryFieldsValue = '';
sTableQueryWhereValue = '';
sTableQueryOrderByValue = '';
sTableQueryLimitValue = '';
document.getElementById('table_descr').innerHTML = '';
ShowTableStructurePlace(false);
ShowTableIndexPlace(false);
ShowQueryPlace(false);
}
}
function ShowTableStructurePlace(bFlag){
var sStructureBody = '';
if(bFlag){
var aStructure = DB1.ShowFields(sTableName);
if(Object.prototype.toString.call(aStructure) === '[object Array]'){
sStructureBody = '<TABLE width="100%" class="r">';
sStructureBody += '<TR><TH width="10%" class="r">Field</TH><TH width="10%" class="r">Type</TH><TH class="r">Description</TH></TR>';
for(var i=0; i<aStructure.length; i++){
sStructureBody += '<TR><TD class="r">' + aStructure[i][0] + '</TD><TD class="r">' + aStructure[i][1] + '</TD><TD class="r">' + aTableStructureDescription[i] + '</TD></TR>';
}
sStructureBody += '</TABLE>';
}
}
document.getElementById('structure_table_place').innerHTML = sStructureBody;
}
function ShowTableIndexPlace(bFlag){
if(bFlag){
document.getElementById('index_add').disabled = false;
document.getElementById('button_index_add').disabled = false;
var aIndexIDs = DB1.ShowIndexes(sTableName);
if(aIndexIDs){
document.getElementById('indexes_number').innerHTML = 'Indexes ' + aIndexIDs.length;
var sIndexesBody = '<TABLE width="100%">';
// var sIndexesBody = '<TABLE width="100%" class="r">';
for(var i = 0; i < aIndexIDs.length; i++){
sIndexesBody += '<TR><TD><INPUT id="index_del_' + i + '" type="text" size="70" readonly value="' + aIndexIDs[i] + '"></TD><TD><INPUT type="button" value="Del" onclick="ButtonDelClick(' + i +");\"></TD></TR>\n";
// sIndexesBody += '<TR><TD width="80%" class="r" id="index_del_' + i + '">'+ aIndexIDs[i] + '</TD><TD width="20%" class="r"><INPUT type="button" value="Del" onclick="ButtonDelClick(' + i +");\"></TD></TR>\n";
}
sIndexesBody += '</TABLE>';
document.getElementById('indexes_table_place').innerHTML = sIndexesBody;
document.getElementById('index_add').value = '';
}else{
alert(DB1.ResultText());
}
}else{
document.getElementById('indexes_number').innerHTML = 'Indexes';
document.getElementById('indexes_table_place').innerHTML = '';
document.getElementById('index_add').disabled = true;
document.getElementById('button_index_add').disabled = true;
}
}
function ShowQueryPlace(bFlag){
document.getElementById('query_group_by').value = '';
if(bFlag){
document.getElementById('query_fields').value = sTableQueryFieldsValue;
document.getElementById('query_where').value = sTableQueryWhereValue;
document.getElementById('query_order_by').value = sTableQueryOrderByValue;
document.getElementById('query_limit').value = sTableQueryLimitValue;
MakeTableActionActive(0);
}else{
document.getElementById('query_fields').value = '';
document.getElementById('query_where').value = '';
document.getElementById('query_order_by').value = '';
document.getElementById('query_limit').value = '';
MakeTableActionActive(-1);
}
}
function MakeTableActionActive(nActionIndex){
if(nActionIndex >= 0 && nActionIndex <= 4){
document.getElementById('button_go').disabled = false;
document.getElementById('action_select').disabled = false;
document.getElementById('action_select').selectedIndex = nActionIndex;
switch(nActionIndex){
case 0 : //Select
document.getElementById('query_fields').disabled = false;
document.getElementById('query_values').disabled = true;
document.getElementById('query_where').disabled = false;
document.getElementById('query_order_by').disabled = false;
document.getElementById('query_order_by_desc').disabled = false;
document.getElementById('query_group_by').disabled = false;
document.getElementById('query_limit').disabled = true;
break;
case 1 : //SelectToRecordSet
document.getElementById('query_fields').disabled = false;
document.getElementById('query_values').disabled = true;
document.getElementById('query_where').disabled = false;
document.getElementById('query_order_by').disabled = false;
document.getElementById('query_order_by_desc').disabled = false;
document.getElementById('query_group_by').disabled = false;
document.getElementById('query_limit').disabled = false;
break;
case 2 : //Update
document.getElementById('query_fields').disabled = false;
document.getElementById('query_values').disabled = false
document.getElementById('query_where').disabled = false;
document.getElementById('query_order_by').disabled = true;
document.getElementById('query_order_by_desc').disabled = true;
document.getElementById('query_group_by').disabled = true;
document.getElementById('query_limit').disabled = true;
break;
case 3 : //Insert
document.getElementById('query_fields').disabled = false;
document.getElementById('query_values').disabled = false;
document.getElementById('query_where').disabled = true;
document.getElementById('query_order_by').disabled = true;
document.getElementById('query_order_by_desc').disabled = true;
document.getElementById('query_group_by').disabled = true;
document.getElementById('query_limit').disabled = true;
break;
case 4 : //Delete
document.getElementById('query_fields').disabled = true;
document.getElementById('query_values').disabled = true;
document.getElementById('query_where').disabled = false;
document.getElementById('query_order_by').disabled = true;
document.getElementById('query_order_by_desc').disabled = true;
document.getElementById('query_group_by').disabled = true;
document.getElementById('query_limit').disabled = true;
break;
}
}else{
document.getElementById('button_go').disabled = true;
document.getElementById('action_select').disabled = true;
document.getElementById('query_fields').disabled = true;
document.getElementById('query_values').disabled = true;
document.getElementById('query_where').disabled = true;
document.getElementById('query_order_by').disabled = true;
document.getElementById('query_order_by_desc').disabled = true;
document.getElementById('query_group_by').disabled = true;
document.getElementById('query_limit').disabled = true;
}
}
function ButtonGoClick(){
var aTableCols = DB1.ShowFields(sTableName);
var nActionIndex = document.getElementById('action_select').selectedIndex;
var vSelectResult, vUpdateResult, bInsertResult, vDeleteResult;
var sFieldNames = document.getElementById('query_fields').value.replace(/^\s+/,'').replace(/\s+$/,'').replace(/\s+/g,' ');
var sFieldValues = document.getElementById('query_values').value.replace(/^\s+/,'').replace(/\s+$/,'').replace(/\s+/g,' ');
var sWhere = document.getElementById('query_where').value.replace(/^\s+/,'').replace(/\s+$/,'');
var sOrderBy = document.getElementById('query_order_by').value.replace(/^\s+/,'').replace(/\s+$/,'');
var sGroupBy = document.getElementById('query_group_by').value.replace(/^\s+/,'').replace(/\s+$/,'');
var nLimit = parseInt(document.getElementById('query_limit').value.replace(/^\s+/,'').replace(/\s+$/,''));
if(isNaN(nLimit) || nLimit < 0) nLimit = 0;
document.getElementById('query_fields').value = sFieldNames;
document.getElementById('query_values').value = sFieldValues;
document.getElementById('query_where').value = sWhere;
document.getElementById('query_order_by').value = sOrderBy;
document.getElementById('query_group_by').value = sGroupBy;
document.getElementById('query_limit').value = nLimit;
var aFieldNames = sFieldNames.length > 0 ? sFieldNames.split(/\s+/) : null;
var aFieldValues = sFieldValues.length > 0 ? sFieldValues.split(/\s+/) : null;
var nNumber;
if(aFieldValues){
if(aFieldNames){
for(var i=0; i<aFieldValues.length; i++){
for(var j=0; j<aTableCols.length; j++){
if(aTableCols[j][0] == aFieldNames[i] && aTableCols[j][1] == 'number'){
nNumber = Number(aFieldValues[i]);
if(!isNaN(nNumber)) aFieldValues[i] = nNumber;
}
}
}
}else{
aFieldValues.length = aTableCols.length;
for(var i=0; i<aFieldValues.length; i++){
if(aTableCols[i][1] == 'number'){
nNumber = Number(aFieldValues[i]);
if(!isNaN(nNumber)) aFieldValues[i] = nNumber;
}
}
}
}
var t0 = new Date();
var sResultTime = '', sResultOper = '', sResultHeader = '', sResultBody = '', sResultAlert = '';
window.DB1_RecordSet1 = [];
switch(nActionIndex){
case 0 : //Select
vSelectResult = DB1.Select(sTableName,
aFieldNames,
sWhere,
sOrderBy,
document.getElementById('query_order_by_desc').checked,
sGroupBy
);
break;
case 1 : //SelectToRecordSet
vSelectResult = DB1.SelectToRecordSet(sTableName,
sWhere,
sOrderBy,
document.getElementById('query_order_by_desc').checked,
sGroupBy
);
break;
case 2 : //Update
vUpdateResult = DB1.Update(sTableName,aFieldValues,aFieldNames,sWhere);
break;
case 3 : //Insert
bInsertResult = DB1.InsertOne(sTableName,aFieldValues,aFieldNames);
break;
case 4 : //Delete
vDeleteResult = DB1.Delete(sTableName,sWhere);
break;
}
var t1 = new Date();
sResultTime = (t1.getTime()-t0.getTime())/1000 + ' sec.';
switch(nActionIndex){
case 0 : //Select
if(Object.prototype.toString.call(vSelectResult) === '[object Array]'){
sResultOper = 'Selected ' + vSelectResult.length + ' record(s)';
sResultHeader = '<tr>';
if(aFieldNames){
for(var i = 0; i < aFieldNames.length; i++){
sResultHeader += '<th class="r">' + aFieldNames[i] + '</th>';
}
}else{
for(var i = 0; i < aTableCols.length; i++){
sResultHeader += '<th class="r">' + aTableCols[i][0] + '</th>';
}
}
sResultHeader += "</tr>\n";
sResultBody = DB1.Rows2String(vSelectResult,'<tr>',"</tr>\n",'<td class="r">','</td>',' ');
}else{
sResultAlert = DB1.ResultText();
}
break;
case 1 : //SelectToRecordSet
if(Object.prototype.toString.call(vSelectResult) === '[object Array]'){
window.DB1_RecordSet1 = vSelectResult;
sResultOper = 'Selected ' + vSelectResult.length + ' record(s)';
sResultHeader = '<tr><th class="r">Records</th></tr>';
sResultBody = "<tr><td class=\"r\">\n";
var nPages = 1;
if(isNaN(nLimit) || nLimit <= 0 || nLimit > vSelectResult.length){
nLimit = vSelectResult.length;
}else{
nPages = Math.floor((vSelectResult.length - 1) / nLimit) + 1;
}
var nRecStart, nRecEnd;
for(var i = 0; i < nPages; i++){
nRecStart = i * nLimit;
nRecEnd = (i + 1) * nLimit - 1;
if(nRecEnd > vSelectResult.length - 1){
nRecEnd = vSelectResult.length - 1;
}
sResultBody += ' <span id="span_pager_' + i + '" class="pager_link" onclick="ShowPagerInfo(' + nRecStart + ',' + nLimit + '); this.className=' + "'pager_link_a'" + '; return false;">' + nRecStart + '-' + nRecEnd + "</span> \n";
}
sResultBody += "</td></tr>\n";
}else{
sResultAlert = DB1.ResultText();
}
break;
case 2 : //Update
if(typeof vUpdateResult == 'number'){
sResultOper = 'Updated ' + vUpdateResult + ' record(s)';
}else{
sResultAlert = DB1.ResultText();
}
break;
case 3 : //Insert
if(bInsertResult){
sResultOper = 'Inserted 1 record';
}else{
sResultAlert = DB1.ResultText();
}
break;
case 4 : //Delete
if(typeof vDeleteResult == 'number'){
sResultOper = 'Deleted ' + vDeleteResult + ' record(s)';
}else{
sResultAlert = DB1.ResultText();
}
break;
}
ShowResultInfo(sResultTime,sResultOper,sResultHeader,sResultBody,sResultAlert);
}
function ButtonAddClick(){
var bRes = DB1.CreateIndex(sTableName,document.getElementById('index_add').value);
if(!bRes){
alert(DB1.ResultText());
return;
}
ShowTableIndexPlace(true);
}
function ButtonDelClick(nIndexNumber){
var bRes = DB1.DropIndex(sTableName,document.getElementById('index_del_' + nIndexNumber).value);
// var bRes = DB1.DropIndex(sTableName,document.getElementById('index_del_' + nIndexNumber).innerHTML);
if(!bRes){
alert(DB1.ResultText());
return;
}
ShowTableIndexPlace(true);
}
function ShowResultInfo(sTime,sNum,sHeader,sBody,sAlert){
document.getElementById('result_time').innerHTML = sTime;
document.getElementById('result_text').innerHTML = sNum;
if(sBody != ''){
document.getElementById('result_info_place').innerHTML = '<table class="r">' + sHeader + sBody + '</table>';
}else{
document.getElementById('result_info_place').innerHTML = '';
}
document.getElementById('pager_info_place').innerHTML = '';
if(sAlert.length > 0){
alert(sAlert);
}
}
function ShowPagerInfo(nOffset,nLimit){
var aTableCols = DB1.ShowFields(sTableName);
var sFieldNames = document.getElementById('query_fields').value.replace(/^\s+/,'').replace(/\s+$/,'');
var aFieldNames = sFieldNames.length > 0 ? sFieldNames.split(/\s+/) : null;
var sPagerHeader = '', sPagerBody = '', sPagerAlert = '';
document.getElementById('query_fields').value = sFieldNames;
for(var i = 0; i < 65535; i++){
var element = document.getElementById('span_pager_' + i);
if(element){
element.className = 'pager_link';
}else{
break;
}
}
var vSelectResult = DB1.SelectFromRecordSet(sTableName,window.DB1_RecordSet1,aFieldNames,nOffset,nLimit);
if(Object.prototype.toString.call(vSelectResult) === '[object Array]'){
sPagerHeader = '<tr>';
if(aFieldNames){
for(var i = 0; i < aFieldNames.length; i++){
sPagerHeader += '<th class="r">' + aFieldNames[i] + '</th>';
}
}else{
for(var i = 0; i < aTableCols.length; i++){
sPagerHeader += '<th class="r">' + aTableCols[i][0] + '</th>';
}
}
sPagerHeader += "</tr>\n";
sPagerBody = DB1.Rows2String(vSelectResult,'<tr>',"</tr>\n",'<td class="r">','</td>',' ');
}else{
sPagerAlert = DB1.ResultText();
}
if(sPagerBody != ''){
document.getElementById('pager_info_place').innerHTML = '<table class="r">' + sPagerHeader + sPagerBody + '</table>';
}else{
document.getElementById('pager_info_place').innerHTML = '';
}
if(sPagerAlert.length > 0){
alert(sPagerAlert);
}
}
|