/**
  * Set the base directory of persistent databases, unless the database is in the user home folder
  * (~).
  *
  * @param dir the new base directory
  */
 public void setBaseDir(String dir) {
   if (persistent) {
     String absDir = FileUtils.unwrap(FileUtils.toRealPath(dir));
     boolean absolute = FileUtils.isAbsolute(name);
     String n;
     String prefix = null;
     if (dir.endsWith(SysProperties.FILE_SEPARATOR)) {
       dir = dir.substring(0, dir.length() - 1);
     }
     if (absolute) {
       n = name;
     } else {
       n = FileUtils.unwrap(name);
       prefix = name.substring(0, name.length() - n.length()); // 比如nio:./test,此时prefix就是"nio:"
       n = dir + SysProperties.FILE_SEPARATOR + n;
     }
     String normalizedName = FileUtils.unwrap(FileUtils.toRealPath(n));
     if (normalizedName.equals(absDir) || !normalizedName.startsWith(absDir)) {
       // database name matches the baseDir or
       // database name is clearly outside of the baseDir
       throw DbException.get(ErrorCode.IO_EXCEPTION_1, normalizedName + " outside " + absDir);
     }
     if (absDir.endsWith("/") || absDir.endsWith("\\")) {
       // no further checks are needed for C:/ and similar
     } else if (normalizedName.charAt(absDir.length()) != '/') {
       // database must be within the directory
       // (with baseDir=/test, the database name must not be
       // /test2/x and not /test2)
       throw DbException.get(ErrorCode.IO_EXCEPTION_1, normalizedName + " outside " + absDir);
     }
     if (!absolute) {
       // 可能是个bug,应该用absDir替换dir,
       // 否则当设置了baseDir时,还是不能用没有jdbc:h2:mydb这样的url,
       // 但是在getName()中还是抛错,并且错误信息提示设置baseDir
       name = prefix + dir + SysProperties.FILE_SEPARATOR + FileUtils.unwrap(name);
     }
   }
 }