From: jorge Date: June 11 2002 6:10am Subject: bk commit - MyCC List-Archive: http://lists.mysql.com/gui-tools/185 Message-Id: <200206110610.g5B6ACa07180@linux.jorge.mysql.com> Below is the list of changes that have just been commited into a local MyCC repository of 'jorge'. When 'jorge' does a push, they will be propogaged to the main repository and within 24 hours after the push into the public repository. ChangeSet@stripped, 2002-06-11 01:10:09-05:00, jorge@stripped emptyPkIcon.xpm: new file Config.h: Incremented version CTableWindow.cpp: Fixed a couple of bugs Added a couple of enhancements Fixed a critical bug which always set the table type to MyISAM when editing a table. Fixed some SHOW CREATE TABLE parsing bugs dist/Changelog.txt 1.35 02/06/11 01:09:56 jorge@stripped +20 -3 include/CTableWindow.h 1.11 02/06/11 01:09:50 jorge@stripped +6 -4 src/CCreditsBox.cpp 1.9 02/06/11 01:09:44 jorge@stripped +2 -2 src/Globals.cpp 1.20 02/06/11 01:09:42 jorge@stripped +1 -1 src/CTableWindow.cpp 1.13 02/06/11 01:09:39 jorge@stripped +124 -63 xpm/emptyPkIcon.xpm 1.1 02/06/10 20:47:43 jorge@stripped +18 -0 xpm/emptyPkIcon.xpm 1.0 02/06/10 20:47:43 jorge@stripped +0 -0 BitKeeper file /my/mycc/xpm/emptyPkIcon.xpm include/Icons.h 1.13 02/06/10 20:47:01 jorge@stripped +1 -0 include/Config.h 1.14 02/06/10 20:46:51 jorge@stripped +1 -1 Incremented version include/CTableWindow.h 1.10 02/06/10 20:46:49 jorge@stripped +13 -1 src/Globals.cpp 1.19 02/06/10 20:46:31 jorge@stripped +1 -0 src/CTableWindow.cpp 1.12 02/06/10 20:45:21 jorge@stripped +174 -47 Fixed a couple of bugs Added a couple of enhancements Fixed a critical bug which always set the table type to MyISAM when editing a table. Fixed some SHOW CREATE TABLE parsing bugs src/CShowTableProperties.cpp 1.11 02/06/10 20:45:19 jorge@stripped +1 -1 # This is a BitKeeper patch. What follows are the unified diffs for the # set of deltas contained in the patch. The rest of the patch, the part # that BitKeeper cares about, is below these diffs. # User: jorge # Host: linux.jorge.mysql.com # Root: /my/mycc --- 1.9/include/CTableWindow.h Sun Jun 9 19:45:22 2002 +++ 1.11/include/CTableWindow.h Tue Jun 11 01:09:50 2002 @@ -210,9 +210,14 @@ public slots: void refresh(); - void Add(const QString &keyname, IndexType t, QStringList fields); + void singleRemove(const QString &keyname, const QString &field); + void singleAdd(const QString &keyname, const QString &field); + void Add(const QString &keyname, IndexType t, QStringList fields); void ChangeType(bool b, IndexType t); void clear(); + +signals: + void primaryKey(bool, int); private slots: void RemoveField(); @@ -302,8 +307,8 @@ public slots: void setEnabled(bool b) { - if (!b) - setText(QString::null); + /* if (!b) + setText(QString::null);*/ QLineEdit::setEnabled(b); } }; @@ -319,8 +324,8 @@ public slots: void setEnabled(bool b) { - if (!b) - setChecked(false); + /*if (!b) + setChecked(false);*/ QWidget::setEnabled(b); } }; @@ -357,6 +362,9 @@ QStringList *DeletedFields; //Stores deleted fields when isAlterTable == true bool checkDuplicateNames(const QString &txt, int row, int col); +public slots: + void addPrimaryIcon(bool add, int row); + protected: virtual void setWindowCaption(); @@ -380,9 +388,14 @@ bool createTable(const QString &tblName); bool alterTable(); bool exec(const QString &qry); + void setPk(); + void setPrimaryKey(int row, bool b); private: void swapSections(int oldIdx, int newIdx); + QIconSet pkIconSet; + QPixmap pkIcon; + QPixmap emptyPkIcon; QString getFieldSpecs(p_FieldInfo *field, QStringList &dups, bool &ok); QGridLayout* CTableWindowLayout; QTable* Fields; @@ -406,6 +419,7 @@ QAction* showMessagesAction; QAction* editCopyAction; QAction* editPasteAction; + QAction* tablePrimaryKeyAction; CMySQLConnection *mysql; CDatabaseTreeItem *tableItem; bool isAlterTable; --- 1.11/src/CTableWindow.cpp Sun Jun 9 20:04:06 2002 +++ 1.13/src/CTableWindow.cpp Tue Jun 11 01:09:39 2002 @@ -549,12 +549,57 @@ { if (fieldsUsed->findItem(*it2, Qt::CaseSensitive) == 0) availableFields->insertItem(*it2); - } + } + + if (indexName->currentText().lower() == "primary") + { + for (int j = 0; j < Fields->numRows(); j++) + { + QString txt = Fields->text(j, 0).stripWhiteSpace(); + if (!txt.isEmpty()) + emit primaryKey((index->indexSort.find(txt) != index->indexSort.end()), j); + else + emit primaryKey(false, j); + } + } + addField->setEnabled(availableFields->count() > 0); removeField->setEnabled(fieldsUsed->count() > 0); deleteIndex->setEnabled(indexName->currentText().lower() != "primary"); } +void CTableIndexes::singleRemove(const QString &keyname, const QString &field) +{ + if (field.isEmpty() || keyname.isEmpty()) + return; + Index *index = Indexes.find(keyname); + index->indexSort.remove(field); + index->indexFields.remove(field); + index->indexFields.resize(index->indexFields.count()); + refresh(); +} + +void CTableIndexes::singleAdd(const QString &keyname, const QString &field) +{ + if (field.isEmpty() || keyname.isEmpty()) + return; + Index *index = Indexes.find(keyname); + index->indexFields.resize(index->indexFields.count() + 1); + for (int j = 0; j < Fields->numRows(); j++) + { + CComboFieldItem *c = (CComboFieldItem *)Fields->item(j, 2); + if (c->Field->FieldName == field) + { + index->indexFields.resize(index->indexFields.count() + 1); + index->indexSort.append(c->Field->FieldName); + index->indexFields.insert(c->Field->FieldName, c->Field); + break; + } + } + refresh(); +} + + void CTableIndexes::RemoveField() { if (fieldsUsed->count() == 0) @@ -565,10 +610,10 @@ if (fieldsUsed->isSelected(i)) { index->indexSort.remove(fieldsUsed->text(i)); - index->indexFields.remove(fieldsUsed->text(i)); - index->indexFields.resize(index->indexFields.count()); + index->indexFields.remove(fieldsUsed->text(i)); } } + index->indexFields.resize(index->indexFields.count()); refresh(); } @@ -628,6 +673,8 @@ indexName->setCurrentText(keyname); if (t != PRIMARY) ChangeType(true, t); + else + refresh(); } void CTableIndexes::AddIndex() @@ -982,31 +1029,35 @@ void CFieldProperties::setFieldType(const QString &t) { skip = true; - QString type = t.lower().stripWhiteSpace(); + QString type = t.lower().stripWhiteSpace(); if (type == "bit" || type == "bool" || (type.find ("int") != -1) || type == "real" || type == "double" || type == "float" || type == "decimal" || type == "numeric") //AUTO_INCREMENT, ZEROFILL, UNSIGNED { Value->setEnabled(false); Binary->setEnabled(false); + + Field->Value = QString::null; + Field->Binary = false; + Length->setEnabled(true); Unsigned->setEnabled(true); ZeroFill->setEnabled(true); AutoIncrement->setEnabled(true); Default->setEnabled(true); - if (type == "bit" || type == "bool" || (type.find("int") != -1)) - Length->setValidator(intValidator); - else - Length->setValidator(floatValidator); } else - { - Length->setValidator(intValidator); if (type.find("char") != -1) //BINARY { Value->setEnabled(false); Unsigned->setEnabled(false); ZeroFill->setEnabled(false); AutoIncrement->setEnabled(false); + + Field->Value = QString::null; + Field->Unsigned = false; + Field->ZeroFill = false; + Field->AutoIncrement = false; + Length->setEnabled(true); Binary->setEnabled(true); Default->setEnabled(true); @@ -1019,46 +1070,76 @@ Binary->setEnabled(false); ZeroFill->setEnabled(false); AutoIncrement->setEnabled(false); + + Field->Length = QString::null; + Field->Unsigned = false; + Field->Binary = false; + Field->ZeroFill = false; + Field->AutoIncrement = false; + Value->setEnabled(true); Default->setEnabled(true); } else if ((type.find("blob") != -1) || (type.find("text") != -1)) - { + { + Value->setEnabled(false); Default->setEnabled(false); - Value->setEnabled(false); - Length->setEnabled(true); //used for indexes Unsigned->setEnabled(false); Binary->setEnabled(false); ZeroFill->setEnabled(false); AutoIncrement->setEnabled(false); + + Field->Unsigned = false; + Field->Binary = false; + Field->ZeroFill = false; + Field->AutoIncrement = false; + Field->Default = QString::null; + Field->Value = QString::null; + + Length->setEnabled(true); //used for indexes } - else //No special options .. should never get here! + else { - Default->setEnabled(false); Value->setEnabled(false); Length->setEnabled(false); Unsigned->setEnabled(false); Binary->setEnabled(false); ZeroFill->setEnabled(false); AutoIncrement->setEnabled(false); + + Field->Unsigned = false; + Field->Binary = false; + Field->ZeroFill = false; + Field->AutoIncrement = false; + Field->Value = QString::null; + Field->Length = QString::null; + + bool b = (type != "timestamp"); + Default->setEnabled(b); + if (!b) + Field->Default = QString::null; } - } skip = false; } void CFieldProperties::setField(p_FieldInfo *field) { - Field = field; - setFieldType(field->Type); + Field = field; + QString type = Field->Type.lower(); + if (type == "real" || type == "double" || type == "float" || type == "decimal" || type == "numeric") + Length->setValidator(intValidator); + else + Length->setValidator(floatValidator); + setFieldType(type); skip = true; - Default->setText(field->Default); - Value->setText(field->Value); - Length->setText(field->Length); - Unsigned->setChecked(field->Unsigned); - Binary->setChecked(field->Binary); - ZeroFill->setChecked(field->ZeroFill); - AutoIncrement->setChecked(field->AutoIncrement); + Default->setText(Field->Default); + Value->setText(Field->Value); + Length->setText(Field->Length); + Unsigned->setChecked(Field->Unsigned); + Binary->setChecked(Field->Binary); + ZeroFill->setChecked(Field->ZeroFill); + AutoIncrement->setChecked(Field->AutoIncrement); skip = false; } @@ -1137,6 +1218,11 @@ hasPaste = false; hasModified = false; tableName = tablename; + + pkIcon = getPixmapIcon("pkIcon"); + emptyPkIcon = getPixmapIcon("emptyPkIcon"); + pkIconSet.setPixmap(pkIcon, QIconSet::Automatic); + FieldTypes = new QStringList(); DeletedFields = new QStringList(); bool initOk = loadSyntaxSection(FieldTypes, 9); @@ -1224,6 +1310,12 @@ tableDeleteAction->setIconSet(QIconSet(getPixmapIcon("deleteRowIcon"))); tableDeleteAction->setAccel(0); + tablePrimaryKeyAction = new QAction(this, "tablePrimaryKeyAction"); + tablePrimaryKeyAction->setText(trUtf8("Add Primary Key")); + tablePrimaryKeyAction->setMenuText(trUtf8("&Add Primary Key")); + tablePrimaryKeyAction->setIconSet(QIconSet(pkIcon)); + tablePrimaryKeyAction->setAccel(0); + editCopyAction = new QAction(this, "editCopyAction"); editCopyAction->setText(trUtf8("Copy")); editCopyAction->setMenuText(trUtf8("&Copy")); @@ -1245,6 +1337,8 @@ editPasteAction->addTo(fileBar); tableBar = new QToolBar(tr("Table"), this, DockTop); + tablePrimaryKeyAction->addTo(tableBar); + tableBar->addSeparator(); tableInsertAction->addTo(tableBar); tableDeleteAction->addTo(tableBar); @@ -1267,6 +1361,8 @@ menubar->insertItem(trUtf8("&Edit"), editMenu); tableMenu = new QPopupMenu(this); + tablePrimaryKeyAction->addTo(tableMenu); + tableMenu->insertSeparator(); tableInsertAction->addTo(tableMenu); tableDeleteAction->addTo(tableMenu); menubar->insertItem(trUtf8("&Table"), tableMenu); @@ -1284,13 +1380,21 @@ delete pasteField; } +void CTableWindow::addPrimaryIcon(bool add, int row) +{ + if (add) + Fields->verticalHeader()->setLabel(row, pkIconSet, QString::null); + else + Fields->verticalHeader()->setLabel(row, QIconSet(), QString::null); +} + bool CTableWindow::checkDuplicateNames(const QString &txt, int row, int col) { bool err = false; - for (int i = 0; i < (int) Fields->numRows(); i++) - if ((Fields->text(i,0) == txt) && (((CComboFieldItem *)Fields->item(i, 2))->Field->getID() != row)) + for (int i = 0; i < (int) Fields->numRows(); i++) + if ((Fields->text(i,0) == txt) && (Fields->item(i, 2)->row() != row)) { - messagePanel()->Critical(tr("You already have a Field Name called") + " '" + txt + "'"); + messagePanel()->Warning(tr("You already have a Field Name called") + " '" + txt + "'"); Fields->editCell(row, col); err = true; break; @@ -1326,17 +1430,27 @@ qDebug("CTableWindow::fieldsValueChanged() - end"); } -void CTableWindow::fieldsClicked(int row, int, int button, const QPoint &) +void CTableWindow::fieldsClicked(int row, int, int, const QPoint &) { - if (button == Qt::LeftButton) - { - qDebug("CTableWindow::fieldsClicked()"); - p_FieldInfo *field = ((CComboFieldItem *)Fields->item(row, 2))->Field; - if (field->Type.isNull()) - field->Type = Fields->text(row, 2); - fieldPropertiesTab->setField(field); - qDebug("CTableWindow::fieldsClicked() - end"); + qDebug("CTableWindow::fieldsClicked()"); + p_FieldInfo *field = ((CComboFieldItem *)Fields->item(row, 2))->Field; + if (field->Type.isNull()) + field->Type = Fields->text(row, 2); + fieldPropertiesTab->setField(field); + + if (!Fields->verticalHeader()->iconSet(row)->isNull()) + { + tablePrimaryKeyAction->setText(trUtf8("Drop Primary Key")); + tablePrimaryKeyAction->setMenuText(trUtf8("Dr&op Primary Key")); + tablePrimaryKeyAction->setIconSet(QIconSet(emptyPkIcon)); } + else + { + tablePrimaryKeyAction->setText(trUtf8("Add Primary Key")); + tablePrimaryKeyAction->setMenuText(trUtf8("Add Primary &Key")); + tablePrimaryKeyAction->setIconSet(QIconSet(pkIcon)); + } + qDebug("CTableWindow::fieldsClicked() - end"); } void CTableWindow::deleteRow() @@ -1445,13 +1559,13 @@ fileSaveAsAction->setEnabled(isAlterTable); indexesTab->setIsAlterTable(isAlterTable); Tab->setTabEnabled(alterTableOptionsTab, isAlterTable); - DeletedFields->clear(); - Fields->setRowMovingEnabled(mysql->getMySQLServerVersion().major > 3 || !isAlterTable); + DeletedFields->clear(); + Fields->setRowMovingEnabled(mysql->getMySQLServerVersion().major > 3 || !isAlterTable); Fields->setNumRows(0); + indexesTab->clear(); if (isAlterTable) { - alterTableOptionsTab->reset(); - indexesTab->clear(); + alterTableOptionsTab->reset(); CMySQLQuery query(mysql); keys.clear(); query.exec_static("SET SQL_QUOTE_SHOW_CREATE = 1"); @@ -1515,44 +1629,71 @@ else if (option == "comment") tablePropertiesTab->comment->setText(value.mid(1, value.length() - 2)); + else + if (option == "type") + for (int x = 0; x < tablePropertiesTab->tableType->count(); x++) + if (tablePropertiesTab->tableType->text(x).lower() == value.lower()) + { + tablePropertiesTab->tableType->setCurrentItem(x); + break; + } } } else //fields or indexes { - QString line = (*it).stripWhiteSpace(); + QString line = (*it).stripWhiteSpace(); + if (line.right(1) == ",") + line = line.left(line.length() - 1); if (line.at(0) == '`') //its a field { - p_FieldInfo *f = new p_FieldInfo(cnt); - line = line.mid(1); + p_FieldInfo *f = new p_FieldInfo(cnt); + line = line.mid(1); int p = line.find('`'); - f->FieldName = line.left(p); + f->FieldName = line.left(p); - line = line.mid(p + 1).stripWhiteSpace(); + line = line.mid(p + 1).stripWhiteSpace(); - p = line.find(' '); + bool hasquote = false; + bool hasparen = false; + for (uint x = 0; x < line.length(); x++) + { + QChar c = line.at(x); + if (c == '\'') + hasquote = !hasquote; + else + if (c == '(' && !hasquote) + hasparen = true; + else + if (c == ')' && !hasquote) + hasparen = false; + if (!hasquote && !hasparen && c == ' ') + { + p = x; + break; + } + } f->Type = line.left(p); - line = line.mid(p + 1).stripWhiteSpace(); - + line = line.mid(p + 1).stripWhiteSpace(); p = f->Type.find('('); - if (p != -1) // type has length or value; - { + { f->Length = f->Type.mid(p + 1); - f->Length = f->Length.left(f->Length.find(')')); + f->Length = f->Length.left(f->Length.findRev(')')); f->Type = f->Type.left(p); if (f->Type.lower() == "enum" || f->Type.lower() == "set") { - f->Value = f->Length; - f->Length = QString::null; + f->Value = f->Length; + f->Length = QString::null; } } p = line.find("'"); if (p != -1) //has default ... auto_increment fields can't have default ! { f->Default = line.mid(p + 1); - line = line.left(p); + line = line.left(p); f->Default = f->Default.left(f->Default.findRev('\'')); + f->Default = f->Default.replace(QRegExp("''"), "'"); } line = line.lower(); f->Unsigned = (line.find("unsigned") != -1); @@ -1586,11 +1727,12 @@ Fields->horizontalHeader()->setLabel(2, tr("Data Type")); for (int i = 0; i < Fields->numRows(); ++i) - { + { + Fields->verticalHeader()->setLabel(i, QString::null); CComboFieldItem * combo = 0; QCheckTableItem *check = new QCheckTableItem(Fields, QString::null); if (isAlterTable) - { + { combo = new CComboFieldItem(Fields, fieldsDict->find(i), i, *FieldTypes, false); combo->setCurrentItem(combo->Field->Type); check->setChecked(combo->Field->Null); @@ -1608,7 +1750,6 @@ } if (isAlterTable) { - indexesTab->refresh(); alterTableOptionsTab->refresh(); for (QStringList::Iterator idx = keys.begin(); idx != keys.end(); ++idx) { @@ -1671,13 +1812,13 @@ } indexesTab->Add(name, type, flds); } - indexesTab->indexName->setCurrentItem(0); - indexesTab->refresh(); + indexesTab->indexName->setCurrentItem(0); delete fieldsDict; - } + } + indexesTab->refresh(); Fields->setCurrentCell(0, 0); + Fields->adjustRow(0); fieldsClicked(0, 0, Qt::LeftButton, QPoint(0,0)); - Fields->adjustRow(0); qDebug("CTableWindow::reset() - end"); } @@ -1704,17 +1845,43 @@ } } +void CTableWindow::setPk() +{ + bool isPrimaryKey = !Fields->verticalHeader()->iconSet(Fields->currentRow())->isNull(); + setPrimaryKey(Fields->currentRow(), isPrimaryKey); +} + +void CTableWindow::setPrimaryKey(int row, bool b) +{ + QString txt = Fields->text(row, 0); + if (!txt.isEmpty()) + { + if (!b) + indexesTab->singleAdd("PRIMARY", txt); + else + indexesTab->singleRemove("PRIMARY", txt); + } + fieldsClicked(0, 0, Qt::LeftButton, QPoint(0,0)); +} + void CTableWindow::showContextMenu(int, int, const QPoint &pos) { QPopupMenu *menu = new QPopupMenu(); Q_CHECK_PTR(menu); - menu->insertItem(getPixmapIcon("insertRowIcon"), tr("Insert Row"), 0); - menu->insertItem(getPixmapIcon("deleteRowIcon"), tr("Delete Row"), 1); + int row = Fields->currentRow(); + bool isPrimaryKey = !Fields->verticalHeader()->iconSet(row)->isNull(); + if (isPrimaryKey) + menu->insertItem(emptyPkIcon, tr("Drop Primary Key"), 0); + else + menu->insertItem(pkIcon, tr("Add Primary Key"), 0); + menu->insertSeparator(); + menu->insertItem(getPixmapIcon("insertRowIcon"), tr("Insert Row"), 1); + menu->insertItem(getPixmapIcon("deleteRowIcon"), tr("Delete Row"), 2); menu->insertSeparator(); - menu->insertItem(getPixmapIcon("copyIcon"), tr("Copy"), 2); - menu->insertItem(getPixmapIcon("pasteIcon"), tr("Paste"), 3); + menu->insertItem(getPixmapIcon("copyIcon"), tr("Copy"), 3); + menu->insertItem(getPixmapIcon("pasteIcon"), tr("Paste"), 4); menu->insertSeparator(); - menu->insertItem(getPixmapIcon("refreshTablesIcon"), tr("Reload"), 4); + menu->insertItem(getPixmapIcon("refreshTablesIcon"), tr("Reload"), 5); menu->setItemEnabled(3, hasPaste); menu->setItemEnabled(4, isAlterTable); @@ -1723,15 +1890,17 @@ delete menu; switch (res) { - case 0: insertRow(); + case 0: setPrimaryKey(row, isPrimaryKey); + break; + case 1: insertRow(); break; - case 1: deleteRow(); + case 2: deleteRow(); break; - case 2: copy(); + case 3: copy(); break; - case 3: paste(); + case 4: paste(); break; - case 4: reset(); + case 5: reset(); break; } } @@ -1775,7 +1944,7 @@ } else dups.append(field->FieldName); - QString type = field->Type.lower(); + QString type = field->Type.lower(); sql += mysql->Quote(field->FieldName) + " "; sql += field->Type; if (field->Type.find("char") != -1 && field->Length.isEmpty()) //char & varchar Need to have Length defined @@ -1796,21 +1965,21 @@ if (type == "enum" || type == "set") { if (!field->Value.isEmpty()) - { - field->Value = field->Value.stripWhiteSpace().simplifyWhiteSpace(); - QStringList valueList(QStringList::split(",", field->Value.stripWhiteSpace().simplifyWhiteSpace())); + { + QStringList valueList(QStringList::split(",", field->Value, true)); field->Value = QString::null; for (QStringList::Iterator it = valueList.begin(); it != valueList.end(); ++it) { QString value = (*it).stripWhiteSpace(); if (!value.isEmpty()) { - if (value.at(0) != '\'') - value = "'" + value; - if (value.at(value.length() - 1) != '\'') - value += "'"; + QChar c = value.at(0); + if ((c != '\'' && c != '\"') || ((c == '\'' || c == '\"') && value.at(value.length() - 1) != c)) + value = "'" + mysql->escape(value).local8Bit() + "'"; field->Value += value + ","; } + else + field->Value += "'',"; } field->Value = field->Value.left(field->Value.length() - 1); sql += "(" + field->Value + ")"; @@ -1838,9 +2007,25 @@ if (!field->Null) sql += "NOT NULL "; - if (!field->Default.isEmpty()) - sql += "DEFAULT '" + mysql->escape(field->Default).local8Bit() + "' "; - + bool skipDefault = false; + + if (field->Type == "enum" || field->Type == "set") + { + if (field->Default.isEmpty()) + skipDefault = true; + } + else + if ( field->Type.find("blob") != -1 || field->Type.find("text") != -1 || field->Type == "timestamp" || field->AutoIncrement) + skipDefault = true; + + if (!skipDefault) + { + sql += "DEFAULT '"; + if (!field->Default.isEmpty()) + sql += mysql->escape(field->Default).local8Bit(); + sql += "' "; + } + if (field->AutoIncrement) sql += "AUTO_INCREMENT "; } @@ -2046,27 +2231,30 @@ void CTableWindow::init(bool ok) { if (ok) - { - reset(); + { connect(tableInsertAction, SIGNAL(activated()), this, SLOT(insertRow())); connect(tableDeleteAction, SIGNAL(activated()), this, SLOT(deleteRow())); + connect(tablePrimaryKeyAction, SIGNAL(activated()), this, SLOT(setPk())); connect(Fields, SIGNAL(contextMenuRequested(int, int, const QPoint &)), this, SLOT(showContextMenu(int, int, const QPoint &))); connect(Fields, SIGNAL(clicked(int, int, int, const QPoint &)), this, SLOT(fieldsClicked(int, int, int, const QPoint &))); - connect(Fields, SIGNAL(valueChanged(int, int)), this, SLOT(fieldsValueChanged(int, int))); + connect(Fields, SIGNAL(valueChanged(int, int)), this, SLOT(fieldsValueChanged(int, int))); connect(fileSaveAction, SIGNAL(activated()), this, SLOT(save())); connect(fileSaveAsAction, SIGNAL(activated()), this, SLOT(saveAs())); connect(fileReloadAction, SIGNAL(activated()), this, SLOT(reset())); connect(editCopyAction, SIGNAL(activated()), this, SLOT(copy())); connect(editPasteAction, SIGNAL(activated()), this, SLOT(paste())); connect(Tab, SIGNAL(currentChanged(QWidget *)), indexesTab, SLOT(refresh())); + connect(indexesTab, SIGNAL(primaryKey(bool, int)), this, SLOT(addPrimaryIcon(bool, int))); connect(this, SIGNAL(valueChanged()), indexesTab, SLOT(refresh())); connect(this, SIGNAL(valueChanged()), alterTableOptionsTab, SLOT(refresh())); + reset(); } else { setWindowCaption(); tableInsertAction->setEnabled(false); tableDeleteAction->setEnabled(false); + tablePrimaryKeyAction->setEnabled(false); fileSaveAction->setEnabled(false); fileSaveAsAction->setEnabled(false); fileReloadAction->setEnabled(false); --- New file --- +++ xpm/emptyPkIcon.xpm 02/06/10 20:47:43 /* XPM */ static const char* const emptyPkIcon_data[] = { "10 11 3 1", "# c #000000", "a c None", ". c None", "..#####...", ".#aaaaa#..", ".#aa#aa#..", ".#aaaaa#..", "..#aaa#...", "...#a#....", "...#aa#...", "...#a#....", "...#aa#...", "...#a#....", "....#....."}; --- 1.34/dist/Changelog.txt Sun Jun 9 20:19:56 2002 +++ 1.35/dist/Changelog.txt Tue Jun 11 01:09:56 2002 @@ -1,3 +1,22 @@ +Important Notes for 0.8.4-alpha +------------------------------- +MyCC 0.8.3 has a couple of critical bug that affect users who will be using the newly added features: 'New Table' & 'Edit Table'. +If you are currently using MyCC 0.8.3 and are planning to use the above 2 features, please upgrade to the latest MyCC release. + +Changes for 0.8.4-alpha +----------------------- + * Added some enhancements to CTableWindow. + * Fixed several SHOW CREATE TABLE parsing bugs. + * Fixed a bug that failed to parse correctly the DEFAULT value of a field. + * Fixed a bug which didn't generate the correct DEFAULT value for fields. + * Fixed a bug that failed to parse correctly ENUM & SET Values. + * Fixed a bug which reset the "Table Type" to MyISAM when editing tables. + * Fixed a bug generating the quote enclosed values for SET & ENUM fields. + * Fixed a bug generating the quote enclosed values for the DEFAULT value of a Field. + * Fixed a bug which didn't clear the Field Properties correctly when modifying the Field Type. + * Fixed a bug which displayed an erroneous Error message when a field was moved. + + Important Notes for 0.8.3-alpha ------------------------------- Because of a bug found in all previous versions of MyCC regarding the way Query History was saved, its important @@ -35,9 +54,7 @@ * Multiple queries can now be executed in the Query Window. They need to be separated with ";" * Double-Clicking on the Database branch (Navigation Tree) now opens or collapses the child items depending on the current status. * One can now define a "Connection Name" when registering a new server. Before, it was only possible if one was editing a server. - * The Linux configuration scripts now check for - - mysql_real_connect instead of mysql_connect - - QT >= 3.0.2 + * The Linux configuration scripts now check for mysql_real_connect & QT >= 3.0.2 * MyCC binaries are now compiled with Qt 3.0.4 * Fixed up CSqlTable's context menu's for when no results where returned by the query. * Fixed a design bug which didn't preserve line-feeds in the query history. --- 1.13/include/Config.h Tue Jun 4 16:32:41 2002 +++ 1.14/include/Config.h Mon Jun 10 20:46:51 2002 @@ -28,7 +28,7 @@ #define APPLICATION "MySQL Control Center" #define CODENAME "MyCC" -#define VERSION "0.8.3" +#define VERSION "0.8.4" #define BRANCH "-alpha" #define COPYRIGHT "Copyright (C) MySQL AB & Jorge del Conde 2002" --- 1.12/include/Icons.h Fri Jun 7 03:02:50 2002 +++ 1.13/include/Icons.h Mon Jun 10 20:47:01 2002 @@ -125,6 +125,7 @@ #include "../xpm/leftArrowIcon.xpm" #include "../xpm/rightArrowIcon.xpm" #include "../xpm/eraserIcon.xpm" +#include "../xpm/emptyPkIcon.xpm" #endif --- 1.8/src/CCreditsBox.cpp Thu Apr 18 12:12:51 2002 +++ 1.9/src/CCreditsBox.cpp Tue Jun 11 01:09:44 2002 @@ -66,11 +66,11 @@ TextLabel3->setFrameShape( QLabel::Panel ); TextLabel3->setFrameShadow( QLabel::Sunken ); TextLabel3->setText(tr(" Jorge del Conde [jorge@stripped]
\n" + "Adam Hooper [adamh@stripped]
\n" "Alexander M. Stetsenko [ams@stripped]
\n" "Sasha Pachev [sasha@stripped]
\n" - "Michael Widenius [monty@stripped]
\n" "Reginald Stadlbauer [reggie@stripped]
\n" - "Adam Hooper [adamh@stripped]" ) ); + "Michael Widenius [monty@stripped]")); TextLabel3->setAlignment( int( QLabel::AlignTop ) ); QWhatsThis::add( TextLabel3,tr("People who contributed directly to this development." ) ); --- 1.10/src/CShowTableProperties.cpp Sun Jun 9 19:43:49 2002 +++ 1.11/src/CShowTableProperties.cpp Mon Jun 10 20:45:19 2002 @@ -81,7 +81,7 @@ icon = "nothingIcon"; else icon = "otherIcon"; - setPixmap(j,0, getPixmapIcon(icon)); + setPixmap(j,0, getPixmapIcon(icon)); } } j++; --- 1.18/src/Globals.cpp Fri Jun 7 03:26:23 2002 +++ 1.20/src/Globals.cpp Tue Jun 11 01:09:42 2002 @@ -484,7 +484,7 @@ QString charReplace(const QString & Str, const QChar & From, const QString & To) { - QString tmpStr = ""; + QString tmpStr = QString::null; for (uint i=0; i < Str.length(); i++) { QChar Tmp = Str.at(i); @@ -640,5 +640,6 @@ g_IconsDict->insert("leftArrowIcon", new QPixmap((const char**)leftArrowIcon_data)); g_IconsDict->insert("rightArrowIcon", new QPixmap((const char**)rightArrowIcon_data)); g_IconsDict->insert("eraserIcon", new QPixmap((const char**)eraserIcon_data)); + g_IconsDict->insert("emptyPkIcon", new QPixmap((const char**)emptyPkIcon_data)); }