period "." in view name

fbachofner posted 2 years ago in General
I have some views which are named similar to:


I find the "." to be a handy visual delimiter.

As of MySQL 5.1.6 a period is a legal character in Schema object names (see http://dev.mysql.com/doc/refman/5.1/en/identifiers.html )

Unfortunately, HeidiSQL crashes when I click on views with such names. [build (and earlier) ]

Is this a oversight (since 5.1.6 was released), bug, or intended feature not implemented quite gracefully?

Continued thanks for a great program!
ansgar posted 2 years ago
Well the bug is that HeidiSQL does not expect dots in a name of a view, but it needs a dot between db and view. Most probably a regular expression somewhere in my ParseViewStructure method. Can you please post the very top lines of the callstack here?
kalvaro posted 2 years ago
It doesn't crash for me, but it runs the wrong internal command every time it attempts to fetch information from the view:

SHOW /*!32332 FULL */ COLUMNS FROM `foo`.`bar`;

... rather than:

SHOW /*!32332 FULL */ COLUMNS FROM `foo.bar`;

kalvaro posted 2 years ago
Oh, sorry, I had 4474 and latest version is 4482. Now the internal query is correct but I do get the crash:

date/time : 2013-08-14, 08:15:36, 148ms
operating system : Windows 7 x64 Service Pack 1 build 7601
system language : Spanish
system up time : 2 days
program up time : 1 minute 47 seconds
processors : 2x AMD Athlon(tm) 64 X2 Dual Core Processor 4000+
physical memory : 1187/4096 MB (free/total)
free disk space : (C:) 73,09 GB (D:) 71,24 GB
display mode : 1280x1024, 32 bit
process id : $19c4
allocated memory : 47,87 MB
executable : heidisql.exe
exec. date/time : 2013-08-14 08:13
version :
compiled with : Delphi XE
madExcept version : 3.0m beta 1
callstack crc : $f4cf3b16, $95e3012e, $95e3012e
exception number : 1
exception class : Exception
exception message : Regular expression did not match the VIEW code in ParseViewStructure(): CREATE ALGORITHM=UNDEFINED DEFINER=`oms`@`%` SQL SECURITY DEFINER VIEW `v.tablename.selects_something_special` AS select 2 AS `2`.

main thread ($930):
0073041f heidisql.exe dbconnection 3565 +26 TDBConnection.ParseViewStructure
00801088 heidisql.exe Main 7378 +62 TMainForm.DBtreeFocusChanged
006250fe heidisql.exe VirtualTrees TBaseVirtualTree.DoFocusChange
0062949a heidisql.exe VirtualTrees TBaseVirtualTree.HandleMouseDown
004e9bd0 heidisql.exe Controls TControl.DoMouseDown
0062149c heidisql.exe VirtualTrees TBaseVirtualTree.WMLButtonDown
0062db3f heidisql.exe VirtualTrees TBaseVirtualTree.WndProc
004ed4dc heidisql.exe Controls TWinControl.MainWndProc
004abb0c heidisql.exe Classes StdWndProc
75167885 USER32.dll DispatchMessageW
0057864b heidisql.exe Forms TApplication.ProcessMessage
0057868e heidisql.exe Forms TApplication.HandleMessage
005789b9 heidisql.exe Forms TApplication.Run
0081ebe2 heidisql.exe heidisql 74 +22 initialization
756433a8 kernel32.dll BaseThreadInitThunk

ansgar posted 2 years ago
Thanks for the callstack. Going to check that.

ansgar posted 2 years ago
Ok, using *one* dot in the view's name works, just two or more raise the exception.
ansgar posted 2 years ago
r4483 works here when using 1, 2, or hundreds of dots in a view name. The only char which may not be present in the view name is now the opening parenthesis (, as I need to detect the columns clause after the view name, and I cannot just use .* here.
fbachofner posted 2 years ago

ansgar wrote: r4483 works here when using 1, 2, or hundreds of dots in a view name.

WooHoo! It works. Fantastisch. Vielen Dank Ansgar!

Please login to leave a reply, or register at first.