box.sql
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:2k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. --  ****************** test built-in type box ********************
  2. --
  3. -- box logic
  4. --      o
  5. -- 3   o--|X
  6. --   |  o|
  7. -- 2 +-+-+ |
  8. -- | | | |
  9. -- 1 | o-+-o
  10. -- |   |
  11. -- 0 +---+
  12. --
  13. -- 0 1 2 3
  14. --
  15. -- boxes are specified by two points, given by four floats x1,y1,x2,y2
  16. CREATE TABLE BOX_TBL (f1 box);
  17. INSERT INTO BOX_TBL (f1) VALUES ('(2.0,2.0,0.0,0.0)');
  18. INSERT INTO BOX_TBL (f1) VALUES ('(1.0,1.0,3.0,3.0)');
  19. -- degenerate cases where the box is a line or a point 
  20. -- note that lines and points boxes all have zero area 
  21. INSERT INTO BOX_TBL (f1) VALUES ('(2.5, 2.5, 2.5,3.5)');
  22. INSERT INTO BOX_TBL (f1) VALUES ('(3.0, 3.0,3.0,3.0)');
  23. -- badly formatted box inputs 
  24. INSERT INTO BOX_TBL (f1) VALUES ('(2.3, 4.5)');
  25. INSERT INTO BOX_TBL (f1) VALUES ('asdfasdf(ad');
  26. SELECT '' AS four, BOX_TBL.*;
  27. SELECT '' AS four, b.*, box_area(b.f1) as barea
  28.    FROM BOX_TBL b;
  29. -- overlap 
  30. SELECT '' AS three, b.f1
  31.    FROM BOX_TBL b  
  32.    WHERE b.f1 && '(2.5,2.5,1.0,1.0)'::box;
  33. -- left-or-overlap (x only) 
  34. SELECT '' AS two, b1.*
  35.    FROM BOX_TBL b1
  36.    WHERE b1.f1 &< '(2.0,2.0,2.5,2.5)'::box;
  37. -- right-or-overlap (x only) 
  38. SELECT '' AS two, b1.*
  39.    FROM BOX_TBL b1
  40.    WHERE b1.f1 &> '(2.0,2.0,2.5,2.5)'::box;
  41. -- left of 
  42. SELECT '' AS two, b.f1
  43.    FROM BOX_TBL b
  44.    WHERE b.f1 << '(3.0,3.0,5.0,5.0)'::box;
  45. -- area <= 
  46. SELECT '' AS four, b.f1
  47.    FROM BOX_TBL b
  48.    WHERE b.f1 <= '(3.0,3.0,5.0,5.0)'::box;
  49. -- area < 
  50. SELECT '' AS two, b.f1
  51.    FROM BOX_TBL b
  52.    WHERE b.f1 < '(3.0,3.0,5.0,5.0)'::box;
  53. -- area = 
  54. SELECT '' AS two, b.f1
  55.    FROM BOX_TBL b
  56.    WHERE b.f1 = '(3.0,3.0,5.0,5.0)'::box;
  57. -- area > 
  58. SELECT '' AS two, b.f1
  59.    FROM BOX_TBL b -- zero area 
  60.    WHERE b.f1 > '(3.5,3.0,4.5,3.0)'::box;
  61. -- area >= 
  62. SELECT '' AS four, b.f1
  63.    FROM BOX_TBL b -- zero area 
  64.    WHERE b.f1 >= '(3.5,3.0,4.5,3.0)'::box;
  65. -- right of 
  66. SELECT '' AS two, b.f1
  67.    FROM BOX_TBL b
  68.    WHERE '(3.0,3.0,5.0,5.0)'::box >> b.f1;
  69. -- contained in 
  70. SELECT '' AS three, b.f1
  71.    FROM BOX_TBL b
  72.    WHERE b.f1 @ '(0,0,3,3)'::box;
  73. -- contains 
  74. SELECT '' AS three, b.f1
  75.    FROM BOX_TBL b
  76.    WHERE '(0,0,3,3)'::box ~ b.f1;
  77. -- box equality 
  78. SELECT '' AS one, b.f1
  79.    FROM BOX_TBL b
  80.    WHERE '(1,1,3,3)'::box ~= b.f1;
  81. -- center of box, left unary operator 
  82. SELECT '' AS four, @@(b1.f1) AS p
  83.    FROM BOX_TBL b1;
  84. -- wholly-contained 
  85. SELECT '' AS one, b1.*, b2.*
  86.    FROM BOX_TBL b1, BOX_TBL b2 
  87.    WHERE b1.f1 ~ b2.f1 and not b1.f1 ~= b2.f1;
  88. SELECT '' AS four, height(f1), width(f1) FROM BOX_TBL;