280
280
} // end of the 'checkSqlQuery()' function
282
// Global variable row_class is set to even
283
var row_class = 'even';
286
* Generates a row dynamically in the differences table displaying
287
* the complete statistics of difference in table like number of
288
* rows to be updated, number of rows to be inserted, number of
289
* columns to be added, number of columns to be removed, etc.
291
* @param index index of matching table
292
* @param update_size number of rows/column to be updated
293
* @param insert_size number of rows/coulmns to be inserted
294
* @param remove_size number of columns to be removed
295
* @param insert_index number of indexes to be inserted
296
* @param remove_index number of indexes to be removed
297
* @param img_obj image object
298
* @param table_name name of the table
301
function showDetails(i, update_size, insert_size, remove_size, insert_index, remove_index, img_obj, table_name)
303
// The path of the image is split to facilitate comparison
304
var relative_path = (img_obj.src).split("themes/");
306
// The image source is changed when the showDetails function is called.
307
if (relative_path[1] == 'original/img/new_data_hovered.jpg') {
308
img_obj.src = "./themes/original/img/new_data_selected_hovered.jpg";
309
img_obj.alt = PMA_messages['strClickToUnselect']; //only for IE browser
310
} else if (relative_path[1] == 'original/img/new_struct_hovered.jpg') {
311
img_obj.src = "./themes/original/img/new_struct_selected_hovered.jpg";
312
img_obj.alt = PMA_messages['strClickToUnselect'];
313
} else if (relative_path[1] == 'original/img/new_struct_selected_hovered.jpg') {
314
img_obj.src = "./themes/original/img/new_struct_hovered.jpg";
315
img_obj.alt = PMA_messages['strClickToSelect'];
316
} else if (relative_path[1] == 'original/img/new_data_selected_hovered.jpg') {
317
img_obj.src = "./themes/original/img/new_data_hovered.jpg";
318
img_obj.alt = PMA_messages['strClickToSelect'];
321
var div = document.getElementById("list");
322
var table = div.getElementsByTagName("table")[0];
323
var table_body = table.getElementsByTagName("tbody")[0];
325
//Global variable row_class is being used
326
if (row_class == 'even') {
331
// If the red or green button against a table name is pressed then append a new row to show the details of differences of this table.
332
if ((relative_path[1] != 'original/img/new_struct_selected_hovered.jpg') && (relative_path[1] != 'original/img/new_data_selected_hovered.jpg')) {
334
var newRow = document.createElement("tr");
335
newRow.setAttribute("class", row_class);
336
newRow.className = row_class;
337
// Id assigned to this row element is same as the index of this table name in the matching_tables/source_tables_uncommon array
338
newRow.setAttribute("id" , i);
340
var table_name_cell = document.createElement("td");
341
table_name_cell.align = "center";
342
table_name_cell.innerHTML = table_name ;
344
newRow.appendChild(table_name_cell);
346
var create_table = document.createElement("td");
347
create_table.align = "center";
349
var add_cols = document.createElement("td");
350
add_cols.align = "center";
352
var remove_cols = document.createElement("td");
353
remove_cols.align = "center";
355
var alter_cols = document.createElement("td");
356
alter_cols.align = "center";
358
var add_index = document.createElement("td");
359
add_index.align = "center";
361
var delete_index = document.createElement("td");
362
delete_index.align = "center";
364
var update_rows = document.createElement("td");
365
update_rows.align = "center";
367
var insert_rows = document.createElement("td");
368
insert_rows.align = "center";
370
var tick_image = document.createElement("img");
371
tick_image.src = "./themes/original/img/s_success.png";
373
if (update_size == '' && insert_size == '' && remove_size == '') {
375
This is the case when the table needs to be created in target database.
377
create_table.appendChild(tick_image);
378
add_cols.innerHTML = "--";
379
remove_cols.innerHTML = "--";
380
alter_cols.innerHTML = "--";
381
delete_index.innerHTML = "--";
382
add_index.innerHTML = "--";
383
update_rows.innerHTML = "--";
384
insert_rows.innerHTML = "--";
386
newRow.appendChild(create_table);
387
newRow.appendChild(add_cols);
388
newRow.appendChild(remove_cols);
389
newRow.appendChild(alter_cols);
390
newRow.appendChild(delete_index);
391
newRow.appendChild(add_index);
392
newRow.appendChild(update_rows);
393
newRow.appendChild(insert_rows);
395
} else if (update_size == '' && remove_size == '') {
397
This is the case when data difference is displayed in the
398
table which is present in source but absent from target database
400
create_table.innerHTML = "--";
401
add_cols.innerHTML = "--";
402
remove_cols.innerHTML = "--";
403
alter_cols.innerHTML = "--";
404
add_index.innerHTML = "--";
405
delete_index.innerHTML = "--";
406
update_rows.innerHTML = "--";
407
insert_rows.innerHTML = insert_size;
409
newRow.appendChild(create_table);
410
newRow.appendChild(add_cols);
411
newRow.appendChild(remove_cols);
412
newRow.appendChild(alter_cols);
413
newRow.appendChild(delete_index);
414
newRow.appendChild(add_index);
415
newRow.appendChild(update_rows);
416
newRow.appendChild(insert_rows);
418
} else if (remove_size == '') {
420
This is the case when data difference between matching_tables is displayed.
422
create_table.innerHTML = "--";
423
add_cols.innerHTML = "--";
424
remove_cols.innerHTML = "--";
425
alter_cols.innerHTML = "--";
426
add_index.innerHTML = "--";
427
delete_index.innerHTML = "--";
428
update_rows.innerHTML = update_size;
429
insert_rows.innerHTML = insert_size;
431
newRow.appendChild(create_table);
432
newRow.appendChild(add_cols);
433
newRow.appendChild(remove_cols);
434
newRow.appendChild(alter_cols);
435
newRow.appendChild(delete_index);
436
newRow.appendChild(add_index);
437
newRow.appendChild(update_rows);
438
newRow.appendChild(insert_rows);
442
This is the case when structure difference between matching_tables id displayed
444
create_table.innerHTML = "--";
445
add_cols.innerHTML = insert_size;
446
remove_cols.innerHTML = remove_size;
447
alter_cols.innerHTML = update_size;
448
delete_index.innerHTML = remove_index;
449
add_index.innerHTML = insert_index;
450
update_rows.innerHTML = "--";
451
insert_rows.innerHTML = "--";
453
newRow.appendChild(create_table);
454
newRow.appendChild(add_cols);
455
newRow.appendChild(remove_cols);
456
newRow.appendChild(alter_cols);
457
newRow.appendChild(delete_index);
458
newRow.appendChild(add_index);
459
newRow.appendChild(update_rows);
460
newRow.appendChild(insert_rows);
462
table_body.appendChild(newRow);
464
} else if ((relative_path[1] != 'original/img/new_struct_hovered.jpg') && (relative_path[1] != 'original/img/new_data_hovered.jpg')) {
465
//The case when the row showing the details need to be removed from the table i.e. the difference button is deselected now.
466
var table_rows = table_body.getElementsByTagName("tr");
469
for (j=0; j < table_rows.length; j++)
471
if (table_rows[j].id == i) {
473
table_rows[j].parentNode.removeChild(table_rows[j]);
476
//The table row css is being adjusted. Class "odd" for odd rows and "even" for even rows should be maintained.
477
for(index; index < table_rows.length; index++)
479
row_class_element = table_rows[index].getAttribute('class');
480
if (row_class_element == "even") {
481
table_rows[index].setAttribute("class","odd"); // for Mozilla firefox
482
table_rows[index].className = "odd"; // for IE browser
484
table_rows[index].setAttribute("class","even"); // for Mozilla firefox
485
table_rows[index].className = "even"; // for IE browser
492
* Changes the image on hover effects
494
* @param img_obj the image object whose source needs to be changed
498
function change_Image(img_obj)
500
var relative_path = (img_obj.src).split("themes/");
502
if (relative_path[1] == 'original/img/new_data.jpg') {
503
img_obj.src = "./themes/original/img/new_data_hovered.jpg";
504
} else if (relative_path[1] == 'original/img/new_struct.jpg') {
505
img_obj.src = "./themes/original/img/new_struct_hovered.jpg";
506
} else if (relative_path[1] == 'original/img/new_struct_hovered.jpg') {
507
img_obj.src = "./themes/original/img/new_struct.jpg";
508
} else if (relative_path[1] == 'original/img/new_data_hovered.jpg') {
509
img_obj.src = "./themes/original/img/new_data.jpg";
510
} else if (relative_path[1] == 'original/img/new_data_selected.jpg') {
511
img_obj.src = "./themes/original/img/new_data_selected_hovered.jpg";
512
} else if(relative_path[1] == 'original/img/new_struct_selected.jpg') {
513
img_obj.src = "./themes/original/img/new_struct_selected_hovered.jpg";
514
} else if (relative_path[1] == 'original/img/new_struct_selected_hovered.jpg') {
515
img_obj.src = "./themes/original/img/new_struct_selected.jpg";
516
} else if (relative_path[1] == 'original/img/new_data_selected_hovered.jpg') {
517
img_obj.src = "./themes/original/img/new_data_selected.jpg";
522
* Generates the URL containing the list of selected table ids for synchronization and
523
* a variable checked for confirmation of deleting previous rows from target tables
525
* @param token the token generated for each PMA form
529
function ApplySelectedChanges(token)
531
var div = document.getElementById("list");
532
var table = div.getElementsByTagName('table')[0];
533
var table_body = table.getElementsByTagName('tbody')[0];
534
// Get all the rows from the details table
535
var table_rows = table_body.getElementsByTagName('tr');
536
var x = table_rows.length;
539
Append the token at the beginning of the query string followed by
540
Table_ids that shows that "Apply Selected Changes" button is pressed
542
var append_string = "?token="+token+"&Table_ids="+1;
544
append_string += "&";
545
append_string += i+"="+table_rows[i].id;
548
// Getting the value of checkbox delete_rows
549
var checkbox = document.getElementById("delete_rows");
550
if (checkbox.checked){
551
append_string += "&checked=true";
553
append_string += "&checked=false";
555
//Appending the token and list of table ids in the URL
556
location.href += token;
557
location.href += append_string;
561
* Displays error message if any text field
562
* is left empty other than port field.
564
* @param string the form name
565
* @param object the form
567
* @return boolean whether the form field is empty or not
569
function validateConnection(form_name, form_obj)
572
var src_hostfilled = true;
573
var trg_hostfilled = true;
575
for (var i=1; i<form_name.elements.length; i++)
577
// All the text fields are checked excluding the port field because the default port can be used.
578
if ((form_name.elements[i].type == 'text') && (form_name.elements[i].name != 'src_port') && (form_name.elements[i].name != 'trg_port')) {
580
check = emptyFormElements(form_obj, form_name.elements[i].name);
583
element = form_name.elements[i].name;
584
if (form_name.elements[i].name == 'src_host') {
585
src_hostfilled = false;
588
if (form_name.elements[i].name == 'trg_host') {
589
trg_hostfilled = false;
592
if ((form_name.elements[i].name == 'src_socket' && src_hostfilled==false) || (form_name.elements[i].name == 'trg_socket' && trg_hostfilled==false))
603
alert(PMA_messages['strFormEmpty']);
284
610
* Check if a form's element is empty