wyInt32
FindAndReplace::ReplaceAll(wyString& replacewhat, wyString& replacewith, wyUInt32 wholeworld, wyUInt32 matchcase)
{
	if (replacewhat.GetLength() == 0)
	{
		return -1;
	}

	wyInt32 startposition	= 0;
	wyInt32 endposition		= SendMessage(m_hwndedit, SCI_GETLENGTH, 0, 0);

	wyInt32 flags = 0;
	
	if(wholeworld)flags = SCFIND_WHOLEWORD;
	if(matchcase)flags  = SCFIND_MATCHCASE;

	::SendMessage(m_hwndedit, SCI_SETTARGETSTART, startposition, 0);
	::SendMessage(m_hwndedit, SCI_SETTARGETEND, endposition, 0);
	::SendMessage(m_hwndedit, SCI_SETSEARCHFLAGS, flags, 0);
	
	wyInt32 posfind = SendMessage(m_hwndedit, SCI_SEARCHINTARGET, replacewhat.GetLength(), (LPARAM)replacewhat.GetString());

	if((posfind != -1) && (posfind <= endposition))
	{

		::SendMessage(m_hwndedit, SCI_BEGINUNDOACTION, 0, 0);
			
		return Replace(posfind, endposition,
			                    replacewhat, replacewith,
     				            wholeworld, matchcase);
	}

	return 0;
}
wyInt32
FindAndReplace::Replace(wyInt32 posfind, wyInt32 endposition,
					         wyString &replacewhat, wyString &replacewith,
					         wyUInt32 wholeworld, wyUInt32 matchcase)
{   
   
	wyInt32   lastmatch    = posfind;
	wyInt32   replacements = 0;
	
	//Replacement loop
	while(posfind != -1)
	{
		wyInt32 lentarget   = SendMessage(m_hwndedit, SCI_GETTARGETEND, 0, 0) - SendMessage(m_hwndedit, SCI_GETTARGETSTART, 0, 0);
		
		wyInt32 movepasteol = 0;

		wyInt32 replacelen  = replacewith.GetLength();

		wyInt32 lenreplaced = replacelen;
		
		::SendMessage(m_hwndedit, SCI_REPLACETARGET, replacelen, (LPARAM)replacewith.GetString());
		
		//Modify for change caused by replacement
		endposition += lenreplaced - lentarget;
		
		// For the special cases of start of line and end of line
		// something better could be done but there are too many special cases
		lastmatch = posfind + lenreplaced + movepasteol;
		
		if(lentarget == 0)
		{
			lastmatch = SendMessage(m_hwndedit, SCI_POSITIONAFTER, lastmatch, 0);
		}

		if(lastmatch >= endposition)
		{
			// Run off the end of the document/selection with an empty match
			posfind = -1;
		}
		else 
		{
			::SendMessage(m_hwndedit, SCI_SETTARGETSTART, lastmatch, 0);
			::SendMessage(m_hwndedit, SCI_SETTARGETEND, endposition, 0);
			
			posfind = SendMessage(m_hwndedit, SCI_SEARCHINTARGET, replacewhat.GetLength(), (LPARAM)replacewhat.GetString());
		}
		
	    replacements++;
	}
		::SendMessage(m_hwndedit, SCI_SETSEL, lastmatch, lastmatch);

		::SendMessage(m_hwndedit, SCI_ENDUNDOACTION, 0, 0);

		return replacements;
}
Ejemplo n.º 3
0
// Function to get the path the selected item in a  Treeview //
wyBool 
FavoriteBase::SelItemPath(HWND htree, HTREEITEM  item, wyString &fullpath, wyBool bFileFlag)
{	
	wyWChar		data[MAX_PATH + 1] = {0};
	wyWChar		foldpath[MAX_PATH + 1] = {0};
	TVITEM		tvitem;
	wyString	path, temp, temp2, datastr, foldpathstr;
	
	// application data path //
	if(!pGlobals->m_configdirpath.GetLength())
	{
		if(!SUCCEEDED(::SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, foldpath)))
			return OnError(_("Error in favorites"));

		wcscat(foldpath ,L"\\SQLyog");
	}

	else
	{
		//wcscpy(foldpath, pGlobals->m_configdirpath.GetAsWideChar());
		wcsncpy(foldpath, pGlobals->m_configdirpath.GetAsWideChar(), MAX_PATH);
		foldpath[MAX_PATH] = '\0';
	}
	
	while(item)
	{
		tvitem.mask		  = TVIF_TEXT | TVIF_IMAGE;
		tvitem.hItem	  = item;
		tvitem.cchTextMax = MAX_PATH;
		tvitem.pszText	  = data ;

		TreeView_GetItem(htree, &tvitem);
		datastr.SetAs(data);
		if(tvitem.iImage != NFILE || !bFileFlag)
        {
			temp.Sprintf("\\%s", datastr.GetString());
            if(path.GetLength() > 0)
            {
                temp2.SetAs(path);
				path.Sprintf("\\%s%s", datastr.GetString(), temp2.GetString());
            }
            else
				path.Sprintf("\\%s", datastr.GetString());
        }
		
		item = TreeView_GetParent(htree, item);
	}
	
	foldpathstr.SetAs(foldpath);
	fullpath.SetAs(foldpathstr.GetString());
	fullpath.Add(path.GetString());

    return wyTrue;
}
Ejemplo n.º 4
0
//function to get the banner text 
void 
TableView::GetBanner(wyString& bannertext)
{
    bannertext.Clear();

    //set the text
    if(!m_mydata || !m_mydata->m_table.GetLength() || !m_mydata->m_db.GetLength())
    {
        bannertext.SetAs(_("Select a Table/View from the Object Browser"));
    }
}
Ejemplo n.º 5
0
void 
EditorBase::GetCompleteTextByPost(wyString &query, MDIWindow *wnd)
{
	wyUInt32		nstrlen;
	wyChar			*data;

	THREAD_MSG_PARAM tmp = {0};

    //set the lparam sent
    
	if(GetWindowThreadProcessId(m_hwnd , NULL) == GetCurrentThreadId())
    {
        nstrlen = SendMessage(m_hwnd, SCI_GETTEXTLENGTH, 0, 0);
		data = AllocateBuff(nstrlen + 1);
		SendMessage(m_hwnd, SCI_GETTEXT, (WPARAM)nstrlen+1, (LPARAM)data);
		query.SetAs(data);

		free(data);
    }
    else
    {
		if(WaitForSingleObject(pGlobals->m_pcmainwin->m_sqlyogcloseevent, 0) != WAIT_OBJECT_0 )
		{
			query.SetAs("");
			return;
		}
		tmp.m_lparam = (LPARAM)&query;
		tmp.m_hevent = CreateEvent(NULL, TRUE, FALSE, NULL);

		//now post the message to ui thread and wait for the event to be set
		PostMessage(wnd->GetHwnd(), UM_GETEDITORTEXT, (WPARAM)this->GetHWND(), (LPARAM)&tmp);
		if(WaitForSingleObject(tmp.m_hevent, 10000) == WAIT_TIMEOUT)
		{
			//CloseHandle(tmp.m_hevent);
			query.SetAs("");
			//return;
		}
		//WaitForSingleObject(tmp.m_hevent, INFINITE);


		//close the event handle
		CloseHandle(tmp.m_hevent);
		tmp.m_hevent = NULL;
		//data = (wyChar*)tmp.m_lparam;
		
	}
	

	return;
}
Ejemplo n.º 6
0
//get column name
wyBool 
TableView::GetColumnName(wyString& column, wyInt32 col)
{
    if(m_data && m_data->m_datares && col >= 0 && col < m_data->m_datares->field_count)
    {
        if(m_data->m_datares->fields[col].name && m_data->m_datares->fields[col].name[0])
        {
            column.SetAs(m_data->m_datares->fields[col].name, m_wnd->m_ismysql41);
        }

        return column.GetLength() ? wyTrue : wyFalse;
    }

    return wyFalse;
}
void
ExportAsSimpleSQL::AddColumnNames(ExportSQLData *data, wyString &value)
{
	wyInt32 count;

	value.Add("(");

	for(count = 0; count < m_myres->field_count; count++)
    {
		if(data->m_selcol[count] == wyTrue)
			value.AddSprintf("`%s`, ", m_myres->fields[count].name);
    }

	value.Strip(2); // Strip one for ',' and one for blank space
	value.Add(") ");
}
wyBool 
ExportAsSimpleSQL::WriteToFile(wyString &buffer)
{
    DWORD       dwbyteswritten;
	wyInt32	    ret;
	wyString    error;
		
	
	m_buffer.Add(buffer.GetString());
	
	//if size of filebuffer is more then write to file
	if(m_buffer.GetLength() >=  SIZE_8K)
	{
		ret = WriteFile(m_filename, m_buffer.GetString(), m_buffer.GetLength(), &dwbyteswritten, NULL);
		m_buffer.Clear();
        
		if(!ret)
		{
			error.Sprintf(_("Error no : %d"), GetLastError());
			MessageBox(m_hwnd, error.GetAsWideChar(), pGlobals->m_appname.GetAsWideChar(), MB_OK | MB_ICONERROR);
			return wyFalse;
		}
	}
	
	return wyTrue;
}
Ejemplo n.º 9
0
//Function adds text in the edit box.
void
TabMessage::AddText(wyString& str)
{
    SendMessage(m_hwnd, SCI_SETREADONLY, false, 0);
    SendMessage(m_hwnd, SCI_SETTEXT, 0, (LPARAM)str.GetString());
    SendMessage(m_hwnd, SCI_SETREADONLY, true, 0);
    SendMessage(m_hwndcombo, CB_SETCURSEL, 0, 0);
}
void
FindAndReplace::NotFoundMsg(wyString tofind)
{

	wyString msg;
	
	msg.AddSprintf(_("Finished searching the document. Cannot find \"%s\""), tofind.GetString());
	
    ShowMessage(msg.GetAsWideChar(), MB_OK | MB_ICONINFORMATION);
}
Ejemplo n.º 11
0
wyBool 
InitOpenFile(HWND hwnd, wyString &filename, wyInt32 filter, wyInt32 bufsize)
{
    wyWChar     file[MAX_PATH] = {0};
    wyBool      ret;

    ret = InitOpenFile(hwnd, file, filter, bufsize);
    filename.SetAs(file);

    return ret;
}
Ejemplo n.º 12
0
wyInt32
EditorBase::ExecuteQueryThread(wyString query, wyInt32 *stop, MDIWindow *wnd, wyInt32& curline, wyBool isanalyze)
{
	wyInt32			 start=0, end=0, *err = 0;
	QueryThread		 thd;
	HANDLE			 evt;
	QueryResultList	 *list = NULL;
	wyString         *str = new wyString;
    wyString        *querystr;
	PMYSQL			tmpmysql;

    err = new wyInt32;
	*err = 0;
    querystr   = new wyString();
    querystr->SetAs(query.GetString());

	wnd->m_stopmysql=  wnd->m_mysql;

    tmpmysql = &wnd->m_stopmysql;
   		
    QUERYTHREADPARAMS *param = new QUERYTHREADPARAMS;
    list = new QueryResultList;

    param->startpos = start; 
    param->endpos = end; 
    param->linenum = curline;
    param->executestatus = EXECUTE_ALL;
	param->query = querystr;
    param->stop = stop; 
    param->list = list; 
    param->str = str;
	param->tab = wnd->GetActiveTabEditor()->m_pctabmgmt; 
    param->tunnel = wnd->m_tunnel; 
    param->mysql = &wnd->m_mysql; 
	param->error = err;	
    param->isadvedit = m_isadvedit; 
    param->lpcs = &wnd->m_cs;
    param->wnd  = wnd;
	param->isprofile = wyTrue;
	param->m_highlimitvalue = -1;
	param->m_lowlimitvalue = -1;
	param->m_iseditor = isanalyze;
	param->executeoption = ALL;
	param->isedit = wyFalse;
	param->tmpmysql = tmpmysql; 
	param->isexplain = wyFalse;

    InitializeExecution(param);

   	evt = thd.Execute(param);
	return 1;
}
Ejemplo n.º 13
0
// function to process file type Favorite//
wyBool
FavoriteBase::AddFile(HMENU hmenu, wyString &parentpath,  wyWChar *filename)
{
	wyInt32				i , j=0;
	wyUInt32			lengthwchar = 1;
	wyWChar				ext[_MAX_EXT] = {0} , *data = {0};
	wyChar				*path = {0};
	MENUITEMINFO		lpmii={0};
	
	parentpath.GetAsWideChar(&lengthwchar);
	
	path = AllocateBuff(parentpath.GetLength() + 2);
	data = AllocateBuffWChar(wcslen(filename) + 2);

	wcscpy(data, (wyWChar*)filename);
	strcpy(path, (wyChar*)parentpath.GetString());

	for(i = wcslen(data) - 1; i && data[i]!='.'; i--, j++)
		ext[j] = data[i];
	
	if(wcsnicmp(ext, L"lqs", 3) != 0)
		return wyFalse;

	ext[j] = 0;
	data[i] = 0;
	
	lpmii.cbSize		= sizeof(MENUITEMINFO);
	lpmii.fMask			= MIIM_STRING|MIIM_ID|MIIM_DATA;
	lpmii.wID			= m_menuid++;
	lpmii.dwItemData	= (ULONG_PTR)path;
	lpmii.cch			= wcslen(data);
	lpmii.dwTypeData	= data;
	
    VERIFY(::InsertMenuItem(hmenu, -1, TRUE, &lpmii));

	free(data);

    return wyTrue;
}
Ejemplo n.º 14
0
void
EditorBase::AddResultMsg(Tunnel * tunnel, MYSQL_RES * myres, wyString& errorormsg, wyUInt32 timetaken)
{
	wyUInt32		rowsret;
	wyString		newmsg;

	rowsret		=	(wyUInt32)tunnel->mysql_num_rows(myres);

	VERIFY(newmsg.Sprintf(_("(%lu row(s) returned)\n(%d ms taken)\n\n"), rowsret, timetaken  ) < SIZE_128);

	errorormsg.SetAs(newmsg);
	
	return;
}
Ejemplo n.º 15
0
void
EditorBase::AddNonResultMsg (Tunnel * tunnel, PMYSQL mysql, wyString& errorormsg, wyUInt32 timetaken )
{
	wyUInt32		rowsret;
	wyString		newmsg;

	rowsret		=	(wyUInt32)tunnel->mysql_affected_rows(*mysql);

	VERIFY(newmsg.Sprintf(_("(%lu row(s) affected)\n(%lu ms taken)\n\n"), rowsret, timetaken ) < SIZE_1024);

	errorormsg.Add(newmsg.GetString());
	
	return;
}
Ejemplo n.º 16
0
// Function to add the given item to the treeview control //
HTREEITEM	
FavoriteBase::AddItem(HWND htree, HTREEITEM parent, wyString name, wyInt32 pos) 
{	
	TV_INSERTSTRUCT			str ;
	str.hParent				= parent ;
	str.item.mask			= TVIF_TEXT |  TVIF_IMAGE | TVIF_SELECTEDIMAGE ; 
	str.hInsertAfter		= TVI_SORT;
	str.item.pszText		= (LPWSTR)name.GetAsWideChar();
	str.item.iImage			= pos ;
	str.item.iSelectedImage = pos;

    HTREEITEM htreeitem;
    VERIFY(htreeitem = (HTREEITEM)SendMessage(htree, TVM_INSERTITEM, NULL, (wyInt32)&str));
	return(htreeitem);
 }
Ejemplo n.º 17
0
void
EditorBase::AddErrorMsg(Tunnel * tunnel, PMYSQL mysql, wyString& errorormsg, wyUInt32 timetaken)
{
	wyUInt32     errnum;
	wyString	 newerror;

	errnum = tunnel->mysql_errno(*mysql);

	/* it may happen that due to http error the errornumber is 0 so we return */
	if(0 == errnum)
		return;

	VERIFY(newerror.Sprintf(_("Error Code: %d\n%s\n(%lu ms taken)\n\n"), errnum, tunnel->mysql_error(*mysql), timetaken) < SIZE_1024);

	errorormsg.Add(newerror.GetString());
	
	return;
}
Ejemplo n.º 18
0
void 
EditorBase::GetCompleteText(wyString &query)
{
	wyUInt32		nstrlen;
	wyChar			*data;

	nstrlen = SendMessage(m_hwnd, SCI_GETTEXTLENGTH, 0, 0);

	data = AllocateBuff(nstrlen + 1);

	SendMessage(m_hwnd, SCI_GETTEXT, (WPARAM)nstrlen+1, (LPARAM)data);

	query.SetAs(data);

	free(data);

	return;
}
Ejemplo n.º 19
0
// Function to create a favorite file or folder in the given path //
wyBool 
FavoriteBase::InsertFavoriteItem(wyString &path, wyBool isfolder , wyString &favquery)
{	
	DWORD				byteswritten;
	HANDLE				hfile;
	//const unsigned char utf8bom[10] = {unsigned char(0xEF), unsigned char(0xBB), unsigned char(0xBF)};
			
	// if the favorite is file type then add the extension//
	if(!isfolder)
	{
		path.Add(".sql");

        hfile = ::CreateFile(path.GetAsWideChar(), GENERIC_WRITE, 0, NULL, CREATE_NEW,
								   NULL, NULL);

		if(hfile  == INVALID_HANDLE_VALUE)
		{
            if(::GetLastError() == ERROR_FILE_EXISTS)
			{
                if(::MessageBox(NULL, _(L"The name you have entered for the shortcut already exists in Favorites menu.\nWould you like to overwrite it?"), _(L"Add Favorite"), MB_YESNO | MB_TASKMODAL | MB_ICONINFORMATION | MB_DEFBUTTON2) == IDYES)
				{
                    hfile = ::CreateFile(path.GetAsWideChar(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, NULL, NULL);
					
					if(hfile  == INVALID_HANDLE_VALUE)
                         OnError(_("Cannot write into Favorite File"));
				}
				else
					return wyFalse;			
			}
			else
			    return OnError(_("Cannot write into Favorite File"));
		}
		
		//if (!::WriteFile(hfile,  utf8bom, 3, &byteswritten , NULL))
		//	return OnError("Cannot write into Favorite File");

        if (!::WriteFile(hfile,  favquery.GetString(), favquery.GetLength(), &byteswritten , NULL))
			return OnError(_("Cannot write into Favorite File"));

        ::CloseHandle(hfile);
	}
    else if(!::CreateDirectory(path.GetAsWideChar(), NULL))
	  return OnError(_("Cannot create Favorite Folder"));
	
    return wyTrue;
}
wyBool
ExportAsSimpleSQL::AddValues(ExportSQLData *data, wyString &value)
{
	wyInt32		count, last, lenrow;
	wyString	temp, resrow, buffer;
	wyInt32     *lengths = NULL; 
	wyInt32		escapeddatalen;
	wyBool		startflag = wyFalse;

	if(WriteToFile(value) == wyFalse)
		return wyFalse;

	//this condition is true if export from from result tab if result set is not edited
    if(!data->m_tabrec->m_rowarray)
	{
		if(m_isdatafromquery == wyTrue)
		{
			lengths = (wyInt32 *)sja_mysql_fetch_lengths(m_tunnel, m_myres);
		}
		else
		{
			lengths = (wyInt32 *)m_rowlength; 
		}
	}

	for(count = 0; count < data->m_result->field_count; count++)
	{
		if(data->m_selcol[count] == wyFalse)
			continue;

		if(startflag == wyTrue)
			buffer.Add(",");

        /// Check for NULL value or not
        if(!m_myrow[count])
        {
            buffer.Add("NULL");
            startflag = wyTrue;

            continue;
        }

		if(m_escapeddata)
			free(m_escapeddata);

				
		//This condion true if the result tab in table tab or edit mode or result set is edited		
		if(!lengths)		
		{
			resrow.SetAs(m_myrow[count]);
			lenrow = resrow.GetLength();
		}		
		else
		{			
			lenrow = lengths[count];		
		}		
				
		//It requires double buffer bcs the real_escape_string returns 2 char for special chars like '\'
		escapeddatalen = (lenrow * 2) + 1;
		m_escapeddata = AllocateBuff(escapeddatalen);

		last = sja_mysql_real_escape_string(m_tunnel, *m_mysql, m_escapeddata, m_myrow[count], lenrow);
		m_escapeddata[last] = 0;

		buffer.Add("'");
		startflag = wyTrue;

		buffer.Add(m_escapeddata);

		buffer.Add("'");
	}

	//Write to file
	WriteToFile(buffer);

	buffer.SetAs("");
	value.SetAs("");
	return wyTrue;
}
Ejemplo n.º 21
0
void 
BlobMgmt::ProcessComboSelection(wyString& comboselparam)
{
 	wyChar *ansistr = NULL;
	wyChar *utf8str = NULL;
	wyWChar *ucs2str = NULL;
	wyInt32 lenucs2 = 0, i;
	
	if(comboselparam.CompareI("US-ascii/Ansi ") == 0 && m_isutf8 == wyTrue)
	{
		ansistr = Utf8toAnsi(m_blobdata.GetString(), m_blobdata.GetLength());
        m_piub->m_data = ansistr;
		m_piub->m_datasize      = strlen(ansistr);
		m_piub->m_isnull		= wyFalse;
		m_piub->m_ischanged     = wyTrue;
	}
	else if(comboselparam.CompareI("UTF-8") == 0 && m_isansi == wyTrue)
	{
		utf8str = AnsitoUtf8(m_blobdata.GetString(), m_blobdata.GetLength());
		m_piub->m_data = utf8str;
		m_piub->m_datasize      = strlen(utf8str);
		m_piub->m_isnull		= wyFalse;
		m_piub->m_ischanged     = wyTrue;
	}
	else if(comboselparam.CompareI("ucs2") == 0 && m_isutf8 == wyTrue)
	{
		ucs2str = Utf8toUcs2(m_blobdata.GetString(), m_blobdata.GetLength());
		lenucs2 = wcslen(ucs2str);
		memset(m_piub->m_data, 0, strlen(m_piub->m_data));
		for(i=0; i < lenucs2; i++)
			memcpy(m_piub->m_data + i, ucs2str + i, 1);
		
		m_piub->m_datasize      = lenucs2;
		m_piub->m_isnull		= wyFalse;
		m_piub->m_ischanged     = wyTrue;
	}
	else if(comboselparam.CompareI("US-ascii/Ansi ") == 0 && m_isucs2 == wyTrue)
	{
		ansistr = Ucs2toAnsi(m_blobdata.GetString(), m_blobdata.GetLength());
		m_piub->m_data = ansistr;
		m_piub->m_datasize      = strlen(ansistr);
		m_piub->m_isnull		= wyFalse;
		m_piub->m_ischanged     = wyTrue;
	}
	else if(comboselparam.CompareI("UTF-8") == 0 && m_isucs2 == wyTrue)
	{
		utf8str = Ucs2toUtf8(m_blobdata.GetString(), m_blobdata.GetLength());
		m_piub->m_data = utf8str;
		m_piub->m_datasize      = strlen(utf8str);
		m_piub->m_isnull		= wyFalse;
		m_piub->m_ischanged     = wyTrue;
	}
	else if(comboselparam.CompareI("ucs2") == 0 && m_isansi == wyTrue)
	{
		ucs2str = AnsitoUcs2(m_blobdata.GetString(), m_blobdata.GetLength());
		lenucs2 = wcslen(ucs2str);
		memcpy(m_piub->m_data, ucs2str, lenucs2);
		for(i=0; i < lenucs2; i++)
			memcpy(m_piub->m_data + i, ucs2str + i, 1);
		m_piub->m_datasize      = lenucs2;
		m_piub->m_isnull		= wyFalse;
		m_piub->m_ischanged     = wyTrue;
	}
}
Ejemplo n.º 22
0
wyBool 
FavoriteBase::OnError(wyString errmsg)
{
    DisplayErrorText(::GetLastError(), errmsg.GetString());
    return wyFalse;
}
Ejemplo n.º 23
0
//get table name
wyBool 
TableView::GetTableName(wyString& table, wyInt32 col)
{
    table.SetAs(m_data->m_table);
    return table.GetLength() ? wyTrue : wyFalse;
}
Ejemplo n.º 24
0
//get the database name
wyBool 
TableView::GetDBName(wyString& db, wyInt32 col)
{
    db.SetAs(m_data->m_db);
    return db.GetLength() ? wyTrue : wyFalse;
}
Ejemplo n.º 25
0
void
EditorFont::SetLexerWords(HWND hwndedit, wyString &keys, wyString &funcs)
{
	SendMessage(hwndedit, SCI_SETKEYWORDS, (WPARAM)0, (LPARAM)keys.GetString());
	SendMessage(hwndedit, SCI_SETKEYWORDS, (WPARAM)3, (LPARAM)funcs.GetString());
}
// Function creates a text buffer with all the properties and sends newly allocated buffer.
wyBool
TableMakerAdvProperties::GetAdvPropString( Tunnel *tunnel, PMYSQL mysql,
        TableAdvPropValues* ptav, wyString& str)
{
    wyBool ismysql41 = IsMySQL41(tunnel, mysql);

    if(ptav->m_changed == wyFalse)
        return wyFalse;

    /* 	nCount += sprintf( szQuery+nCount, " ,type=%s ", ptav->szType );
    	This comma is not required, this is required in the alter stmt when this
    	stmt is not the first one. So we are checking it in the query builder
    	In the latest versions we need 'Engine' in place of 'Type'
    */
    if(ptav->m_type.GetLength())
    {
        if(ismysql41 == wyTrue)
            str.AddSprintf(" Engine=%s ", ptav->m_type.GetString());
        else
            str.AddSprintf(" Type=%s ", ptav->m_type.GetString());
    }

    if(ptav->m_checksum.CompareI(STR_DEFAULT) != 0)
        str.AddSprintf("checksum=%s ", ptav->m_checksum.GetString());

    if(ptav->m_auto_incr.GetLength())
        str.AddSprintf("auto_increment=%s ", ptav->m_auto_incr.GetString());

    if(ptav->m_avg_row.GetLength())
        str.AddSprintf("avg_row_length=%s ", ptav->m_avg_row.GetString());

    if(ptav->m_comment.GetLength())
        str.AddSprintf("comment='%s' ", ptav->m_comment.GetString());
    else
        str.Add("comment='' ");

    if(ptav->m_max_rows.GetLength())
        str.AddSprintf("max_rows=%s ", ptav->m_max_rows.GetString());

    if(ptav->m_min_rows.GetLength())
        str.AddSprintf("min_rows=%s ", ptav->m_min_rows.GetString());

    if(ptav->m_delay.CompareI(STR_DEFAULT) != 0)
        str.AddSprintf("delay_key_write=%s ", ptav->m_delay.GetString());

    if(ptav->m_rowformat.GetLength())
        str.AddSprintf("row_format=%s ", ptav->m_rowformat.GetString());

    if(ptav->m_chunks.GetLength())
        str.AddSprintf("raid_chunks=%s ", ptav->m_chunks.GetString());

    if(ptav->m_chunksize.GetLength())
        str.AddSprintf("raid_chunksize=%s ", ptav->m_chunksize.GetString());

    if(ismysql41 == wyTrue)
    {
        if(ptav->m_charset.GetLength() && ptav->m_charset.Compare(STR_DEFAULT) != 0)
            str.AddSprintf("charset=%s ", ptav->m_charset.GetString());

        if(ptav->m_collation.GetLength() && ptav->m_collation.Compare(STR_DEFAULT) != 0)
            str.AddSprintf("collate=%s ", ptav->m_collation.GetString());
    }

    return wyTrue;
}