GOFIGURE2  0.9.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
CreateDataBaseHelper.cxx
Go to the documentation of this file.
1 /*=========================================================================
2  Authors: The GoFigure Dev. Team.
3  at Megason Lab, Systems biology, Harvard Medical school, 2009-11
4 
5  Copyright (c) 2009-11, President and Fellows of Harvard College.
6  All rights reserved.
7 
8  Redistribution and use in source and binary forms, with or without
9  modification, are permitted provided that the following conditions are met:
10 
11  Redistributions of source code must retain the above copyright notice,
12  this list of conditions and the following disclaimer.
13  Redistributions in binary form must reproduce the above copyright notice,
14  this list of conditions and the following disclaimer in the documentation
15  and/or other materials provided with the distribution.
16  Neither the name of the President and Fellows of Harvard College
17  nor the names of its contributors may be used to endorse or promote
18  products derived from this software without specific prior written
19  permission.
20 
21  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
23  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
24  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
25  BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
26  OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
27  OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
28  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
30  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31  ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 
33 =========================================================================*/
34 
35 #include "CreateDataBaseHelper.h"
36 #include "QueryDataBaseHelper.h"
37 #include "vtkSQLQuery.h"
38 #include "vtkVariant.h"
39 #include <sstream>
40 #include <string>
41 
42 //------------------------------------------------------------------------------
43 bool IsDatabaseOfGoFigureType(vtkMySQLDatabase *DatabaseConnector)
44 {
45  return ( DoesTableExist(DatabaseConnector, "bookmark")
46  && DoesTableExist(DatabaseConnector, "contour")
47  && DoesTableExist(DatabaseConnector, "lineage")
48  && DoesTableExist(DatabaseConnector, "mesh")
49  && DoesTableExist(DatabaseConnector, "image")
50  && DoesTableExist(DatabaseConnector, "track") );
51 }
52 
53 //------------------------------------------------------------------------------
54 
55 //------------------------------------------------------------------------------
56 bool DoesDatabaseExit(vtkMySQLDatabase *DataBaseConnector, std::string DBName)
57 {
58  vtkSQLQuery * query = DataBaseConnector->GetQueryInstance();
59  std::stringstream queryScript;
60 
61  queryScript << "SHOW DATABASES LIKE '";
62  queryScript << DBName;
63  queryScript << "';";
64 
65  query->SetQuery( queryScript.str().c_str() );
66  if ( !query->Execute() )
67  {
68  itkGenericExceptionMacro(
69  << "Does database already exist query failed."
70  << query->GetLastErrorText() );
71  query->Delete();
72  return true;
73  }
74 
75  if ( query->NextRow() )
76  {
77  query->Delete();
78  return true;
79  }
80 
81  query->Delete();
82  return false;
83 }
84 
85 //------------------------------------------------------------------------------
86 
87 //------------------------------------------------------------------------------
89  std::string ServerName, std::string login,
90  std::string Password, std::string DBName)
91 {
92  std::pair< bool, vtkMySQLDatabase * > ConnectionServer = ConnectToServer(
93  ServerName, login, Password);
94 
95  if ( !ConnectionServer.first )
96  {
97  std::cout << "Can not connect to the server" << std::endl;
98  std::cout << "Debug: In " << __FILE__ << ", line " << __LINE__;
99  std::cout << std::endl;
100  return false;
101  }
102 
103  vtkMySQLDatabase *ServerConnector = ConnectionServer.second;
104 
105  if ( !DoesDatabaseExit(ServerConnector, DBName) )
106  {
107  bool DatabaseCreated = CreateDataBase(ServerConnector, DBName);
108  ServerConnector->Close();
109  ServerConnector->Delete();
110  if ( !DatabaseCreated )
111  {
112  return false;
113  }
114  std::pair< bool, vtkMySQLDatabase * > Connection = ConnectToDatabase(ServerName,
115  login, Password, DBName);
116  if ( !Connection.first )
117  {
118  return false;
119  }
120  vtkMySQLDatabase *DataBaseConnector = Connection.second;
121  CreateTables(DataBaseConnector);
122  //CreateForeignKeys(DataBaseConnector);
123  DataBaseConnector->Close();
124  DataBaseConnector->Delete();
125  }
126  else
127  {
128  ServerConnector->Close();
129  ServerConnector->Delete();
130  return true;
131  }
132  return true;
133 }
134 
135 //------------------------------------------------------------------------------
136 
137 //------------------------------------------------------------------------------
138 bool CreateDataBase(vtkMySQLDatabase *DataBaseConnector, std::string DBName)
139 {
140  vtkSQLQuery * query = DataBaseConnector->GetQueryInstance();
141  std::stringstream insertQuery;
142 
143  insertQuery << "CREATE DATABASE " << DBName;
144  query->SetQuery( insertQuery.str().c_str() );
145  if ( !query->Execute() )
146  {
147  itkGenericExceptionMacro(
148  << "Create query failed"
149  << query->GetLastErrorText() );
150  std::cout << "Debug: In " << __FILE__ << ", line " << __LINE__;
151  std::cout << std::endl;
152  query->Delete();
153  return false;
154  }
155  query->Delete();
156  return true;
157 }
158 
159 //------------------------------------------------------------------------------
160 
161 //------------------------------------------------------------------------------
162 void CreateTables(vtkMySQLDatabase *DataBaseConnector)
163 {
164  Query( DataBaseConnector, AuthorTable() );
165  Query( DataBaseConnector, BookmarkTable() );
166  Query( DataBaseConnector, CalculatedValueTable() );
167  Query( DataBaseConnector, CellTypeTable() );
168  Query( DataBaseConnector, ChannelTable() );
169  Query( DataBaseConnector, ColorTableScript() );
170  Query( DataBaseConnector, ContourTable() );
171  Query( DataBaseConnector, ContourValueTable() );
172  Query( DataBaseConnector, CoordinateTable() );
173  Query( DataBaseConnector, ImageTable() );
174  Query( DataBaseConnector, ImageValueTable() );
175  Query( DataBaseConnector, ImagingSessionTable() );
176  Query( DataBaseConnector, ImagingSessionValueTable() );
177  Query( DataBaseConnector, IntensityTable() );
178  Query( DataBaseConnector, LineageTable() );
179  Query( DataBaseConnector, LineageValueTable() );
180  Query( DataBaseConnector, MeshTable() );
181  Query( DataBaseConnector, MeshValueTable() );
182  Query( DataBaseConnector, MicroscopeTable() );
183  Query( DataBaseConnector, ProjectTable() );
184  Query( DataBaseConnector, SubCellularTypeTable() );
185  Query( DataBaseConnector, TrackFamilyTable() );
186  Query( DataBaseConnector, TrackTable() );
187  Query( DataBaseConnector, TrackValueTable() );
188  Query( DataBaseConnector, ValuePerVectorCoordTable() );
189  Query( DataBaseConnector, ValueTypeTable() );
190 }
191 
192 //----------------------------------------------------------------------------
193 
194 //----------------------------------------------------------------------------
195 void CreateForeignKeys(vtkMySQLDatabase *DataBaseConnector)
196 {
197  Query( DataBaseConnector, ProjectFK() );
198  Query( DataBaseConnector, ImagingSessionFKMicroscopeName() );
199  Query( DataBaseConnector, ImagingSessionFKProjectName() );
200  // Query(DataBaseConnector,ImagingSessionFKCoordIDMin());
201  // Query(DataBaseConnector,ImagingSessionFKCoordIDMax());
202  Query( DataBaseConnector, TrackFamilyFKTrackIDDaughter1() );
203  Query( DataBaseConnector, TrackFamilyFKTrackIDDaughter2() );
204  Query( DataBaseConnector, TrackFamilyFKTrackIDMother() );
205  Query( DataBaseConnector, TrackFKColor() );
206  Query( DataBaseConnector, TrackFKLineage() );
207  Query( DataBaseConnector, TrackFKCoordIDMax() );
208  Query( DataBaseConnector, TrackFKCoordIDMin() );
209  Query( DataBaseConnector, TrackFKTrackFamily() );
210  Query( DataBaseConnector, MeshFKImagingSession() );
211  Query( DataBaseConnector, MeshFKTrackID() );
212  Query( DataBaseConnector, MeshFKColor() );
213  Query( DataBaseConnector, MeshFKCoordIDMin() );
214  Query( DataBaseConnector, MeshFKCoordIDMax() );
215  Query( DataBaseConnector, MeshFKSubCellType() );
216  Query( DataBaseConnector, MeshFKCellType() );
217  Query( DataBaseConnector, ContourFKImagingSession() );
218  Query( DataBaseConnector, ContourFKCoordIDMin() );
219  Query( DataBaseConnector, ContourFKCoordIDMax() );
220  Query( DataBaseConnector, ContourFKMesh() );
221  Query( DataBaseConnector, ChannelFKColor() );
222  Query( DataBaseConnector, ChannelFKImagingSession() );
223  Query( DataBaseConnector, ImageFKChannel() );
224  Query( DataBaseConnector, ImageFKCoordIDMin() );
225  Query( DataBaseConnector, ImageFKImagingSession() );
226  Query( DataBaseConnector, LineageFKImagingSession() );
227  Query( DataBaseConnector, LineageFKTrackRoot() );
228  Query( DataBaseConnector, LineageFKColor() );
229  Query( DataBaseConnector, LineageFKCoordIDMin() );
230  Query( DataBaseConnector, LineageFKCoordIDMax() );
231  Query( DataBaseConnector, BookmarkFKCoord() );
232  Query( DataBaseConnector, BookmarkFKImagingSession() );
233  Query( DataBaseConnector, IntensityFKChannel() );
234  Query( DataBaseConnector, IntensityFKMesh() );
235  Query( DataBaseConnector, ValueperVectorCoordFKCalculatedValue() );
236  Query( DataBaseConnector, CalculatedValueFKValueType() );
237  Query( DataBaseConnector, MeshValueFKCalculatedValue() );
238  Query( DataBaseConnector, MeshValueFKMesh() );
239  Query( DataBaseConnector, TrackValueFKCalculatedValue() );
240  Query( DataBaseConnector, TrackValueFKTrack() );
241  Query( DataBaseConnector, ImageValueFKCalculatedValue() );
242  Query( DataBaseConnector, ImageValueFKImage() );
243  Query( DataBaseConnector, ImagingSessionValueFKCalculatedValue() );
244  Query( DataBaseConnector, ImagingSessionValueFKImagingSession() );
245  Query( DataBaseConnector, ContourValueFKCalculatedValue() );
246  Query( DataBaseConnector, ContourValueFKContour() );
247  Query( DataBaseConnector, LineageValueFKCalculatedValue() );
248  Query( DataBaseConnector, LineageValueFKLineage() );
249 }
250 
251 //----------------------------------------------------------------------------
252 
253 //----------------------------------------------------------------------------
254 void Query(vtkMySQLDatabase *DataBaseConnector, std::string queryScript)
255 {
256  vtkSQLQuery *query = DataBaseConnector->GetQueryInstance();
257 
258  query->SetQuery( queryScript.c_str() );
259  if ( !query->Execute() )
260  {
261  itkGenericExceptionMacro(
262  << "Create query failed"
263  << query->GetLastErrorText() );
264  std::cout << "Debug: In " << __FILE__ << ", line " << __LINE__;
265  std::cout << std::endl;
266  query->Delete();
267  return;
268  }
269  query->Delete();
270 }
271 
272 //------------------------------------------------------------------------------
273 
274 //------------------------------------------------------------------------------
275 std::string CellTypeTable()
276 {
277  return
278  "CREATE TABLE IF NOT EXISTS `celltype`(\
279  `CellTypeID` INT NOT NULL AUTO_INCREMENT ,\
280  `Name` TEXT NOT NULL ,\
281  `Description` VARCHAR(1000) NULL ,\
282  PRIMARY KEY (`CellTypeID`)\
283  );";
284 }
285 
286 //------------------------------------------------------------------------------
287 
288 //------------------------------------------------------------------------------
289 std::string AuthorTable()
290 {
291  return
292  "CREATE TABLE IF NOT EXISTS `author` (\
293  `AuthorID` INT NOT NULL AUTO_INCREMENT ,\
294  `LastName` VARCHAR(45) NOT NULL ,\
295  `FirstName` VARCHAR(45) NOT NULL ,\
296  `MiddleName` VARCHAR(45) NOT NULL DEFAULT '<none>' ,\
297  UNIQUE INDEX UniqueAuthor (`LastName`,`FirstName`,`MiddleName`),\
298  PRIMARY KEY (`authorID`)\
299  );";
300 }
301 
302 //------------------------------------------------------------------------------
303 
304 //------------------------------------------------------------------------------
305 std::string SubCellularTypeTable()
306 {
307  return
308  "CREATE TABLE IF NOT EXISTS `subcellulartype` (\
309  `SubCellularID` INT NOT NULL AUTO_INCREMENT ,\
310  `Name` VARCHAR(45) NOT NULL ,\
311  `Description` VARCHAR(1000) NULL ,\
312  PRIMARY KEY (`SubCellularID`)\
313  );";
314 }
315 
316 //------------------------------------------------------------------------------
317 
318 //------------------------------------------------------------------------------
319 std::string CoordinateTable()
320 {
321  return
322  "CREATE TABLE IF NOT EXISTS `coordinate` (\
323  `CoordID` INT NOT NULL AUTO_INCREMENT ,\
324  `PCoord` TINYINT UNSIGNED NOT NULL DEFAULT 0,\
325  `RCoord` TINYINT UNSIGNED NOT NULL DEFAULT 0,\
326  `CCoord` TINYINT UNSIGNED NOT NULL DEFAULT 0,\
327  `XTileCoord` SMALLINT UNSIGNED NOT NULL DEFAULT 0,\
328  `YTileCoord` SMALLINT UNSIGNED NOT NULL DEFAULT 0,\
329  `ZTileCoord` SMALLINT UNSIGNED NOT NULL DEFAULT 0,\
330  `XCoord` FLOAT UNSIGNED NOT NULL DEFAULT 0,\
331  `YCoord` FLOAT UNSIGNED NOT NULL DEFAULT 0,\
332  `ZCoord` FLOAT UNSIGNED NOT NULL DEFAULT 0,\
333  `TCoord` FLOAT UNSIGNED NOT NULL DEFAULT 0,\
334  PRIMARY KEY (`CoordID`)\
335  );";
336 }
337 
338 //if needed:
339 // UNIQUE INDEX UniqueCoordinate (`PCoord`,`RCoord`,`CCoord`,`XTileCoord`,
340 // `YTileCoord`,`ZTileCoord`,`XCoord`,`YCoord`,`ZCoord`,`TCoord`),
341 //------------------------------------------------------------------------------
342 
343 //------------------------------------------------------------------------------
344 std::string ColorTableScript()
345 {
346  return
347  "CREATE TABLE IF NOT EXISTS `color` (\
348  `ColorID` INT NOT NULL AUTO_INCREMENT ,\
349  `Name` VARCHAR(45) NULL ,\
350  `Red` TINYINT UNSIGNED NOT NULL ,\
351  `Green` TINYINT UNSIGNED NOT NULL ,\
352  `Blue` TINYINT UNSIGNED NOT NULL ,\
353  `Alpha` TINYINT UNSIGNED NOT NULL ,\
354  `Description` VARCHAR(1000) NULL ,\
355  UNIQUE INDEX UniqueColor (`Red`,`Green`,`Blue`,`Alpha`,`Name`),\
356  PRIMARY KEY (`ColorID`)\
357  );";
358 }
359 
360 //------------------------------------------------------------------------------
361 
362 //------------------------------------------------------------------------------
363 std::string MicroscopeTable()
364 {
365  return
366  "CREATE TABLE IF NOT EXISTS `microscope` (\
367  `Name` VARCHAR(255) NOT NULL ,\
368  PRIMARY KEY (`Name`)\
369  );";
370 }
371 
372 //------------------------------------------------------------------------------
373 
374 //------------------------------------------------------------------------------
375 std::string ProjectTable()
376 {
377  return
378  "CREATE TABLE IF NOT EXISTS `project` (\
379  `Name` VARCHAR(255) NOT NULL ,\
380  `Description` VARCHAR(1000) NULL ,\
381  `AuthorID` INT NOT NULL ,\
382  `CreationDate` DATE NOT NULL ,\
383  `DatabaseVersion` VARCHAR(45) NOT NULL ,\
384  PRIMARY KEY (`Name`) ,\
385  INDEX `FK_Project_AuthorID` (`AuthorID` ASC)\
386  );";
387 }
388 
389 //------------------------------------------------------------------------------
390 
391 //------------------------------------------------------------------------------
392 std::string ImagingSessionTable()
393 {
394  return
395  "CREATE TABLE IF NOT EXISTS `imagingsession` (\
396  `ImagingSessionID` INT NOT NULL AUTO_INCREMENT ,\
397  `CoordIDMax` INT NOT NULL DEFAULT 0 ,\
398  `CoordIDMin` INT NOT NULL DEFAULT 0,\
399  `Name` VARCHAR(255) NOT NULL ,\
400  `Description` VARCHAR(1000) NULL ,\
401  `ImagesTimeInterval` FLOAT UNSIGNED NULL ,\
402  `RealPixelDepth` FLOAT UNSIGNED NULL ,\
403  `RealPixelHeight` FLOAT UNSIGNED NULL ,\
404  `RealPixelWidth` FLOAT UNSIGNED NULL ,\
405  `ProjectName` VARCHAR(255) NOT NULL ,\
406  `MicroscopeName` VARCHAR(255) NOT NULL ,\
407  `CreationDate` DATETIME NOT NULL ,\
408  `XImageSize` INT NOT NULL,\
409  `YImageSize` INT NOT NULL,\
410  `XTileOverlap` FLOAT UNSIGNED DEFAULT 0,\
411  `YTileOverlap` FLOAT UNSIGNED DEFAULT 0,\
412  `ZTileOverlap` FLOAT UNSIGNED DEFAULT 0,\
413  UNIQUE INDEX UniqueImagingSession (`MicroscopeName`,`CreationDate`),\
414  PRIMARY KEY (`ImagingSessionID`) ,\
415  INDEX `FK_ImagingSession_CoordIDMax` (`CoordIDMax` ASC) ,\
416  INDEX `FK_ImagingSession_CoordIDMin` (`CoordIDMin` ASC) ,\
417  INDEX `FK_ImagingSession_ProjectName` (`ProjectName` ASC) ,\
418  INDEX `FK_ImagingSession_MicroscopeName` (`MicroscopeName` ASC)\
419  );";
420 }
421 
422 //------------------------------------------------------------------------------
423 
424 //------------------------------------------------------------------------------
425 std::string TrackFamilyTable()
426 {
427  return
428  "CREATE TABLE IF NOT EXISTS `trackfamily` (\
429  `TrackFamilyID` INT NOT NULL AUTO_INCREMENT ,\
430  `TrackIDMother` INT NOT NULL ,\
431  `TrackIDDaughter1` INT NOT NULL ,\
432  `TrackIDDaughter2` INT NOT NULL ,\
433  PRIMARY KEY (`TrackFamilyID`) ,\
434  INDEX `FK_TrackFamily_TrackIDMother` (`TrackIDMother` ASC) ,\
435  INDEX `FK_TrackFamily_TrackIDDaughter1` (`TrackIDDaughter1` ASC) ,\
436  INDEX `FK_TrackFamily_TrackIDDaughter2` (`TrackIDDaughter2` ASC)\
437  );";
438 }
439 
440 //------------------------------------------------------------------------------
441 
442 //------------------------------------------------------------------------------
443 std::string TrackTable()
444 {
445  return
446  "CREATE TABLE IF NOT EXISTS `track` (\
447  `TrackID` INT NOT NULL AUTO_INCREMENT ,\
448  `LineageID` INT NULL ,\
449  `ColorID` INT NOT NULL DEFAULT '2',\
450  `CoordIDMax` INT NOT NULL ,\
451  `CoordIDMin` INT NOT NULL ,\
452  `TrackFamilyID` INT NULL ,\
453  `Points` LONGTEXT NULL ,\
454  `ImagingSessionID` INT NOT NULL ,\
455  PRIMARY KEY (`TrackID`) ,\
456  INDEX `FK_Track_ColorID` (`ColorID` ASC) ,\
457  INDEX `FK_Track_LineageID` (`LineageID` ASC) ,\
458  INDEX `FK_Track_CoordIDMax` (`CoordIDMax` ASC) ,\
459  INDEX `FK_Track_CoordIDMin` (`CoordIDMin` ASC) ,\
460  INDEX `FK_Track_TrackFamilyID` (`TrackFamilyID` ASC) ,\
461  INDEX `FK_Track_ImagingSessionID` (`ImagingSessionID` ASC)\
462  );";
463 }
464 
465 //------------------------------------------------------------------------------
466 
467 //------------------------------------------------------------------------------
468 std::string MeshTable()
469 {
470  return
471  "CREATE TABLE IF NOT EXISTS `mesh` (\
472  `MeshID` INT NULL AUTO_INCREMENT ,\
473  `CellTypeID` INT NOT NULL DEFAULT '1',\
474  `SubCellularID` INT NOT NULL DEFAULT '1',\
475  `CoordIDMax` INT NOT NULL ,\
476  `CoordIDMin` INT NOT NULL ,\
477  `ColorID` INT NOT NULL DEFAULT '1',\
478  `TrackID` INT NULL ,\
479  `ImagingSessionID` INT NOT NULL ,\
480  `Points` LONGTEXT NULL ,\
481  PRIMARY KEY (`MeshID`) ,\
482  INDEX `FK_Mesh_CellTypeID` (`CellTypeID` ASC) ,\
483  INDEX `FK_Mesh_CoordIDMax` (`CoordIDMax` ASC) ,\
484  INDEX `FK_Mesh_CoordIDMin` (`CoordIDMin` ASC) ,\
485  INDEX `FK_Mesh_ColorID` (`ColorID` ASC) ,\
486  INDEX `FK_Mesh_TrackID` (`TrackID` ASC) ,\
487  INDEX `FK_Mesh_ImagingSessionID` (`ImagingSessionID` ASC) ,\
488  INDEX `FK_Mesh_SubCellularID` (`SubCellularID` ASC)\
489  );";
490 }
491 
492 //------------------------------------------------------------------------------
493 
494 //------------------------------------------------------------------------------
495 std::string ContourTable()
496 {
497  return
498  "CREATE TABLE IF NOT EXISTS `contour` (\
499  `ContourID` INT NOT NULL AUTO_INCREMENT ,\
500  `MeshID` INT NULL ,\
501  `ImagingSessionID` INT NULL ,\
502  `ColorID` INT NULL ,\
503  `CoordIDMax` INT NOT NULL ,\
504  `CoordIDMin` INT NOT NULL ,\
505  `Points` LONGTEXT NOT NULL ,\
506  PRIMARY KEY (`ContourID`) ,\
507  INDEX `FK_Contour_MeshID` (`MeshID` ASC) ,\
508  INDEX `FK_Contour_CoordIDMax` (`CoordIDMax` ASC) ,\
509  INDEX `FK_Contour_CoordIDMin` (`CoordIDMin` ASC) ,\
510  INDEX `FK_Contour_ImagingSessionID` (`ImagingSessionID` ASC) \
511  );";
512 }
513 
514 //------------------------------------------------------------------------------
515 
516 //------------------------------------------------------------------------------
517 std::string ChannelTable()
518 {
519  return
520  "CREATE TABLE IF NOT EXISTS `channel` (\
521  `ChannelID` INT NOT NULL AUTO_INCREMENT ,\
522  `Name` VARCHAR(45) NULL ,\
523  `ImagingSessionID` INT NOT NULL,\
524  `ColorID` INT NOT NULL ,\
525  `ChannelNumber` INT NOT NULL ,\
526  `NumberOfBits` TINYINT UNSIGNED NOT NULL ,\
527  UNIQUE INDEX UniqueChannel (`ImagingSessionID`,`ChannelNumber`),\
528  PRIMARY KEY (`ChannelID`) ,\
529  INDEX `FK_Channel_ColorID` (`ColorID` ASC), \
530  INDEX `FK_Channel_ImagingSessionID`(`ImagingSessionID` ASC)\
531  );";
532 }
533 
534 //------------------------------------------------------------------------------
535 
536 //------------------------------------------------------------------------------
537 std::string ImageTable()
538 {
539  return
540  "CREATE TABLE IF NOT EXISTS `image` (\
541  `ImageID` INT NOT NULL AUTO_INCREMENT ,\
542  `ImagingSessionID` INT NOT NULL ,\
543  `CoordIDMin` INT NOT NULL ,\
544  `Filename` TEXT NOT NULL ,\
545  `ChannelID` INT NOT NULL ,\
546  PRIMARY KEY (`ImageID`) ,\
547  INDEX `FK_Image_ImagingSessionID` (`ImagingSessionID` ASC) ,\
548  INDEX `FK_Image_CoordIDMin` (`CoordIDMin` ASC) ,\
549  INDEX `FK_Image_ChannelID` (`ChannelID` ASC)\
550  );";
551 }
552 
553 //------------------------------------------------------------------------------
554 
555 //------------------------------------------------------------------------------
556 std::string LineageTable()
557 {
558  return
559  "CREATE TABLE IF NOT EXISTS `lineage` (\
560  `LineageID` INT NOT NULL AUTO_INCREMENT ,\
561  `CoordIDMax` INT NOT NULL ,\
562  `CoordIDMin` INT NOT NULL ,\
563  `ColorID` INT NOT NULL DEFAULT '3',\
564  `Points` LONGTEXT NOT NULL ,\
565  `TrackIDRoot` INT NOT NULL ,\
566  `ImagingSessionID` INT NOT NULL ,\
567  PRIMARY KEY (`LineageID`) ,\
568  INDEX `FK_Lineage_CoordIDMax` (`CoordIDMax` ASC) ,\
569  INDEX `FK_Lineage_CoordIDMin` (`CoordIDMin` ASC) ,\
570  INDEX `FK_Lineage_ColorID` (`ColorID` ASC) ,\
571  INDEX `FK_Lineage_TrackIDRoot` (`TrackIDRoot` ASC) ,\
572  INDEX `FK_Lineage_ImagingSessionID` (`ImagingSessionID` ASC)\
573  );";
574 }
575 
576 //------------------------------------------------------------------------------
577 
578 //------------------------------------------------------------------------------
579 std::string BookmarkTable()
580 {
581  return
582  "CREATE TABLE IF NOT EXISTS `bookmark` (\
583  `BookmarkID` INT NOT NULL AUTO_INCREMENT ,\
584  `ImagingSessionID` INT NOT NULL ,\
585  `CoordID` INT NOT NULL ,\
586  `Name` VARCHAR(45) NULL ,\
587  `Description` VARCHAR(1000) NULL ,\
588  `CreationDate` DATETIME NOT NULL,\
589  PRIMARY KEY (`BookmarkID`) ,\
590  INDEX `FK_Bookmark_ImagingSessionID` (`ImagingSessionID` ASC) ,\
591  INDEX `FK_Bookmark_CoordID` (`CoordID` ASC) \
592  );";
593 }
594 
595 //------------------------------------------------------------------------------
596 
597 //------------------------------------------------------------------------------
598 std::string IntensityTable()
599 {
600  return
601  "CREATE TABLE IF NOT EXISTS `intensity` (\
602  `IntensityID` INT NOT NULL AUTO_INCREMENT ,\
603  `Value` INT NOT NULL ,\
604  `MeshID` INT NOT NULL ,\
605  `ChannelID` INT NOT NULL ,\
606  PRIMARY KEY (`IntensityID`) ,\
607  INDEX `FK_Intensity_MeshID` (`MeshID` ASC) ,\
608  INDEX `FK_Intensity_ChannelID` (`ChannelID` ASC) \
609  );";
610 }
611 
612 //------------------------------------------------------------------------------
613 
614 //------------------------------------------------------------------------------
615 std::string ValueTypeTable()
616 {
617  return
618  "CREATE TABLE IF NOT EXISTS `valuetype` (\
619  `ValueTypeID` INT NOT NULL AUTO_INCREMENT ,\
620  `Name` VARCHAR(45) NOT NULL ,\
621  `Description` VARCHAR(1000) NULL ,\
622  PRIMARY KEY (`ValueTypeID`) \
623  );";
624 }
625 
626 //------------------------------------------------------------------------------
627 
628 //------------------------------------------------------------------------------
629 std::string CalculatedValueTable()
630 {
631  return
632  "CREATE TABLE IF NOT EXISTS `calculatedvalue` (\
633  `CalculatedValueID` INT NOT NULL AUTO_INCREMENT ,\
634  `ValueTypeID` INT NOT NULL ,\
635  PRIMARY KEY (`CalculatedValueID`) ,\
636  INDEX `FK_CalculatedValue_ValueTypeID` (`ValueTypeID` ASC)\
637  );";
638 }
639 
640 //------------------------------------------------------------------------------
641 
642 //------------------------------------------------------------------------------
644 {
645  return
646  "CREATE TABLE IF NOT EXISTS `valuepervectorcoord` (\
647  `ValuePerVectorCoordID` INT NOT NULL AUTO_INCREMENT ,\
648  `Name` VARCHAR(45) NULL ,\
649  `VectorCoordNumber` INT NOT NULL ,\
650  `Value` DECIMAL(3) NOT NULL ,\
651  `CalculatedValueID` INT NOT NULL ,\
652  PRIMARY KEY (`ValuePerVectorCoordID`) ,\
653  INDEX `FK_ValuePerVectorCoord_CalculatedValueID` (`CalculatedValueID` ASC) \
654  );";
655 }
656 
657 //------------------------------------------------------------------------------
658 
659 //------------------------------------------------------------------------------
660 std::string MeshValueTable()
661 {
662  return
663  "CREATE TABLE IF NOT EXISTS `meshvalue` (\
664  `CalculatedValueID` INT NOT NULL ,\
665  `MeshID` INT NOT NULL ,\
666  PRIMARY KEY (`CalculatedValueID`, `MeshID`),\
667  INDEX `FK_MeshValue_MeshID` (`MeshID` ASC) ,\
668  INDEX `FK_MeshValue_CalculatedValueID` (`CalculatedValueID` ASC)\
669  );";
670 }
671 
672 //------------------------------------------------------------------------------
673 
674 //------------------------------------------------------------------------------
675 std::string TrackValueTable()
676 {
677  return
678  "CREATE TABLE IF NOT EXISTS `trackvalue` (\
679  `TrackID` INT NOT NULL ,\
680  `CalculatedValueID` INT NOT NULL ,\
681  PRIMARY KEY (`TrackID`, `CalculatedValueID`) ,\
682  INDEX `FK_TrackValue_TrackID` (`TrackID` ASC) ,\
683  INDEX `CalculatedValueID` (`CalculatedValueID` ASC)\
684  );";
685 }
686 
687 //------------------------------------------------------------------------------
688 
689 //------------------------------------------------------------------------------
690 std::string ImageValueTable()
691 {
692  return
693  "CREATE TABLE IF NOT EXISTS `imagevalue` (\
694  `ImageID` INT NOT NULL ,\
695  `CalculatedValueID` INT NOT NULL ,\
696  PRIMARY KEY (`ImageID`, `CalculatedValueID`),\
697  INDEX `FK_ImageValue_ImageID` (`ImageID` ASC) ,\
698  INDEX `FK_ImageValue_CalculatedValueID` (`CalculatedValueID` ASC)\
699  );";
700 }
701 
702 //------------------------------------------------------------------------------
703 
704 //------------------------------------------------------------------------------
706 {
707  return
708  "CREATE TABLE IF NOT EXISTS `imagingsessionvalue` (\
709  `ImagingSessionID` INT NOT NULL ,\
710  `CalculatedValueID` INT NOT NULL ,\
711  PRIMARY KEY (`ImagingSessionID`, `CalculatedValueID`) ,\
712  INDEX `ImagingSessionID` (`ImagingSessionID` ASC) ,\
713  INDEX `CalculatedValueID` (`CalculatedValueID` ASC)\
714  );";
715 }
716 
717 //------------------------------------------------------------------------------
718 
719 //------------------------------------------------------------------------------
720 std::string ContourValueTable()
721 {
722  return
723  "CREATE TABLE IF NOT EXISTS `contourvalue` (\
724  `ContourID` INT NOT NULL ,\
725  `CalculatedValueID` INT NOT NULL ,\
726  PRIMARY KEY (`ContourID`, `CalculatedValueID`),\
727  INDEX `FK_ContourValue_ContourID` (`ContourID` ASC) ,\
728  INDEX `FK_ContourValue_CalculatedValueID` (`CalculatedValueID` ASC)\
729  );";
730 }
731 
732 //------------------------------------------------------------------------------
733 
734 //------------------------------------------------------------------------------
735 std::string LineageValueTable()
736 {
737  return
738  "CREATE TABLE IF NOT EXISTS `lineagevalue` (\
739  `LineageID` INT NOT NULL ,\
740  `CalculatedValueID` INT NOT NULL ,\
741  PRIMARY KEY (`LineageID`, `CalculatedValueID`),\
742  INDEX `FK_LineageValue_LineageID` (`LineageID` ASC) ,\
743  INDEX `FK_LineageValue_CalculatedValueID` (`CalculatedValueID` ASC)\
744  );";
745 }
746 
747 //------------------------------------------------------------------------------
748 
749 //------------------------------------------------------------------------------
750 std::string ProjectFK()
751 {
752  return
753  "ALTER TABLE `project` ADD\
754  CONSTRAINT `FK_Project_AuthorID`\
755  FOREIGN KEY (`AuthorID`)\
756  REFERENCES `author`(`AuthorID`)\
757  ON DELETE NO ACTION\
758  ON UPDATE NO ACTION\
759  ;";
760 }
761 
762 //------------------------------------------------------------------------------
763 
764 //------------------------------------------------------------------------------
766 {
767  return
768  "ALTER TABLE `imagingsession` ADD\
769  CONSTRAINT `FK_ImagingSession_CoordIDMax`\
770  FOREIGN KEY (`CoordIDMax`)\
771  REFERENCES `coordinate`(`CoordID`)\
772  ON DELETE NO ACTION\
773  ON UPDATE NO ACTION\
774  ;";
775 }
776 
777 //------------------------------------------------------------------------------
778 
779 //------------------------------------------------------------------------------
781 {
782  return
783  "ALTER TABLE `imagingsession` ADD\
784  CONSTRAINT `FK_ImagingSession_CoordIDMin`\
785  FOREIGN KEY (`CoordIDMin`)\
786  REFERENCES `coordinate`(`CoordID`)\
787  ON DELETE NO ACTION\
788  ON UPDATE NO ACTION\
789  ;";
790 }
791 
792 //------------------------------------------------------------------------------
793 
794 //------------------------------------------------------------------------------
796 {
797  return
798  "ALTER TABLE `imagingsession` ADD\
799  CONSTRAINT `FK_ImagingSession_ProjectName`\
800  FOREIGN KEY (`ProjectName`)\
801  REFERENCES `project`(`Name`)\
802  ON DELETE NO ACTION\
803  ON UPDATE NO ACTION\
804  ;";
805 }
806 
807 //------------------------------------------------------------------------------
808 
809 //------------------------------------------------------------------------------
811 {
812  return
813  "ALTER TABLE `imagingsession` ADD\
814  CONSTRAINT `FK_ImagingSession_MicroscopeName`\
815  FOREIGN KEY (`MicroscopeName`)\
816  REFERENCES `microscope`(`Name`)\
817  ON DELETE NO ACTION\
818  ON UPDATE NO ACTION\
819  ;";
820 }
821 
822 //------------------------------------------------------------------------------
823 
824 //------------------------------------------------------------------------------
826 {
827  return
828  "ALTER TABLE `trackfamily` ADD\
829  CONSTRAINT `FK_TrackFamily_TrackIDMother`\
830  FOREIGN KEY (`TrackIDMother`)\
831  REFERENCES `track`(`TrackID`)\
832  ON DELETE NO ACTION\
833  ON UPDATE NO ACTION\
834  ;";
835 }
836 
837 //------------------------------------------------------------------------------
838 
839 //------------------------------------------------------------------------------
841 {
842  return
843  "ALTER TABLE `trackfamily` ADD\
844  CONSTRAINT `FK_TrackFamily_TrackIDDaughter1`\
845  FOREIGN KEY (`TrackIDDaughter1`)\
846  REFERENCES `track`(`TrackID`)\
847  ON DELETE NO ACTION\
848  ON UPDATE NO ACTION\
849  ;";
850 }
851 
852 //------------------------------------------------------------------------------
853 
854 //------------------------------------------------------------------------------
856 {
857  return
858  "ALTER TABLE `trackfamily` ADD\
859  CONSTRAINT `FK_TrackFamily_TrackIDDaughter2`\
860  FOREIGN KEY (`TrackIDDaughter2`)\
861  REFERENCES `track`(`TrackID`)\
862  ON DELETE NO ACTION\
863  ON UPDATE NO ACTION\
864  ;";
865 }
866 
867 //------------------------------------------------------------------------------
868 
869 //------------------------------------------------------------------------------
870 std::string TrackFKColor()
871 {
872  return
873  "ALTER TABLE `track` ADD\
874  CONSTRAINT `FK_Track_ColorID`\
875  FOREIGN KEY (`ColorID`)\
876  REFERENCES `color`(`ColorID`)\
877  ON DELETE NO ACTION\
878  ON UPDATE NO ACTION\
879  ;";
880 }
881 
882 //------------------------------------------------------------------------------
883 
884 //------------------------------------------------------------------------------
885 std::string TrackFKLineage()
886 {
887  return
888  "ALTER TABLE `track` ADD\
889  CONSTRAINT `FK_Track_LineageID`\
890  FOREIGN KEY (`LineageID`)\
891  REFERENCES `lineage`(`LineageID`)\
892  ON DELETE NO ACTION\
893  ON UPDATE NO ACTION\
894  ;";
895 }
896 
897 //------------------------------------------------------------------------------
898 
899 //------------------------------------------------------------------------------
900 std::string TrackFKCoordIDMax()
901 {
902  return
903  "ALTER TABLE `track` ADD\
904  CONSTRAINT `FK_Track_CoordIDMax`\
905  FOREIGN KEY (`CoordIDMax`)\
906  REFERENCES `coordinate`(`CoordID`)\
907  ON DELETE NO ACTION\
908  ON UPDATE NO ACTION\
909  ;";
910 }
911 
912 //------------------------------------------------------------------------------
913 
914 //------------------------------------------------------------------------------
915 std::string TrackFKCoordIDMin()
916 {
917  return
918  "ALTER TABLE `track` ADD\
919  CONSTRAINT `FK_Track_CoordIDMin`\
920  FOREIGN KEY (`CoordIDMin`)\
921  REFERENCES `coordinate`(`CoordID`)\
922  ON DELETE NO ACTION\
923  ON UPDATE NO ACTION\
924  ;";
925 }
926 
927 //------------------------------------------------------------------------------
928 
929 //------------------------------------------------------------------------------
930 std::string TrackFKTrackFamily()
931 {
932  return
933  "ALTER TABLE `track` ADD\
934  CONSTRAINT `FK_Track_TrackFamilyID`\
935  FOREIGN KEY (`TrackFamilyID`)\
936  REFERENCES `trackfamily`(`TrackFamilyID`)\
937  ON DELETE NO ACTION\
938  ON UPDATE NO ACTION\
939  ;";
940 }
941 
942 //------------------------------------------------------------------------------
943 
944 //------------------------------------------------------------------------------
946 {
947  return
948  "ALTER TABLE `track` ADD\
949  CONSTRAINT `FK_Track_ImagingSessionID`\
950  FOREIGN KEY (`ImagingSessionID`)\
951  REFERENCES `imagingsession`(`ImagingSessionID`)\
952  ON DELETE NO ACTION\
953  ON UPDATE NO ACTION\
954  ;";
955 }
956 
957 //------------------------------------------------------------------------------
958 
959 //------------------------------------------------------------------------------
960 std::string MeshFKCellType()
961 {
962  return
963  "ALTER TABLE `mesh` ADD\
964  CONSTRAINT `FK_Mesh_CellTypeID`\
965  FOREIGN KEY (`CellTypeID`)\
966  REFERENCES `celltype`(`CellTypeID`)\
967  ON DELETE NO ACTION\
968  ON UPDATE NO ACTION\
969  ;";
970 }
971 
972 //------------------------------------------------------------------------------
973 
974 //------------------------------------------------------------------------------
975 std::string MeshFKSubCellType()
976 {
977  return
978  "ALTER TABLE `mesh` ADD\
979  CONSTRAINT `FK_Mesh_SubCellularID`\
980  FOREIGN KEY (`SubCellularID`)\
981  REFERENCES `subcellulartype`(`SubCellularID`)\
982  ON DELETE NO ACTION\
983  ON UPDATE NO ACTION\
984  ;";
985 }
986 
987 //------------------------------------------------------------------------------
988 
989 //------------------------------------------------------------------------------
990 std::string MeshFKCoordIDMax()
991 {
992  return
993  "ALTER TABLE `mesh` ADD\
994  CONSTRAINT `FK_Mesh_CoordIDMax`\
995  FOREIGN KEY (`CoordIDMax`)\
996  REFERENCES `coordinate`(`CoordID`)\
997  ON DELETE NO ACTION\
998  ON UPDATE NO ACTION\
999  ;";
1000 }
1001 
1002 //------------------------------------------------------------------------------
1003 
1004 //------------------------------------------------------------------------------
1005 std::string MeshFKCoordIDMin()
1006 {
1007  return
1008  "ALTER TABLE `mesh` ADD\
1009  CONSTRAINT `FK_Mesh_CoordIDMin`\
1010  FOREIGN KEY (`CoordIDMin`)\
1011  REFERENCES `coordinate`(`CoordID`)\
1012  ON DELETE NO ACTION\
1013  ON UPDATE NO ACTION\
1014  ;";
1015 }
1016 
1017 //------------------------------------------------------------------------------
1018 
1019 //------------------------------------------------------------------------------
1020 std::string MeshFKColor()
1021 {
1022  return
1023  "ALTER TABLE `mesh` ADD\
1024  CONSTRAINT `FK_Mesh_ColorID`\
1025  FOREIGN KEY (`ColorID`)\
1026  REFERENCES `color`(`ColorID`)\
1027  ON DELETE NO ACTION\
1028  ON UPDATE NO ACTION\
1029  ;";
1030 }
1031 
1032 //------------------------------------------------------------------------------
1033 
1034 //------------------------------------------------------------------------------
1035 std::string MeshFKTrackID()
1036 {
1037  return
1038  "ALTER TABLE `mesh` ADD\
1039  CONSTRAINT `FK_Mesh_TrackID`\
1040  FOREIGN KEY (`TrackID`)\
1041  REFERENCES `track`(`TrackID`)\
1042  ON DELETE NO ACTION\
1043  ON UPDATE NO ACTION\
1044  ;";
1045 }
1046 
1047 //------------------------------------------------------------------------------
1048 
1049 //------------------------------------------------------------------------------
1051 {
1052  return
1053  "ALTER TABLE `mesh` ADD\
1054  CONSTRAINT `FK_Mesh_ImagingSessionID`\
1055  FOREIGN KEY (`ImagingSessionID`)\
1056  REFERENCES `imagingSession`(`ImagingSessionID`)\
1057  ON DELETE NO ACTION\
1058  ON UPDATE NO ACTION\
1059  ;";
1060 }
1061 
1062 //------------------------------------------------------------------------------
1063 
1064 //------------------------------------------------------------------------------
1065 std::string ContourFKMesh()
1066 {
1067  return
1068  "ALTER TABLE `contour` ADD\
1069  CONSTRAINT `FK_Contour_MeshID`\
1070  FOREIGN KEY (`MeshID`)\
1071  REFERENCES `mesh`(`MeshID`)\
1072  ON DELETE NO ACTION\
1073  ON UPDATE NO ACTION\
1074  ;";
1075 }
1076 
1077 //------------------------------------------------------------------------------
1078 
1079 //------------------------------------------------------------------------------
1080 std::string ContourFKCoordIDMax()
1081 {
1082  return
1083  "ALTER TABLE `contour` ADD\
1084  CONSTRAINT `FK_Contour_CoordIDMax`\
1085  FOREIGN KEY (`CoordIDMax`)\
1086  REFERENCES `coordinate`(`CoordID`)\
1087  ON DELETE NO ACTION\
1088  ON UPDATE NO ACTION\
1089  ;";
1090 }
1091 
1092 //------------------------------------------------------------------------------
1093 
1094 //------------------------------------------------------------------------------
1095 std::string ContourFKCoordIDMin()
1096 {
1097  return
1098  "ALTER TABLE `contour` ADD\
1099  CONSTRAINT `FK_Contour_CoordIDMin`\
1100  FOREIGN KEY (`CoordIDMin`)\
1101  REFERENCES `coordinate`(`CoordID`)\
1102  ON DELETE NO ACTION\
1103  ON UPDATE NO ACTION\
1104  ;";
1105 }
1106 
1107 //------------------------------------------------------------------------------
1108 
1109 //------------------------------------------------------------------------------
1111 {
1112  return
1113  "ALTER TABLE `contour` ADD\
1114  CONSTRAINT `FK_Contour_ImagingSessionID`\
1115  FOREIGN KEY (`ImagingSessionID`)\
1116  REFERENCES `imagingsession`(`ImagingSessionID`)\
1117  ON DELETE NO ACTION\
1118  ON UPDATE NO ACTION\
1119  ;";
1120 }
1121 
1122 //------------------------------------------------------------------------------
1123 
1124 //------------------------------------------------------------------------------
1125 std::string ChannelFKColor()
1126 {
1127  return
1128  "ALTER TABLE `channel` ADD\
1129  CONSTRAINT `FK_Channel_ColorID`\
1130  FOREIGN KEY (`ColorID`)\
1131  REFERENCES `color`(`ColorID`)\
1132  ON DELETE NO ACTION\
1133  ON UPDATE NO ACTION\
1134  ;";
1135 }
1136 
1137 //------------------------------------------------------------------------------
1138 
1139 //------------------------------------------------------------------------------
1141 {
1142  return
1143  "ALTER TABLE `channel` ADD\
1144  CONSTRAINT `FK_Channel_ImagingSessionID`\
1145  FOREIGN KEY (`ImagingSessionID`)\
1146  REFERENCES `imagingsession`(`ImagingSessionID`)\
1147  ON DELETE NO ACTION\
1148  ON UPDATE NO ACTION\
1149  ;";
1150 }
1151 
1152 //------------------------------------------------------------------------------
1153 
1154 //------------------------------------------------------------------------------
1156 {
1157  return
1158  "ALTER TABLE `image` ADD\
1159  CONSTRAINT `FK_Image_ImagingSessionID`\
1160  FOREIGN KEY (`ImagingSessionID`)\
1161  REFERENCES `imagingsession`(`ImagingSessionID`)\
1162  ON DELETE NO ACTION\
1163  ON UPDATE NO ACTION\
1164  ;";
1165 }
1166 
1167 //------------------------------------------------------------------------------
1168 
1169 //------------------------------------------------------------------------------
1170 std::string ImageFKCoordIDMin()
1171 {
1172  return
1173  "ALTER TABLE `image` ADD\
1174  CONSTRAINT `FK_Image_CoordIDMin`\
1175  FOREIGN KEY (`CoordIDMin`)\
1176  REFERENCES `coordinate`(`CoordID`)\
1177  ON DELETE NO ACTION\
1178  ON UPDATE NO ACTION\
1179  ;";
1180 }
1181 
1182 //------------------------------------------------------------------------------
1183 
1184 //------------------------------------------------------------------------------
1185 std::string ImageFKChannel()
1186 {
1187  return
1188  "ALTER TABLE `image` ADD\
1189  CONSTRAINT `FK_Image_ChannelID`\
1190  FOREIGN KEY (`ChannelID`)\
1191  REFERENCES `channel`(`ChannelID`)\
1192  ON DELETE NO ACTION\
1193  ON UPDATE NO ACTION\
1194  ;";
1195 }
1196 
1197 //------------------------------------------------------------------------------
1198 
1199 //------------------------------------------------------------------------------
1200 std::string LineageFKCoordIDMax()
1201 {
1202  return
1203  "ALTER TABLE `lineage` ADD\
1204  CONSTRAINT `FK_Lineage_CoordIDMax`\
1205  FOREIGN KEY (`CoordIDMax`)\
1206  REFERENCES `coordinate`(`CoordID`)\
1207  ON DELETE NO ACTION\
1208  ON UPDATE NO ACTION\
1209  ;";
1210 }
1211 
1212 //------------------------------------------------------------------------------
1213 
1214 //------------------------------------------------------------------------------
1215 std::string LineageFKCoordIDMin()
1216 {
1217  return
1218  "ALTER TABLE `lineage` ADD\
1219  CONSTRAINT `FK_Lineage_CoordIDMin`\
1220  FOREIGN KEY (`CoordIDMin`)\
1221  REFERENCES `coordinate`(`CoordID`)\
1222  ON DELETE NO ACTION\
1223  ON UPDATE NO ACTION\
1224  ;";
1225 }
1226 
1227 //------------------------------------------------------------------------------
1228 
1229 //------------------------------------------------------------------------------
1230 std::string LineageFKColor()
1231 {
1232  return
1233  "ALTER TABLE `lineage` ADD\
1234  CONSTRAINT `FK_Lineage_ColorID`\
1235  FOREIGN KEY (`ColorID`)\
1236  REFERENCES `color`(`ColorID`)\
1237  ON DELETE NO ACTION\
1238  ON UPDATE NO ACTION\
1239  ;";
1240 }
1241 
1242 //------------------------------------------------------------------------------
1243 
1244 //------------------------------------------------------------------------------
1245 std::string LineageFKTrackRoot()
1246 {
1247  return
1248  "ALTER TABLE `lineage` ADD\
1249  CONSTRAINT `FK_Lineage_TrackIDRoot`\
1250  FOREIGN KEY (`TrackIDRoot`)\
1251  REFERENCES `track`(`TrackID`)\
1252  ON DELETE NO ACTION\
1253  ON UPDATE NO ACTION\
1254  ;";
1255 }
1256 
1257 //------------------------------------------------------------------------------
1258 
1259 //------------------------------------------------------------------------------
1261 {
1262  return
1263  "ALTER TABLE `lineage` ADD\
1264  CONSTRAINT `FK_Lineage_ImagingSessionID`\
1265  FOREIGN KEY (`ImagingSessionID`)\
1266  REFERENCES `imagingsession`(`ImagingSessionID`)\
1267  ON DELETE NO ACTION\
1268  ON UPDATE NO ACTION\
1269  ;";
1270 }
1271 
1272 //------------------------------------------------------------------------------
1273 
1274 //------------------------------------------------------------------------------
1276 {
1277  return
1278  "ALTER TABLE `bookmark` ADD\
1279  CONSTRAINT `FK_Bookmark_ImagingSessionID`\
1280  FOREIGN KEY (`ImagingSessionID`)\
1281  REFERENCES `imagingsession`(`ImagingSessionID`)\
1282  ON DELETE NO ACTION\
1283  ON UPDATE NO ACTION\
1284  ;";
1285 }
1286 
1287 //------------------------------------------------------------------------------
1288 
1289 //------------------------------------------------------------------------------
1290 std::string BookmarkFKCoord()
1291 {
1292  return
1293  "ALTER TABLE `bookmark` ADD\
1294  CONSTRAINT `FK_Bookmark_CoordID`\
1295  FOREIGN KEY (`CoordID`)\
1296  REFERENCES `coordinate`(`CoordID`)\
1297  ON DELETE NO ACTION\
1298  ON UPDATE NO ACTION\
1299  ;";
1300 }
1301 
1302 //------------------------------------------------------------------------------
1303 
1304 //------------------------------------------------------------------------------
1305 std::string IntensityFKMesh()
1306 {
1307  return
1308  "ALTER TABLE `intensity` ADD\
1309  CONSTRAINT `FK_Intensity_MeshID`\
1310  FOREIGN KEY (`MeshID`)\
1311  REFERENCES `mesh`(`MeshID`)\
1312  ON DELETE NO ACTION\
1313  ON UPDATE NO ACTION\
1314  ;";
1315 }
1316 
1317 //------------------------------------------------------------------------------
1318 
1319 //------------------------------------------------------------------------------
1320 std::string IntensityFKChannel()
1321 {
1322  return
1323  "ALTER TABLE `intensity` ADD\
1324  CONSTRAINT `FK_Intensity_ChannelID`\
1325  FOREIGN KEY (`ChannelID`)\
1326  REFERENCES `channel`(`ChannelID`)\
1327  ON DELETE NO ACTION\
1328  ON UPDATE NO ACTION\
1329  ;";
1330 }
1331 
1332 //------------------------------------------------------------------------------
1333 
1334 //------------------------------------------------------------------------------
1336 {
1337  return
1338  "ALTER TABLE `calculatedvalue` ADD\
1339  CONSTRAINT `FK_CalculatedValue_ValueTypeID`\
1340  FOREIGN KEY (`ValueTypeID`)\
1341  REFERENCES `valuetype`(`ValueTypeID`)\
1342  ON DELETE NO ACTION\
1343  ON UPDATE NO ACTION\
1344  ;";
1345 }
1346 
1347 //------------------------------------------------------------------------------
1348 
1349 //------------------------------------------------------------------------------
1351 {
1352  return
1353  "ALTER TABLE `valuepervectorcoord` ADD\
1354  CONSTRAINT `FK_ValuePerVectorCoord_CalculatedValueID`\
1355  FOREIGN KEY (`CalculatedValueID`)\
1356  REFERENCES `calculatedvalue`(`CalculatedValueID`)\
1357  ON DELETE NO ACTION\
1358  ON UPDATE NO ACTION\
1359  ;";
1360 }
1361 
1362 //------------------------------------------------------------------------------
1363 
1364 //------------------------------------------------------------------------------
1365 std::string MeshValueFKMesh()
1366 {
1367  return
1368  "ALTER TABLE `meshvalue` ADD\
1369  CONSTRAINT `FK_MeshValue_MeshID`\
1370  FOREIGN KEY (`MeshID`)\
1371  REFERENCES `mesh`(`MeshID`)\
1372  ON DELETE NO ACTION\
1373  ON UPDATE NO ACTION\
1374  ;";
1375 }
1376 
1377 //------------------------------------------------------------------------------
1378 
1379 //------------------------------------------------------------------------------
1381 {
1382  return
1383  "ALTER TABLE `meshvalue` ADD\
1384  CONSTRAINT `FK_MeshValue_CalculatedValueID`\
1385  FOREIGN KEY (`CalculatedValueID`)\
1386  REFERENCES `calculatedvalue`(`CalculatedValueID`)\
1387  ON DELETE NO ACTION\
1388  ON UPDATE NO ACTION\
1389  ;";
1390 }
1391 
1392 //------------------------------------------------------------------------------
1393 
1394 //------------------------------------------------------------------------------
1395 std::string TrackValueFKTrack()
1396 {
1397  return
1398  "ALTER TABLE `trackvalue` ADD\
1399  CONSTRAINT `FK_TrackValue_TrackID`\
1400  FOREIGN KEY (`TrackID`)\
1401  REFERENCES `track`(`TrackID`)\
1402  ON DELETE NO ACTION\
1403  ON UPDATE NO ACTION\
1404  ;";
1405 }
1406 
1407 //------------------------------------------------------------------------------
1408 
1409 //------------------------------------------------------------------------------
1411 {
1412  return
1413  "ALTER TABLE `trackvalue` ADD\
1414  CONSTRAINT `FK_TrackValue_CalculatedValueID`\
1415  FOREIGN KEY (`CalculatedValueID`)\
1416  REFERENCES `calculatedvalue`(`CalculatedValueID`)\
1417  ON DELETE NO ACTION\
1418  ON UPDATE NO ACTION\
1419  ;";
1420 }
1421 
1422 //------------------------------------------------------------------------------
1423 
1424 //------------------------------------------------------------------------------
1425 std::string ImageValueFKImage()
1426 {
1427  return
1428  "ALTER TABLE `imagevalue` ADD\
1429  CONSTRAINT `FK_ImageValue_ImageID`\
1430  FOREIGN KEY (`ImageID`)\
1431  REFERENCES `image`(`ImageID`)\
1432  ON DELETE NO ACTION\
1433  ON UPDATE NO ACTION\
1434  ;";
1435 }
1436 
1437 //------------------------------------------------------------------------------
1438 
1439 //------------------------------------------------------------------------------
1441 {
1442  return
1443  "ALTER TABLE `imagevalue` ADD\
1444  CONSTRAINT `FK_ImageValue_CalculatedValueID`\
1445  FOREIGN KEY (`CalculatedValueID`)\
1446  REFERENCES `calculatedvalue`(`CalculatedValueID`)\
1447  ON DELETE NO ACTION\
1448  ON UPDATE NO ACTION\
1449  ;";
1450 }
1451 
1452 //------------------------------------------------------------------------------
1453 
1454 //------------------------------------------------------------------------------
1456 {
1457  return
1458  "ALTER TABLE `imagingsessionvalue` ADD\
1459  CONSTRAINT `FK_ImagingSessionValue_ImagingSessionID`\
1460  FOREIGN KEY (`ImagingSessionID`)\
1461  REFERENCES `imagingsession`(`ImagingSessionID`)\
1462  ON DELETE NO ACTION\
1463  ON UPDATE NO ACTION\
1464  ;";
1465 }
1466 
1467 //------------------------------------------------------------------------------
1468 
1469 //------------------------------------------------------------------------------
1471 {
1472  return
1473  "ALTER TABLE `imagingsessionvalue` ADD\
1474  CONSTRAINT `FK_ImagingSessionValue_CalculatedValueID`\
1475  FOREIGN KEY (`CalculatedValueID`)\
1476  REFERENCES `calculatedvalue`(`CalculatedValueID`)\
1477  ON DELETE NO ACTION\
1478  ON UPDATE NO ACTION\
1479  ;";
1480 }
1481 
1482 //------------------------------------------------------------------------------
1483 
1484 //------------------------------------------------------------------------------
1486 {
1487  return
1488  "ALTER TABLE `contourvalue` ADD\
1489  CONSTRAINT `FK_ContourValue_ContourID`\
1490  FOREIGN KEY (`ContourID`)\
1491  REFERENCES `contour`(`ContourID`)\
1492  ON DELETE NO ACTION\
1493  ON UPDATE NO ACTION\
1494  ;";
1495 }
1496 
1497 //------------------------------------------------------------------------------
1498 
1499 //------------------------------------------------------------------------------
1501 {
1502  return
1503  "ALTER TABLE `contourvalue` ADD\
1504  CONSTRAINT `FK_ContourValue_CalculatedValueID`\
1505  FOREIGN KEY (`CalculatedValueID`)\
1506  REFERENCES `calculatedvalue`(`CalculatedValueID`)\
1507  ON DELETE NO ACTION\
1508  ON UPDATE NO ACTION\
1509  ;";
1510 }
1511 
1512 //------------------------------------------------------------------------------
1513 
1514 //------------------------------------------------------------------------------
1516 {
1517  return
1518  "ALTER TABLE `lineagevalue` ADD\
1519  CONSTRAINT `FK_LineageValue_LineageID`\
1520  FOREIGN KEY (`LineageID`)\
1521  REFERENCES `lineage`(`LineageID`)\
1522  ON DELETE NO ACTION\
1523  ON UPDATE NO ACTION\
1524  ;";
1525 }
1526 
1527 //------------------------------------------------------------------------------
1528 
1529 //------------------------------------------------------------------------------
1531 {
1532  return
1533  "ALTER TABLE `lineagevalue` ADD\
1534  CONSTRAINT `FK_LineageValue_CalculatedValueID`\
1535  FOREIGN KEY (`CalculatedValueID`)\
1536  REFERENCES `calculatedvalue`(`CalculatedValueID`)\
1537  ON DELETE NO ACTION\
1538  ON UPDATE NO ACTION\
1539  ;";
1540 }
std::string ImageFKCoordIDMin()
std::string LineageValueFKCalculatedValue()
std::string TrackValueFKTrack()
std::string MeshTable()
std::string LineageValueTable()
std::string ContourValueTable()
std::string BookmarkTable()
std::string ImagingSessionFKProjectName()
std::string ChannelFKImagingSession()
std::string CoordinateTable()
std::string ValuePerVectorCoordTable()
std::string SubCellularTypeTable()
std::string ContourValueFKCalculatedValue()
std::string IntensityFKChannel()
std::string ColorTableScript()
void CreateTables(vtkMySQLDatabase *DataBaseConnector)
std::string ValueperVectorCoordFKCalculatedValue()
std::string ProjectTable()
std::string ChannelTable()
std::string BookmarkFKImagingSession()
std::string TrackFKColor()
std::string ImagingSessionFKCoordIDMax()
std::string ImageValueFKCalculatedValue()
std::string ImagingSessionValueFKCalculatedValue()
std::string LineageTable()
std::string ImageValueFKImage()
std::string MeshFKImagingSession()
std::string ImageFKImagingSession()
std::string CalculatedValueFKValueType()
std::string AuthorTable()
bool CreateDataBase(vtkMySQLDatabase *DataBaseConnector, std::string DBName)
std::string ContourFKCoordIDMin()
std::string ImagingSessionFKCoordIDMin()
std::string MeshFKTrackID()
std::string ContourValueFKContour()
std::string ContourFKCoordIDMax()
std::string LineageFKColor()
std::string ImagingSessionFKMicroscopeName()
std::string ImageTable()
std::string MeshFKSubCellType()
std::string MeshFKCoordIDMax()
std::string LineageFKCoordIDMin()
std::string TrackFKCoordIDMax()
std::string LineageFKTrackRoot()
std::string LineageValueFKLineage()
std::string MeshFKCoordIDMin()
std::string MeshValueFKMesh()
std::string BookmarkFKCoord()
std::string ChannelFKColor()
std::string ProjectFK()
std::string CalculatedValueTable()
void CreateForeignKeys(vtkMySQLDatabase *DataBaseConnector)
std::string ImagingSessionValueFKImagingSession()
std::string TrackFamilyFKTrackIDDaughter1()
std::pair< bool, vtkMySQLDatabase * > ConnectToDatabase(std::string ServerName, std::string login, std::string Password, std::string DBName)
std::string IntensityTable()
std::string CellTypeTable()
std::string ImagingSessionTable()
std::string TrackFamilyFKTrackIDDaughter2()
std::string ImageFKChannel()
bool DoesTableExist(vtkMySQLDatabase *DatabaseConnector, std::string TableName)
std::string MeshFKCellType()
std::string ImageValueTable()
std::string TrackFKTrackFamily()
std::string TrackFKCoordIDMin()
std::pair< bool, vtkMySQLDatabase * > ConnectToServer(std::string ServerName, std::string login, std::string Password)
std::string MeshFKColor()
void Query(vtkMySQLDatabase *DataBaseConnector, std::string queryScript)
std::string TrackFamilyTable()
std::string LineageFKImagingSession()
std::string ContourFKImagingSession()
std::string ValueTypeTable()
std::string ContourFKMesh()
std::string MeshValueTable()
std::string TrackFamilyFKTrackIDMother()
std::string ContourTable()
std::string TrackFKImagingSession()
std::string LineageFKCoordIDMax()
std::string MeshValueFKCalculatedValue()
std::string ImagingSessionValueTable()
std::string TrackValueFKCalculatedValue()
bool CreateGoFigureDataBase(std::string ServerName, std::string login, std::string Password, std::string DBName)
bool DoesDatabaseExit(vtkMySQLDatabase *DataBaseConnector, std::string DBName)
bool IsDatabaseOfGoFigureType(vtkMySQLDatabase *DatabaseConnector)
std::string TrackValueTable()
std::string IntensityFKMesh()
std::string TrackFKLineage()
std::string TrackTable()
std::string MicroscopeTable()