docs: public boolean createIfNotFoundError(DBException ex)
          throws DBException
      {
          if (ex.getErrorCode() == DBConstants.FILE_NOT_FOUND)
              if (this.getRecord() != null)
                  if ((this.getRecord().getOpenMode() & DBConstants.OPEN_DONT_CREATE) == 0)
          {
              boolean loadInitialData = false;
              boolean useTemporaryFilename = false;
              if (this.getDatabase() != null)
              {
                  if (DBConstants.TRUE.equalsIgnoreCase(this.getDatabase().getProperty(DBConstants.LOAD_INITIAL_DATA)))
                      if ((this.getDatabase().getDatabaseOwner() == null) || (!DBConstants.FALSE.equalsIgnoreCase(this.getDatabase().getDatabaseOwner().getProperty(DBConstants.LOAD_INITIAL_DATA))))   // Global switch
                          loadInitialData = true;
                  if (DBConstants.TRUE.equalsIgnoreCase(this.getDatabase().getProperty(SQLParams.RENAME_TABLE_SUPPORT)))
                      useTemporaryFilename = true;
              }
  
              if (this.getRecord().isQueryRecord())
              {	// If this is a query, try to create all the tables of the query
              	for (int i = 0; i < this.getRecord().getRecordlistCount(); i++)
              	{
              		Record record = this.getRecord().getRecordlistAt(i);
              		try {	// TODO - I Should load into a temp table (see below)
              		if (!record.getTable().create())
              			return false;
              		} catch (DBException e) {
              			continue;	// Ignore if it already exists
              		}
              		if (loadInitialData)
                      {
                      	RecordOwner recordOwner = record.getRecordOwner();
                      	if (recordOwner == null)
                      		record.setRecordOwner(this.getRecord().getRecordOwner());
                          record.getTable().loadInitialData();
                      	if (recordOwner == null)
                      		record.setRecordOwner(recordOwner);
                      }
              	}
                  return true;   // Success!
              }
              String tableName = null;
              boolean bSuccess = true;
              try {
                  if (useTemporaryFilename)
                      if (loadInitialData)
                  {
                      tableName = this.getRecord().getTableNames(false);
                      this.getRecord().setTableNames(tableName + TEMP_SUFFIX);
                  }
                  bSuccess = this.create();
                  if (bSuccess)
                      if (loadInitialData)
                  {
                      this.loadInitialData();
                      if (useTemporaryFilename)
                      	this.renameTable(tableName + TEMP_SUFFIX, tableName);
                  }
              } catch (DBException e) {
                  // Exception usually means another thread is creating and loading the data for this table... just wait for it to finish.
                  if (tableName != null)
                      this.getRecord().setTableNames(tableName);
                  int oldOpenMode = this.getRecord().getOpenMode();
                  this.getRecord().setOpenMode(oldOpenMode | DBConstants.OPEN_DONT_CREATE);
                  int oldKeyArea = this.getRecord().getDefaultOrder();
                  int i = 0;
                  for (; i < 120; i++)    // 120 Seconds max.
                  {
                      try {
                          this.getRecord().setKeyArea(0);
                          this.doSeek(DBConstants.EQUALS);  // This will throw an exception if there is no table
                          break;  // Normal open = done loadingInitialData.
                      } catch (DBException e2) {
                          // Ignore this error, continue until the table exists
                      } finally {
                          this.getRecord().setKeyArea(oldKeyArea);                        
                      }
                      synchronized(this)
                      {
                          try {
                              this.wait(1000);
                          } catch (InterruptedException e1) {
                              e1.printStackTrace();
                          }
                      }
                  }
                  if (i == 20)
                  {
                  	oldOpenMode = oldOpenMode | DBConstants.OPEN_DONT_CREATE;	// Give up
                      e.printStackTrace();
                  }
                  this.getRecord().setOpenMode(oldOpenMode);
              } finally {
                  if (tableName != null)
                      this.getRecord().setTableNames(tableName);
              }
              return bSuccess;
          }
          return false;
      }