Advertisement
lignite0

class QueryTest

Aug 28th, 2015
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 56.26 KB | None | 0 0
  1. <?php
  2.  
  3. use Lignite0\ORM\Query;
  4.  
  5. class QueryTest extends \PHPUnit_Framework_TestCase
  6. {
  7.     public static $queryClassname = 'Lignite0\\ORM\\Query';
  8.  
  9.     public function testException()
  10.     {
  11.         $this->setExpectedException('InvalidArgumentException');
  12.         throw new \InvalidArgumentException();
  13.     }
  14.  
  15.     public function testCreate()
  16.     {
  17.         $this->assertInstanceOf(
  18.             self::$queryClassname,
  19.             Query::create()
  20.         );
  21.  
  22.         $this->assertEquals(
  23.             (string)Query::create(),
  24.             'SELECT *'
  25.         );
  26.     }
  27.  
  28.     public function testSelectAll()
  29.     {
  30.         $this->assertInstanceOf(
  31.             self::$queryClassname,
  32.             Query::create()->selectAll()
  33.         );
  34.  
  35.         $this->assertEquals(
  36.             (string)Query::create()->selectAll(),
  37.             'SELECT *'
  38.         );
  39.     }
  40.  
  41.     public function testSelectFields()
  42.     {
  43.         $this->assertInstanceOf(
  44.             self::$queryClassname,
  45.             Query::create()->selectFields(['userID'])
  46.         );
  47.  
  48.         $this->assertEquals(
  49.             (string)Query::create()->selectFields(['userID']),
  50.             'SELECT userID'
  51.         );
  52.  
  53.         $this->assertEquals(
  54.             (string)Query::create()->selectFields(['user' => 'userID']),
  55.             'SELECT userID AS user'
  56.         );
  57.  
  58.         $this->assertEquals(
  59.             (string)Query::create()->selectFields(['user' => 'userID', 'group' => 'GroupName']),
  60.             'SELECT userID AS user, GroupName AS group'
  61.         );
  62.  
  63.         $this->assertEquals(
  64.             (string)Query::create()
  65.                 ->selectFields(['user' => 'userID'])
  66.                 ->selectFields(['group' => 'GroupName']),
  67.             'SELECT userID AS user, GroupName AS group'
  68.         );
  69.  
  70.         $this->assertEquals(
  71.             (string)Query::create()
  72.                 ->selectFields(['user' => 'userID'])
  73.                 ->selectFields(['group' => 'GroupName', 'date' => 'SomeDate']),
  74.             'SELECT userID AS user, GroupName AS group, SomeDate AS date'
  75.         );
  76.  
  77.         $this->assertEquals(
  78.             (string)Query::create()->selectFields(['u' => 'userID'])->selectFields(['u' => 'userID']),
  79.             'SELECT userID AS u'
  80.         );
  81.  
  82.         $this->assertEquals(
  83.             (string)Query::create()->selectFields(['u' => 'userID'])->selectFields(['u' => 'groupID']),
  84.             'SELECT groupID AS u'
  85.         );
  86.  
  87.         $this->assertEquals(
  88.             (string)Query::create()->selectFields(['count' => 'COUNT(userID)']),
  89.             'SELECT COUNT(userID) AS count'
  90.         );
  91.     }
  92.  
  93.     public function testSelectFieldsException1()
  94.     {
  95.         $this->setExpectedException('InvalidArgumentException');
  96.         Query::create()->select('userID');
  97.     }
  98.  
  99.     public function testSelectFieldsException2()
  100.     {
  101.         $this->setExpectedException('InvalidArgumentException');
  102.         Query::create()->select([]);
  103.     }
  104.  
  105.     public function testSelectRaw()
  106.     {
  107.         $this->assertInstanceOf(
  108.             self::$queryClassname,
  109.             Query::create()->selectRaw()
  110.         );
  111.  
  112.         $this->assertEquals(
  113.             (string)Query::create()->selectRaw('*'),
  114.             'SELECT *'
  115.         );
  116.  
  117.         $this->assertEquals(
  118.             (string)Query::create()->selectRaw('     *         '),
  119.             'SELECT *'
  120.         );
  121.  
  122.         $this->assertEquals(
  123.             (string)Query::create()->selectRaw('userID'),
  124.             'SELECT userID'
  125.         );
  126.  
  127.         $this->assertEquals(
  128.             (string)Query::create()->selectRaw('userID as u'),
  129.             'SELECT userID AS u'
  130.         );
  131.  
  132.         $this->assertEquals(
  133.             (string)Query::create()->selectRaw('userID as u, group'),
  134.             'SELECT userID as u, group'
  135.         );
  136.  
  137.         $this->assertEquals(
  138.             (string)Query::create()->selectRaw("userID as u, group WHERE name = 'foo'"), // don't do that!
  139.             "SELECT userID as u, group WHERE name = 'foo'"
  140.         );
  141.  
  142.         $this->assertEquals(
  143.             (string)Query::create()->selectRaw('COUNT(userID) AS count'),
  144.             'SELECT COUNT(userID) AS count'
  145.         );
  146.  
  147.         $this->assertEquals(
  148.             (string)Query::create()->selectFields(['u' => 'userID'])->selectRaw('COUNT(userID) AS count'),
  149.             'SELECT userID AS u, COUNT(userID) AS count'
  150.         );
  151.     }
  152.  
  153.     public function testFromTable()
  154.     {
  155.         $this->assertInstanceOf(
  156.             self::$queryClassname,
  157.             Query::create()->fromTable('users')
  158.         );
  159.  
  160.         $this->assertEquals(
  161.             (string)Query::create()->fromTable('users'),
  162.             'SELECT * FROM users'
  163.         );
  164.  
  165.         $this->assertEquals(
  166.             (string)Query::create()->fromTable('users', 'u'),
  167.             'SELECT * FROM users AS u'
  168.         );
  169.  
  170.         $this->assertEquals(
  171.             (string)Query::create()->fromTable('users')->fromTable('groups'),
  172.             'SELECT * FROM users, groups'
  173.         );
  174.  
  175.         $this->assertEquals(
  176.             (string)Query::create()->fromTable('users', 'u')->fromTable('groups'),
  177.             'SELECT * FROM users AS u, groups'
  178.         );
  179.     }
  180.  
  181.     public function testFromTableException1()
  182.     {
  183.         $this->setExpectedException('InvalidArgumentException');
  184.         Query::create()->fromTable('users AS u');
  185.     }
  186.  
  187.     public function testFromRaw()
  188.     {
  189.         $this->assertInstanceOf(
  190.             self::$queryClassname,
  191.             Query::create()->fromRaw('users')
  192.         );
  193.  
  194.         $this->assertEquals(
  195.             (string)Query::create()->fromRaw('users'),
  196.             'SELECT * FROM users'
  197.         );
  198.  
  199.         $this->assertEquals(
  200.             (string)Query::create()->fromRaw('users AS u, groups AS g'),
  201.             'SELECT * FROM users AS u, groups AS g'
  202.         );
  203.  
  204.         $this->assertEquals(
  205.             (string)Query::create()
  206.                 ->fromRaw(
  207.                     '('.(string)Query::create().') AS foo'
  208.                 ),
  209.             'SELECT * FROM (SELECT *) AS foo'
  210.         );
  211.     }
  212.  
  213.     public function testFromRawException1()
  214.     {
  215.         $this->setExpectedException('InvalidArgumentException');
  216.         Query::create()->fromRaw(2);
  217.     }
  218.  
  219.     public function testFromRawException2()
  220.     {
  221.         $this->setExpectedException('InvalidArgumentException');
  222.         Query::create()->fromRaw('');
  223.     }
  224.  
  225.     public function testFromSubquery()
  226.     {
  227.         $this->assertInstanceOf(
  228.             self::$queryClassname,
  229.             Query::create()->fromSubquery(Query::create(), 'alias')
  230.         );
  231.  
  232.         $this->assertEquals(
  233.             (string)Query::create()->fromSubquery(Query::create(), 'alias'),
  234.             'SELECT * FROM (SELECT *) AS alias'
  235.         );
  236.  
  237.         $this->assertEquals(
  238.             (string)Query::create()->selectFields(['costCount'])->fromSubquery(
  239.                 Query::create()->selectRaw('COUNT(cost) as costCount')->fromTable('users'),
  240.                 'alias'
  241.             ),
  242.             'SELECT costCount FROM (SELECT COUNT(cost) as costCount FROM users) AS alias'
  243.         );
  244.     }
  245.  
  246.     public function testFromSubqueryException1()
  247.     {
  248.         $this->setExpectedException('InvalidArgumentException');
  249.         Query::create()->fromSubquery(Query::create(), '');
  250.     }
  251.  
  252.     public function testLimit()
  253.     {
  254.         $this->assertInstanceOf(
  255.             self::$queryClassname,
  256.             Query::create()->limit(34)
  257.         );
  258.  
  259.         $this->assertEquals(
  260.             (string)Query::create()->limit(0),
  261.             'SELECT * LIMIT 0'
  262.         );
  263.  
  264.         $this->assertEquals(
  265.             (string)Query::create()->limit(12),
  266.             'SELECT * LIMIT 12'
  267.         );
  268.  
  269.         $this->assertEquals(
  270.             (string)Query::create()->limit('16'),
  271.             'SELECT * LIMIT 16'
  272.         );
  273.     }
  274.  
  275.     public function testLimitException1()
  276.     {
  277.         $this->setExpectedException('InvalidArgumentException');
  278.         Query::create()->limit(-2);
  279.     }
  280.  
  281.     public function testLimitException2()
  282.     {
  283.         $this->setExpectedException('InvalidArgumentException');
  284.         Query::create()->limit([32]);
  285.     }
  286.  
  287.     public function testOffset()
  288.     {
  289.         $this->assertInstanceOf(
  290.             self::$queryClassname,
  291.             Query::create()->offset(34)
  292.         );
  293.  
  294.         $this->assertEquals(
  295.             (string)Query::create()->offset(0),
  296.             'SELECT * OFFSET 0'
  297.         );
  298.  
  299.         $this->assertEquals(
  300.             (string)Query::create()->offset(12),
  301.             'SELECT * OFFSET 12'
  302.         );
  303.  
  304.         $this->assertEquals(
  305.             (string)Query::create()->offset('16'),
  306.             'SELECT * OFFSET 16'
  307.         );
  308.  
  309.         $this->assertEquals(
  310.             (string)Query::create()->offset(-54),
  311.             'SELECT * OFFSET -54'
  312.         );
  313.  
  314.         $this->assertEquals(
  315.             (string)Query::create()->offset('-58'),
  316.             'SELECT * OFFSET -58'
  317.         );
  318.     }
  319.  
  320.     public function testOffsetException1()
  321.     {
  322.         $this->setExpectedException('InvalidArgumentException');
  323.         (string)Query::create()->offset([32]);
  324.     }
  325.  
  326.     public function testPagination()
  327.     {
  328.         $this->assertInstanceOf(
  329.             self::$queryClassname,
  330.             Query::create()->pagination(5, 8)
  331.         );
  332.  
  333.         $this->assertEquals(
  334.             (string)Query::create()->pagination(4, 10),
  335.             'SELECT * LIMIT 10 OFFSET 30'
  336.         );
  337.  
  338.         $this->assertEquals(
  339.             (string)Query::create()->pagination(5, 8),
  340.             'SELECT * LIMIT 8 OFFSET 32'
  341.         );
  342.  
  343.         $this->assertEquals(
  344.             (string)Query::create()->pagination('2', '23'),
  345.             'SELECT * LIMIT 23 OFFSET 23'
  346.         );
  347.  
  348.         $this->assertEquals(
  349.             (string)Query::create()->pagination('1', '26'),
  350.             'SELECT * LIMIT 26 OFFSET 0'
  351.         );
  352.     }
  353.  
  354.     public function testPaginationException1()
  355.     {
  356.         $this->setExpectedException('InvalidArgumentException');
  357.         Query::create()->pagination([7, 12]);
  358.     }
  359.  
  360.     public function testPaginationException2()
  361.     {
  362.         $this->setExpectedException('InvalidArgumentException');
  363.         Query::create()->pagination(-5, 4);
  364.     }
  365.  
  366.     public function testPaginationException3()
  367.     {
  368.         $this->setExpectedException('InvalidArgumentException');
  369.         Query::create()->pagination(65, -7);
  370.     }
  371.  
  372.     public function testPaginationException4()
  373.     {
  374.         $this->setExpectedException('InvalidArgumentException');
  375.         Query::create()->pagination(0, 10);
  376.     }
  377.  
  378.     public function testOrder()
  379.     {
  380.         $this->assertInstanceOf(
  381.             self::$queryClassname,
  382.             Query::create()->order('name')
  383.         );
  384.  
  385.         $this->assertEquals(
  386.             (string)Query::create()->order('name', 'ASC'),
  387.             'SELECT * ORDER BY name ASC'
  388.         );
  389.  
  390.         $this->assertEquals(
  391.             (string)Query::create()->order('surname', 'desc'),
  392.             'SELECT * ORDER BY surname DESC'
  393.         );
  394.  
  395.         $this->assertEquals(
  396.             (string)Query::create()->order('surname', 'DeSc'),
  397.             'SELECT * ORDER BY surname DESC'
  398.         );
  399.  
  400.         $this->assertEquals(
  401.             (string)Query::create()->order('name', 'ASC')->order('surname', 'desc'),
  402.             'SELECT * ORDER BY name ASC, surname DESC'
  403.         );
  404.     }
  405.  
  406.     public function testOrderException1()
  407.     {
  408.         $this->setExpectedException('InvalidArgumentException');
  409.         Query::create()->order('');
  410.     }
  411.  
  412.     public function testOrderException2()
  413.     {
  414.         $this->setExpectedException('InvalidArgumentException');
  415.         Query::create()->order([]);
  416.     }
  417.  
  418.     public function testGroup()
  419.     {
  420.         $this->assertInstanceOf(
  421.             self::$queryClassname,
  422.             Query::create()->group('name')
  423.         );
  424.  
  425.         $this->assertEquals(
  426.             (string)Query::create()->group('name'),
  427.             'SELECT * GROUP BY name'
  428.         );
  429.  
  430.         $this->assertEquals(
  431.             (string)Query::create()->group('name')->group('surname'),
  432.             'SELECT * GROUP BY name, surname'
  433.         );
  434.     }
  435.  
  436.     public function testGroupException1()
  437.     {
  438.         $this->setExpectedException('InvalidArgumentException');
  439.         Query::create()->group('');
  440.     }
  441.  
  442.     public function testGroupException2()
  443.     {
  444.         $this->setExpectedException('InvalidArgumentException');
  445.         Query::create()->group([]);
  446.     }
  447.  
  448.     /* WHERE RAW */
  449.  
  450.     public function testWhereRawWithoutBinds()
  451.     {
  452.         $this->assertInstanceOf(
  453.             self::$queryClassname,
  454.             Query::create()->whereRaw('userID = 1')
  455.         );
  456.  
  457.         $this->assertEquals(
  458.             (string)Query::create()->whereRaw('userID = 1'),
  459.             'SELECT * WHERE (userID = 1)'
  460.         );
  461.  
  462.         $this->assertEquals(
  463.             (string)Query::create()->whereRaw('userID = 1 OR userID = 2'),
  464.             'SELECT * WHERE (userID = 1 OR userID = 2)'
  465.         );
  466.  
  467.         $this->assertEquals(
  468.             (string)Query::create()->whereRaw('userID = 1')->whereRaw('userID = 2'),
  469.             'SELECT * WHERE (userID = 1) AND (userID = 2)'
  470.         );
  471.  
  472.         $this->assertEquals(
  473.             (string)Query::create()->whereRaw('userID = 1')->whereRaw('userID = 2')->whereRaw('userID = 3 OR userID = 4'),
  474.             'SELECT * WHERE (userID = 1) AND (userID = 2) AND (userID = 3 OR userID = 4)'
  475.         );
  476.     }
  477.  
  478.     public function testWhereRawWithBinds1()
  479.     {
  480.         $query = Query::create();
  481.         $this->assertEquals(
  482.             (string)$query->whereRaw('userID = ?', 44),
  483.             'SELECT * WHERE (userID = ?)'
  484.         );
  485.         $binds = $query->getBinds();
  486.         $this->assertCount(1, $binds);
  487.         $this->assertContains(44, $binds);
  488.     }
  489.  
  490.     public function testWhereRawWithBinds2()
  491.     {
  492.         $query = Query::create();
  493.         $this->assertEquals(
  494.             (string)$query->whereRaw('userID = ? OR userID = ?', [43, 54]), // don't do that, use whereIn()
  495.             'SELECT * WHERE (userID = ? OR userID = ?)'
  496.         );
  497.         $binds = $query->getBinds();
  498.         $this->assertCount(2, $binds);
  499.         $this->assertContains(43, $binds);
  500.         $this->assertContains(54, $binds);
  501.         $this->assertEquals(43, array_shift($binds));
  502.         $this->assertEquals(54, array_shift($binds));
  503.     }
  504.  
  505.     public function testWhereRawWithBinds3()
  506.     {
  507.         $query = Query::create();
  508.         $this->assertEquals(
  509.             (string)$query
  510.                 ->whereRaw('userID = ? OR userID = ?', [95, 18])
  511.                 ->whereRaw('userID = ? OR userID = ?', [78, 123])
  512.                 ->whereRaw('userID = 12')
  513.                 ->whereRaw('groupID = ?', 2), // don't do that
  514.             'SELECT * WHERE (userID = ? OR userID = ?) AND (userID = ? OR userID = ?) AND (userID = 12) AND (groupID = ?)'
  515.         );
  516.  
  517.         $binds = $query->getBinds();
  518.         $this->assertCount(5, $binds);
  519.         $this->assertContains(95, $binds);
  520.         $this->assertContains(18, $binds);
  521.         $this->assertContains(78, $binds);
  522.         $this->assertContains(123, $binds);
  523.         $this->assertContains(2, $binds);
  524.         $this->assertEquals(95, array_shift($binds));
  525.         $this->assertEquals(18, array_shift($binds));
  526.         $this->assertEquals(78, array_shift($binds));
  527.         $this->assertEquals(123, array_shift($binds));
  528.         $this->assertEquals(2, array_shift($binds));
  529.     }
  530.  
  531.     public function testWhereRawWithBinds4()
  532.     {
  533.         $query = Query::create();
  534.         $this->assertEquals(
  535.             (string)$query
  536.                 ->whereRaw('username LIKE ? OR username LIKE ?', ['%admin%', '%root%']), // don't do that
  537.             'SELECT * WHERE (username LIKE ? OR username LIKE ?)'
  538.         );
  539.  
  540.         $binds = $query->getBinds();
  541.         $this->assertCount(2, $binds);
  542.         $this->assertContains('%admin%', $binds);
  543.         $this->assertContains('%root%',  $binds);
  544.         $this->assertEquals('%admin%', array_shift($binds));
  545.         $this->assertEquals('%root%',  array_shift($binds));
  546.     }
  547.  
  548.     /* WHERE LIKE */
  549.  
  550.     public function testWhereLike1()
  551.     {
  552.         $this->assertInstanceOf(
  553.             self::$queryClassname,
  554.             Query::create()->whereLike('username', '%ro.t%')
  555.         );
  556.     }
  557.  
  558.     public function testWhereLike2()
  559.     {
  560.         $this->assertEquals(
  561.             (string)Query::create()->whereLike('username', '%admin%'),
  562.             'SELECT * WHERE (username LIKE ?)'
  563.         );
  564.  
  565.         $binds = $query->getBinds();
  566.         $this->assertCount(1, $binds);
  567.         $this->assertContains('%admin%', $binds);
  568.         $this->assertEquals('%admin%', array_shift($binds));
  569.     }
  570.  
  571.     public function testWhereLike3()
  572.     {
  573.         $this->assertEquals(
  574.             (string)Query::create()->whereLike('username', '%moder%')->whereLike('groupname', '%moderators%'),
  575.             'SELECT * WHERE (username LIKE ?) AND (groupname LIKE ?)'
  576.         );
  577.  
  578.         $binds = $query->getBinds();
  579.         $this->assertCount(2, $binds);
  580.         $this->assertContains('%moder%', $binds);
  581.         $this->assertContains('%moderators%', $binds);
  582.         $this->assertEquals('%moder%', array_shift($binds));
  583.         $this->assertEquals('%moderators%', array_shift($binds));
  584.     }
  585.  
  586.     /* WHERE NOT LIKE */
  587.  
  588.     public function testWhereNotLike1()
  589.     {
  590.         $this->assertInstanceOf(
  591.             self::$queryClassname,
  592.             Query::create()->whereNotLike('username', '%ro.t%')
  593.         );
  594.     }
  595.  
  596.     public function testWhereNotLike2()
  597.     {
  598.         $this->assertEquals(
  599.             (string)Query::create()->whereNotLike('username', '%admin%'),
  600.             'SELECT * WHERE (username NOT LIKE ?)'
  601.         );
  602.  
  603.         $binds = $query->getBinds();
  604.         $this->assertCount(1, $binds);
  605.         $this->assertContains('%admin%', $binds);
  606.         $this->assertEquals('%admin%', array_shift($binds));
  607.     }
  608.  
  609.     public function testWhereNotLike3()
  610.     {
  611.         $this->assertEquals(
  612.             (string)Query::create()->whereNotLike('username', '%moder%')->whereNotLike('groupname', '%moderators%'),
  613.             'SELECT * WHERE (username NOT LIKE ?) AND (groupname NOT LIKE ?)'
  614.         );
  615.  
  616.         $binds = $query->getBinds();
  617.         $this->assertCount(2, $binds);
  618.         $this->assertContains('%moder%', $binds);
  619.         $this->assertContains('%moderators%', $binds);
  620.         $this->assertEquals('%moder%', array_shift($binds));
  621.         $this->assertEquals('%moderators%', array_shift($binds));
  622.     }
  623.  
  624.     /* WHERE LIKE MANY */
  625.  
  626.     public function testWhereLikeMany()
  627.     {
  628.         $this->assertEquals(
  629.             (string)Query::create()
  630.                 ->whereLikeMany('username', ['%admin%', '%root%', '%null%'])
  631.                 ->whereLikeMany('groupname', ['%admins%', '%roots%', '%nuller%']),
  632.             'SELECT * WHERE (username LIKE ? OR username LIKE ? OR username LIKE ?) AND (groupname LIKE ? OR groupname LIKE ? OR groupname LIKE ?)'
  633.         );
  634.  
  635.         $binds = $query->getBinds();
  636.         $this->assertCount(6, $binds);
  637.         $this->assertContains('%admin%', $binds);
  638.         $this->assertContains('%root%', $binds);
  639.         $this->assertContains('%null%', $binds);
  640.         $this->assertContains('%admins%', $binds);
  641.         $this->assertContains('%roots%', $binds);
  642.         $this->assertContains('%nuller%', $binds);
  643.         $this->assertEquals('%admin%', array_shift($binds));
  644.         $this->assertEquals('%root%', array_shift($binds));
  645.         $this->assertEquals('%null%', array_shift($binds));
  646.         $this->assertEquals('%admins%', array_shift($binds));
  647.         $this->assertEquals('%roots%', array_shift($binds));
  648.         $this->assertEquals('%nuller%', array_shift($binds));
  649.     }
  650.  
  651.     /* WHERE NOT LIKE MANY */
  652.  
  653.     public function testWhereNotLikeMany()
  654.     {
  655.         $this->assertEquals(
  656.             (string)Query::create()
  657.                 ->whereNotLikeMany('username', ['%admin%', '%root%', '%null%'])
  658.                 ->whereNotLikeMany('groupname', ['%admins%', '%roots%', '%nuller%']),
  659.             'SELECT * WHERE (username NOT LIKE ? OR username NOT LIKE ? OR username NOT LIKE ?) AND (groupname NOT LIKE ? OR groupname NOT LIKE ? OR groupname NOT LIKE ?)'
  660.         );
  661.  
  662.         $binds = $query->getBinds();
  663.         $this->assertCount(6, $binds);
  664.         $this->assertContains('%admin%', $binds);
  665.         $this->assertContains('%root%', $binds);
  666.         $this->assertContains('%null%', $binds);
  667.         $this->assertContains('%admins%', $binds);
  668.         $this->assertContains('%roots%', $binds);
  669.         $this->assertContains('%nuller%', $binds);
  670.         $this->assertEquals('%admin%', array_shift($binds));
  671.         $this->assertEquals('%root%', array_shift($binds));
  672.         $this->assertEquals('%null%', array_shift($binds));
  673.         $this->assertEquals('%admins%', array_shift($binds));
  674.         $this->assertEquals('%roots%', array_shift($binds));
  675.         $this->assertEquals('%nuller%', array_shift($binds));
  676.     }
  677.  
  678.     /* WHERE IN */
  679.  
  680.     public function testWhereIn1()
  681.     {
  682.         $this->assertInstanceOf(
  683.             self::$queryClassname,
  684.             Query::create()->whereIn('userID', [1])
  685.         );
  686.     }
  687.  
  688.     public function testWhereIn2()
  689.     {
  690.         $this->assertEquals(
  691.             (string)Query::create()
  692.                 ->whereIn('userID', [11, 22, 55])
  693.                 ->whereIn('groupID', [77, 33, 13]),
  694.             'SELECT * WHERE (userID IN (?, ?, ?)) AND (groupID IN (?, ?, ?))'
  695.         );
  696.  
  697.         $binds = $query->getBinds();
  698.         $this->assertCount(6, $binds);
  699.         $this->assertContains(11, $binds);
  700.         $this->assertContains(22, $binds);
  701.         $this->assertContains(55, $binds);
  702.         $this->assertContains(77, $binds);
  703.         $this->assertContains(33, $binds);
  704.         $this->assertContains(13, $binds);
  705.         $this->assertEquals(11, array_shift($binds));
  706.         $this->assertEquals(22, array_shift($binds));
  707.         $this->assertEquals(55, array_shift($binds));
  708.         $this->assertEquals(77, array_shift($binds));
  709.         $this->assertEquals(33, array_shift($binds));
  710.         $this->assertEquals(13, array_shift($binds));
  711.     }
  712.  
  713.     /* WHERE NOT IN */
  714.  
  715.     public function testWhereNotIn1()
  716.     {
  717.         $this->assertInstanceOf(
  718.             self::$queryClassname,
  719.             Query::create()->whereNotIn('userID', [1])
  720.         );
  721.     }
  722.  
  723.     public function testWhereNotIn2()
  724.     {
  725.         $this->assertEquals(
  726.             (string)Query::create()
  727.                 ->whereIn('userID', [11, 22, 55])
  728.                 ->whereIn('groupID', [77, 33, 13]),
  729.             'SELECT * WHERE (userID NOT IN (?, ?, ?)) AND (groupID NOT IN (?, ?, ?))'
  730.         );
  731.  
  732.         $binds = $query->getBinds();
  733.         $this->assertCount(6, $binds);
  734.         $this->assertContains(11, $binds);
  735.         $this->assertContains(22, $binds);
  736.         $this->assertContains(55, $binds);
  737.         $this->assertContains(77, $binds);
  738.         $this->assertContains(33, $binds);
  739.         $this->assertContains(13, $binds);
  740.         $this->assertEquals(11, array_shift($binds));
  741.         $this->assertEquals(22, array_shift($binds));
  742.         $this->assertEquals(55, array_shift($binds));
  743.         $this->assertEquals(77, array_shift($binds));
  744.         $this->assertEquals(33, array_shift($binds));
  745.         $this->assertEquals(13, array_shift($binds));
  746.     }
  747.  
  748.     /* WHERE IS NULL */
  749.  
  750.     public function testWhereIsNull1()
  751.     {
  752.         $this->assertInstanceOf(
  753.             self::$queryClassname,
  754.             Query::create()->whereIsNull('userID')
  755.         );
  756.     }
  757.  
  758.     public function testWhereIsNull2()
  759.     {
  760.         $this->assertEquals(
  761.             (string)Query::create()->from('users')->whereIsNull('groupID'),
  762.             'SELECT * FROM users WHERE (groupID IS NULL)'
  763.         );
  764.     }
  765.  
  766.     /* WHERE IS NOT NULL */
  767.  
  768.     public function testWhereIsNotNull1()
  769.     {
  770.         $this->assertInstanceOf(
  771.             self::$queryClassname,
  772.             Query::create()->whereIsNotNull('userID')
  773.         );
  774.     }
  775.  
  776.     public function testWhereIsNotNull2()
  777.     {
  778.         $this->assertEquals(
  779.             (string)Query::create()->from('users')->whereIsNotNull('groupID'),
  780.             'SELECT * FROM users WHERE (groupID IS NOT NULL)'
  781.         );
  782.     }
  783.  
  784.     /* WHERE IN SUBQUERY */
  785.  
  786.     public function testWhereInSubquary1()
  787.     {
  788.         $this->assertInstanceOf(
  789.             self::$queryClassname,
  790.             Query::create()->whereInSubquary('userID', Query::create())
  791.         );
  792.     }
  793.  
  794.     public function testWhereInSubquary2()
  795.     {
  796.         $this->assertEquals(
  797.             (string)Query::create()->whereInSubquary(
  798.                 'userID',
  799.                 Query::create()->whereInSubquary(
  800.                     'groupID',
  801.                     Query::create()->fromTable('groups')
  802.                 )
  803.             ),
  804.             'SELECT * WHERE userID IN (SELECT * WHERE groupID IN (SELECT * FROM groups))'
  805.         );
  806.     }
  807.  
  808.     /* WHERE NOT IN SUBQUERY */
  809.  
  810.     public function testWhereNotInSubquary1()
  811.     {
  812.         $this->assertInstanceOf(
  813.             self::$queryClassname,
  814.             Query::create()->whereNotInSubquary('userID', Query::create())
  815.         );
  816.     }
  817.  
  818.     public function testWhereNotInSubquary2()
  819.     {
  820.         $this->assertEquals(
  821.             (string)Query::create()->whereNotInSubquary(
  822.                 'userID',
  823.                 Query::create()->whereNotInSubquary(
  824.                     'groupID',
  825.                     Query::create()->fromTable('groups')
  826.                 )
  827.             ),
  828.             'SELECT * WHERE userID NOT IN (SELECT * WHERE groupID NOT IN (SELECT * FROM groups))'
  829.         );
  830.     }
  831.  
  832.     /* JOIN RAW */
  833.  
  834.     public function testJoinRaw1()
  835.     {
  836.         $this->assertInstanceOf(
  837.             self::$queryClassname,
  838.             Query::create()->from('users', 'u')->joinRaw('groups AS g')
  839.         );
  840.     }
  841.  
  842.     public function testJoinRaw2()
  843.     {
  844.         $this->assertInstanceOf(
  845.             (string)Query::create()
  846.                 ->from('users', 'u')
  847.                 ->joinRaw('groups AS g ON u.groupID = g.groupID'),
  848.             'SELECT * FROM users AS u JOIN groups AS g ON u.groupID = g.groupID'
  849.         );
  850.     }
  851.  
  852.     public function testJoinRaw3()
  853.     {
  854.         $this->assertInstanceOf(
  855.             (string)Query::create()
  856.                 ->from('users', 'u')
  857.                 ->joinRaw('groups AS g ON u.groupID = g.groupID')
  858.                 ->joinRaw('permission ON g.groupID = permissions.groupID'),
  859.             'SELECT * FROM users AS u JOIN groups AS g ON u.groupID = g.groupID JOIN permission ON g.groupID = permissions.groupID'
  860.         );
  861.     }
  862.  
  863.     /* JOIN TABLE */
  864.  
  865.     public function testJoinTable1()
  866.     {
  867.         $this->assertInstanceOf(
  868.             self::$queryClassname,
  869.             Query::create()
  870.                 ->from('users', 'u')
  871.                 ->joinTable('groups', 'g')
  872.         );
  873.     }
  874.  
  875.     public function testJoinTable2()
  876.     {
  877.         $this->assertEquals(
  878.             (string)Query::create()
  879.                 ->from('users', 'u')
  880.                 ->joinTable('groups', 'g'),
  881.             'SELECT * FROM users AS u JOIN groups AS g'
  882.         );
  883.     }
  884.  
  885.     public function testJoinTable3()
  886.     {
  887.         $this->assertEquals(
  888.             (string)Query::create()
  889.                 ->from('users', 'u')->joinTable('groups', 'g')
  890.                 ->joinTable('permissions'),
  891.             'SELECT * FROM users AS u JOIN groups AS g JOIN permissions'
  892.         );
  893.     }
  894.  
  895.     /* JOIN TABLE ON */
  896.  
  897.     public function testJoinTableOn1()
  898.     {
  899.         $this->assertInstanceOf(
  900.             self::$queryClassname,
  901.             Query::create()
  902.                 ->from('users', 'u')
  903.                 ->joinTableOn('groups', 'g', 'u.groupID = g.groupID')
  904.         );
  905.     }
  906.  
  907.     public function testJoinTableOn2()
  908.     {
  909.         $this->assertEquals(
  910.             (string)Query::create()
  911.                 ->from('users', 'u')
  912.                 ->joinTableOn('groups', 'g', 'u.groupID = g.groupID'),
  913.             'SELECT * FROM users AS u JOIN groups AS g ON u.groupID = g.groupID'
  914.         );
  915.     }
  916.  
  917.     public function testJoinTableOn3()
  918.     {
  919.         $this->assertEquals(
  920.             (string)Query::create()
  921.                 ->from('users', 'u')
  922.                 ->joinTableOn('groups', 'g', 'u.groupID = g.groupID')
  923.                 ->joinTableOn('permissions', '', 'g.groupID = permissions.groupID'),
  924.             'SELECT * FROM users AS u JOIN groups AS g ON u.groupID = g.groupID JOIN permissions ON g.groupID = permissions.groupID'
  925.         );
  926.     }
  927.  
  928.     /* JOIN TABLE USING */
  929.  
  930.     public function testJoinTableUsing1()
  931.     {
  932.         $this->assertInstanceOf(
  933.             self::$queryClassname,
  934.             Query::create()
  935.                 ->from('users', 'u')
  936.                 ->joinTableUsing('groups', 'g', 'groupID')
  937.         );
  938.     }
  939.  
  940.     public function testJoinTableUsing2()
  941.     {
  942.         $this->assertEquals(
  943.             (string)Query::create()
  944.                 ->from('users', 'u')
  945.                 ->joinTableUsing('groups', 'g', 'groupID'),
  946.             'SELECT * FROM users AS u JOIN groups AS g USING (groupID)'
  947.         );
  948.     }
  949.  
  950.     public function testJoinTableUsing3()
  951.     {
  952.         $this->assertEquals(
  953.             (string)Query::create()
  954.                 ->from('users', 'u')
  955.                 ->joinTableUsing('groups', 'g', 'groupID')
  956.                 ->joinTableUsing('permissions', '', 'accessID'),
  957.             'SELECT * FROM users AS u JOIN groups AS g USING (groupID) JOIN permissions USING (accessID)'
  958.         );
  959.     }
  960.  
  961.     /* JOIN SUBQUERY */
  962.  
  963.     public function testJoinSubquery1()
  964.     {
  965.         $this->assertInstanceOf(
  966.             self::$queryClassname,
  967.             Query::create()
  968.                 ->from('users', 'u')
  969.                 ->joinSubquery(
  970.                     Query::create()
  971.                         ->from('groups', 'g'),
  972.                     'temp'
  973.                 )
  974.         );
  975.     }
  976.  
  977.     public function testJoinSubquery2()
  978.     {
  979.         $this->assertEquals(
  980.             (string)Query::create()
  981.                 ->from('users', 'u')
  982.                 ->joinSubquery(
  983.                     Query::create()
  984.                         ->from('groups', 'g'),
  985.                     'temp'
  986.                 ),
  987.             'SELECT * FROM users AS u JOIN (SELECT * FROM groups AS g) AS temp'
  988.         );
  989.     }
  990.  
  991.     public function testJoinSubquery3()
  992.     {
  993.         $this->assertEquals(
  994.             (string)Query::create()->from('users', 'u')
  995.                 ->joinSubquery(
  996.                     Query::create()
  997.                         ->from('groups', 'g'),
  998.                     'temp'
  999.                 )
  1000.                 ->joinSubquery(
  1001.                     Query::create()
  1002.                         ->from('permissions'),
  1003.                     'perms'
  1004.                 ),
  1005.             'SELECT * FROM users AS u JOIN (SELECT * FROM groups AS g) AS temp JOIN (SELECT * FROM permissions AS g) AS perms'
  1006.         );
  1007.     }
  1008.  
  1009.     /* JOIN SUBQUERY ON */
  1010.  
  1011.     public function testJoinSubqueryOn1()
  1012.     {
  1013.         $this->assertInstanceOf(
  1014.             self::$queryClassname,
  1015.             Query::create()
  1016.                 ->from('users', 'u')
  1017.                 ->joinSubqueryOn(
  1018.                     Query::create()
  1019.                         ->from('groups', 'g'),
  1020.                     'temp',
  1021.                     'u.groupID = temp.groupID'
  1022.                 )
  1023.         );
  1024.     }
  1025.  
  1026.     public function testJoinSubqueryOn2()
  1027.     {
  1028.         $this->assertEquals(
  1029.             (string)Query::create()
  1030.                 ->from('users', 'u')
  1031.                 ->joinSubqueryOn(
  1032.                     Query::create()
  1033.                         ->from('groups', 'g'),
  1034.                     'temp',
  1035.                     'u.groupID = temp.groupID'
  1036.                 ),
  1037.             'SELECT * FROM users AS u JOIN (SELECT * FROM groups AS g) AS temp ON u.groupID = temp.groupID'
  1038.         );
  1039.     }
  1040.  
  1041.     public function testJoinSubqueryOn3()
  1042.     {
  1043.         $this->assertEquals(
  1044.             (string)Query::create()->from('users', 'u')
  1045.                 ->joinSubqueryOn(
  1046.                     Query::create()
  1047.                         ->from('groups', 'g'),
  1048.                     'temp',
  1049.                     'u.groupID = temp.groupID'
  1050.                 )
  1051.                 ->joinSubqueryOn(
  1052.                     Query::create()
  1053.                         ->from('permissions'),
  1054.                     'perms',
  1055.                     'temp.groupID = perms.groupID'
  1056.                 ),
  1057.             'SELECT * FROM users AS u JOIN (SELECT * FROM groups AS g) AS temp ON u.groupID = temp.groupID JOIN (SELECT * FROM permissions AS g) AS perms ON temp.groupID = perms.groupID'
  1058.         );
  1059.     }
  1060.  
  1061.     /* JOIN SUBQUERY USING */
  1062.  
  1063.     public function testJoinSubqueryUsing1()
  1064.     {
  1065.         $this->assertInstanceOf(
  1066.             self::$queryClassname,
  1067.             Query::create()
  1068.                 ->from('users', 'u')
  1069.                 ->joinSubqueryUsing(
  1070.                     Query::create()
  1071.                         ->from('groups', 'g'),
  1072.                     'temp',
  1073.                     'groupID'
  1074.                 )
  1075.         );
  1076.     }
  1077.  
  1078.     public function testJoinSubqueryUsing2()
  1079.     {
  1080.         $this->assertEquals(
  1081.             (string)Query::create()
  1082.                 ->from('users', 'u')
  1083.                 ->joinSubqueryUsing(
  1084.                     Query::create()
  1085.                         ->from('groups', 'g'),
  1086.                     'temp',
  1087.                     'groupID'
  1088.                 ),
  1089.             'SELECT * FROM users AS u JOIN (SELECT * FROM groups AS g) AS temp USING (groupID)'
  1090.         );
  1091.     }
  1092.  
  1093.     public function testJoinSubqueryUsing3()
  1094.     {
  1095.         $this->assertEquals(
  1096.             (string)Query::create()->from('users', 'u')
  1097.                 ->from('users', 'u')
  1098.                 ->joinSubqueryUsing(
  1099.                     Query::create()
  1100.                         ->from('groups', 'g'),
  1101.                     'temp',
  1102.                     'groupID'
  1103.                 )
  1104.                 ->joinSubqueryOn(
  1105.                     Query::create()
  1106.                         ->from('permissions'),
  1107.                     'perms',
  1108.                     'accessID'
  1109.                 ),
  1110.             'SELECT * FROM users AS u JOIN (SELECT * FROM groups AS g) AS temp USING (groupID) JOIN (SELECT * FROM permissions AS g) AS perms USING (accessID)'
  1111.         );
  1112.     }
  1113.  
  1114.     /* LEFT JOIN RAW */
  1115.  
  1116.     public function testJoinLeftRaw1()
  1117.     {
  1118.         $this->assertInstanceOf(
  1119.             self::$queryClassname,
  1120.             Query::create()->from('users', 'u')->joinLeftRaw('groups AS g')
  1121.         );
  1122.     }
  1123.  
  1124.     public function testJoinLeftRaw2()
  1125.     {
  1126.         $this->assertInstanceOf(
  1127.             (string)Query::create()
  1128.                 ->from('users', 'u')
  1129.                 ->joinLeftRaw('groups AS g ON u.groupID = g.groupID'),
  1130.             'SELECT * FROM users AS u LEFT JOIN groups AS g ON u.groupID = g.groupID'
  1131.         );
  1132.     }
  1133.  
  1134.     public function testJoinLeftRaw3()
  1135.     {
  1136.         $this->assertInstanceOf(
  1137.             (string)Query::create()
  1138.                 ->from('users', 'u')
  1139.                 ->joinLeftRaw('groups AS g ON u.groupID = g.groupID')
  1140.                 ->joinLeftRaw('permission ON g.groupID = permissions.groupID'),
  1141.             'SELECT * FROM users AS u LEFT JOIN groups AS g ON u.groupID = g.groupID LEFT JOIN permission ON g.groupID = permissions.groupID'
  1142.         );
  1143.     }
  1144.  
  1145.     /* LEFT JOIN TABLE */
  1146.  
  1147.     public function testJoinLeftTable1()
  1148.     {
  1149.         $this->assertInstanceOf(
  1150.             self::$queryClassname,
  1151.             Query::create()
  1152.                 ->from('users', 'u')
  1153.                 ->joinLeftTable('groups', 'g')
  1154.         );
  1155.     }
  1156.  
  1157.     public function testJoinLeftTable2()
  1158.     {
  1159.         $this->assertEquals(
  1160.             (string)Query::create()
  1161.                 ->from('users', 'u')
  1162.                 ->joinLeftTable('groups', 'g'),
  1163.             'SELECT * FROM users AS u LEFT JOIN groups AS g'
  1164.         );
  1165.     }
  1166.  
  1167.     public function testJoinLeftTable3()
  1168.     {
  1169.         $this->assertEquals(
  1170.             (string)Query::create()
  1171.                 ->from('users', 'u')->joinLeftTable('groups', 'g')
  1172.                 ->joinLeftTable('permissions'),
  1173.             'SELECT * FROM users AS u LEFT JOIN groups AS g LEFT JOIN permissions'
  1174.         );
  1175.     }
  1176.  
  1177.     /* LEFT JOIN TABLE ON */
  1178.  
  1179.     public function testJoinLeftTableOn1()
  1180.     {
  1181.         $this->assertInstanceOf(
  1182.             self::$queryClassname,
  1183.             Query::create()
  1184.                 ->from('users', 'u')
  1185.                 ->joinLeftTableOn('groups', 'g', 'u.groupID = g.groupID')
  1186.         );
  1187.     }
  1188.  
  1189.     public function testJoinLeftTableOn2()
  1190.     {
  1191.         $this->assertEquals(
  1192.             (string)Query::create()
  1193.                 ->from('users', 'u')
  1194.                 ->joinLeftTableOn('groups', 'g', 'u.groupID = g.groupID'),
  1195.             'SELECT * FROM users AS u LEFT JOIN groups AS g ON u.groupID = g.groupID'
  1196.         );
  1197.     }
  1198.  
  1199.     public function testJoinLeftTableOn3()
  1200.     {
  1201.         $this->assertEquals(
  1202.             (string)Query::create()
  1203.                 ->from('users', 'u')
  1204.                 ->joinLeftTableOn('groups', 'g', 'u.groupID = g.groupID')
  1205.                 ->joinLeftTableOn('permissions', '', 'g.groupID = permissions.groupID'),
  1206.             'SELECT * FROM users AS u LEFT JOIN groups AS g ON u.groupID = g.groupID LEFT JOIN permissions ON g.groupID = permissions.groupID'
  1207.         );
  1208.     }
  1209.  
  1210.     /* LEFT JOIN TABLE USING */
  1211.  
  1212.     public function testJoinLeftTableUsing1()
  1213.     {
  1214.         $this->assertInstanceOf(
  1215.             self::$queryClassname,
  1216.             Query::create()
  1217.                 ->from('users', 'u')
  1218.                 ->joinLeftTableUsing('groups', 'g', 'groupID')
  1219.         );
  1220.     }
  1221.  
  1222.     public function testJoinLeftTableUsing2()
  1223.     {
  1224.         $this->assertEquals(
  1225.             (string)Query::create()
  1226.                 ->from('users', 'u')
  1227.                 ->joinLeftTableUsing('groups', 'g', 'groupID'),
  1228.             'SELECT * FROM users AS u LEFT JOIN groups AS g USING (groupID)'
  1229.         );
  1230.     }
  1231.  
  1232.     public function testJoinLeftTableUsing3()
  1233.     {
  1234.         $this->assertEquals(
  1235.             (string)Query::create()
  1236.                 ->from('users', 'u')
  1237.                 ->joinLeftTableUsing('groups', 'g', 'groupID')
  1238.                 ->joinLeftTableUsing('permissions', '', 'accessID'),
  1239.             'SELECT * FROM users AS u LEFT JOIN groups AS g USING (groupID) LEFT JOIN permissions USING (accessID)'
  1240.         );
  1241.     }
  1242.  
  1243.     /* LEFT JOIN SUBQUERY */
  1244.  
  1245.     public function testJoinLeftSubquery1()
  1246.     {
  1247.         $this->assertInstanceOf(
  1248.             self::$queryClassname,
  1249.             Query::create()
  1250.                 ->from('users', 'u')
  1251.                 ->joinLeftSubquery(
  1252.                     Query::create()
  1253.                         ->from('groups', 'g'),
  1254.                     'temp'
  1255.                 )
  1256.         );
  1257.     }
  1258.  
  1259.     public function testJoinLeftSubquery2()
  1260.     {
  1261.         $this->assertEquals(
  1262.             (string)Query::create()
  1263.                 ->from('users', 'u')
  1264.                 ->joinLeftSubquery(
  1265.                     Query::create()
  1266.                         ->from('groups', 'g'),
  1267.                     'temp'
  1268.                 ),
  1269.             'SELECT * FROM users AS u LEFT JOIN (SELECT * FROM groups AS g) AS temp'
  1270.         );
  1271.     }
  1272.  
  1273.     public function testJoinLeftSubquery3()
  1274.     {
  1275.         $this->assertEquals(
  1276.             (string)Query::create()->from('users', 'u')
  1277.                 ->joinLeftSubquery(
  1278.                     Query::create()
  1279.                         ->from('groups', 'g'),
  1280.                     'temp'
  1281.                 )
  1282.                 ->joinLeftSubquery(
  1283.                     Query::create()
  1284.                         ->from('permissions'),
  1285.                     'perms'
  1286.                 ),
  1287.             'SELECT * FROM users AS u LEFT JOIN (SELECT * FROM groups AS g) AS temp LEFT JOIN (SELECT * FROM permissions AS g) AS perms'
  1288.         );
  1289.     }
  1290.  
  1291.     /* LEFT JOIN SUBQUERY ON */
  1292.  
  1293.     public function testJoinLeftSubqueryOn1()
  1294.     {
  1295.         $this->assertInstanceOf(
  1296.             self::$queryClassname,
  1297.             Query::create()
  1298.                 ->from('users', 'u')
  1299.                 ->joinLeftSubqueryOn(
  1300.                     Query::create()
  1301.                         ->from('groups', 'g'),
  1302.                     'temp',
  1303.                     'u.groupID = temp.groupID'
  1304.                 )
  1305.         );
  1306.     }
  1307.  
  1308.     public function testJoinLeftSubqueryOn2()
  1309.     {
  1310.         $this->assertEquals(
  1311.             (string)Query::create()
  1312.                 ->from('users', 'u')
  1313.                 ->joinLeftSubqueryOn(
  1314.                     Query::create()
  1315.                         ->from('groups', 'g'),
  1316.                     'temp',
  1317.                     'u.groupID = temp.groupID'
  1318.                 ),
  1319.             'SELECT * FROM users AS u LEFT JOIN (SELECT * FROM groups AS g) AS temp ON u.groupID = temp.groupID'
  1320.         );
  1321.     }
  1322.  
  1323.     public function testJoinLeftSubqueryOn3()
  1324.     {
  1325.         $this->assertEquals(
  1326.             (string)Query::create()->from('users', 'u')
  1327.                 ->joinLeftSubqueryOn(
  1328.                     Query::create()
  1329.                         ->from('groups', 'g'),
  1330.                     'temp',
  1331.                     'u.groupID = temp.groupID'
  1332.                 )
  1333.                 ->joinLeftSubqueryOn(
  1334.                     Query::create()
  1335.                         ->from('permissions'),
  1336.                     'perms',
  1337.                     'temp.groupID = perms.groupID'
  1338.                 ),
  1339.             'SELECT * FROM users AS u LEFT JOIN (SELECT * FROM groups AS g) AS temp ON u.groupID = temp.groupID LEFT JOIN (SELECT * FROM permissions AS g) AS perms ON temp.groupID = perms.groupID'
  1340.         );
  1341.     }
  1342.  
  1343.     /* LEFT JOIN SUBQUERY USING */
  1344.  
  1345.     public function testJoinLeftSubqueryUsing1()
  1346.     {
  1347.         $this->assertInstanceOf(
  1348.             self::$queryClassname,
  1349.             Query::create()
  1350.                 ->from('users', 'u')
  1351.                 ->joinLeftSubqueryUsing(
  1352.                     Query::create()
  1353.                         ->from('groups', 'g'),
  1354.                     'temp',
  1355.                     'groupID'
  1356.                 )
  1357.         );
  1358.     }
  1359.  
  1360.     public function testJoinLeftSubqueryUsing2()
  1361.     {
  1362.         $this->assertEquals(
  1363.             (string)Query::create()
  1364.                 ->from('users', 'u')
  1365.                 ->joinLeftSubqueryUsing(
  1366.                     Query::create()
  1367.                         ->from('groups', 'g'),
  1368.                     'temp',
  1369.                     'groupID'
  1370.                 ),
  1371.             'SELECT * FROM users AS u LEFT JOIN (SELECT * FROM groups AS g) AS temp USING (groupID)'
  1372.         );
  1373.     }
  1374.  
  1375.     public function testJoinLeftSubqueryUsing3()
  1376.     {
  1377.         $this->assertEquals(
  1378.             (string)Query::create()->from('users', 'u')
  1379.                 ->from('users', 'u')
  1380.                 ->joinLeftSubqueryUsing(
  1381.                     Query::create()
  1382.                         ->from('groups', 'g'),
  1383.                     'temp',
  1384.                     'groupID'
  1385.                 )
  1386.                 ->joinLeftSubqueryOn(
  1387.                     Query::create()
  1388.                         ->from('permissions'),
  1389.                     'perms',
  1390.                     'accessID'
  1391.                 ),
  1392.             'SELECT * FROM users AS u LEFT JOIN (SELECT * FROM groups AS g) AS temp USING (groupID) LEFT JOIN (SELECT * FROM permissions AS g) AS perms USING (accessID)'
  1393.         );
  1394.     }
  1395.  
  1396.     /* RIGHT JOIN RAW */
  1397.  
  1398.     public function testJoinRightRaw1()
  1399.     {
  1400.         $this->assertInstanceOf(
  1401.             self::$queryClassname,
  1402.             Query::create()->from('users', 'u')->joinRightRaw('groups AS g')
  1403.         );
  1404.     }
  1405.  
  1406.     public function testJoinRightRaw2()
  1407.     {
  1408.         $this->assertInstanceOf(
  1409.             (string)Query::create()
  1410.                 ->from('users', 'u')
  1411.                 ->joinRightRaw('groups AS g ON u.groupID = g.groupID'),
  1412.             'SELECT * FROM users AS u RIGHT JOIN groups AS g ON u.groupID = g.groupID'
  1413.         );
  1414.     }
  1415.  
  1416.     public function testJoinRightRaw3()
  1417.     {
  1418.         $this->assertInstanceOf(
  1419.             (string)Query::create()
  1420.                 ->from('users', 'u')
  1421.                 ->joinRightRaw('groups AS g ON u.groupID = g.groupID')
  1422.                 ->joinRightRaw('permission ON g.groupID = permissions.groupID'),
  1423.             'SELECT * FROM users AS u RIGHT JOIN groups AS g ON u.groupID = g.groupID RIGHT JOIN permission ON g.groupID = permissions.groupID'
  1424.         );
  1425.     }
  1426.  
  1427.     /* RIGHT JOIN TABLE */
  1428.  
  1429.     public function testJoinRightTable1()
  1430.     {
  1431.         $this->assertInstanceOf(
  1432.             self::$queryClassname,
  1433.             Query::create()
  1434.                 ->from('users', 'u')
  1435.                 ->joinRightTable('groups', 'g')
  1436.         );
  1437.     }
  1438.  
  1439.     public function testJoinRightTable2()
  1440.     {
  1441.         $this->assertEquals(
  1442.             (string)Query::create()
  1443.                 ->from('users', 'u')
  1444.                 ->joinRightTable('groups', 'g'),
  1445.             'SELECT * FROM users AS u RIGHT JOIN groups AS g'
  1446.         );
  1447.     }
  1448.  
  1449.     public function testJoinRightTable3()
  1450.     {
  1451.         $this->assertEquals(
  1452.             (string)Query::create()
  1453.                 ->from('users', 'u')->joinRightTable('groups', 'g')
  1454.                 ->joinRightTable('permissions'),
  1455.             'SELECT * FROM users AS u RIGHT JOIN groups AS g RIGHT JOIN permissions'
  1456.         );
  1457.     }
  1458.  
  1459.     /* RIGHT JOIN TABLE ON */
  1460.  
  1461.     public function testJoinRightTableOn1()
  1462.     {
  1463.         $this->assertInstanceOf(
  1464.             self::$queryClassname,
  1465.             Query::create()
  1466.                 ->from('users', 'u')
  1467.                 ->joinRightTableOn('groups', 'g', 'u.groupID = g.groupID')
  1468.         );
  1469.     }
  1470.  
  1471.     public function testJoinRightTableOn2()
  1472.     {
  1473.         $this->assertEquals(
  1474.             (string)Query::create()
  1475.                 ->from('users', 'u')
  1476.                 ->joinRightTableOn('groups', 'g', 'u.groupID = g.groupID'),
  1477.             'SELECT * FROM users AS u RIGHT JOIN groups AS g ON u.groupID = g.groupID'
  1478.         );
  1479.     }
  1480.  
  1481.     public function testJoinRightTableOn3()
  1482.     {
  1483.         $this->assertEquals(
  1484.             (string)Query::create()
  1485.                 ->from('users', 'u')
  1486.                 ->joinRightTableOn('groups', 'g', 'u.groupID = g.groupID')
  1487.                 ->joinRightTableOn('permissions', '', 'g.groupID = permissions.groupID'),
  1488.             'SELECT * FROM users AS u RIGHT JOIN groups AS g ON u.groupID = g.groupID RIGHT JOIN permissions ON g.groupID = permissions.groupID'
  1489.         );
  1490.     }
  1491.  
  1492.     /* RIGHT JOIN TABLE USING */
  1493.  
  1494.     public function testJoinRightTableUsing1()
  1495.     {
  1496.         $this->assertInstanceOf(
  1497.             self::$queryClassname,
  1498.             Query::create()
  1499.                 ->from('users', 'u')
  1500.                 ->joinRightTableUsing('groups', 'g', 'groupID')
  1501.         );
  1502.     }
  1503.  
  1504.     public function testJoinRightTableUsing2()
  1505.     {
  1506.         $this->assertEquals(
  1507.             (string)Query::create()
  1508.                 ->from('users', 'u')
  1509.                 ->joinRightTableUsing('groups', 'g', 'groupID'),
  1510.             'SELECT * FROM users AS u RIGHT JOIN groups AS g USING (groupID)'
  1511.         );
  1512.     }
  1513.  
  1514.     public function testJoinRightTableUsing3()
  1515.     {
  1516.         $this->assertEquals(
  1517.             (string)Query::create()
  1518.                 ->from('users', 'u')
  1519.                 ->joinRightTableUsing('groups', 'g', 'groupID')
  1520.                 ->joinRightTableUsing('permissions', '', 'accessID'),
  1521.             'SELECT * FROM users AS u RIGHT JOIN groups AS g USING (groupID) RIGHT JOIN permissions USING (accessID)'
  1522.         );
  1523.     }
  1524.  
  1525.     /* RIGHT JOIN SUBQUERY */
  1526.  
  1527.     public function testJoinRightSubquery1()
  1528.     {
  1529.         $this->assertInstanceOf(
  1530.             self::$queryClassname,
  1531.             Query::create()
  1532.                 ->from('users', 'u')
  1533.                 ->joinRightSubquery(
  1534.                     Query::create()
  1535.                         ->from('groups', 'g'),
  1536.                     'temp'
  1537.                 )
  1538.         );
  1539.     }
  1540.  
  1541.     public function testJoinRightSubquery2()
  1542.     {
  1543.         $this->assertEquals(
  1544.             (string)Query::create()
  1545.                 ->from('users', 'u')
  1546.                 ->joinRightSubquery(
  1547.                     Query::create()
  1548.                         ->from('groups', 'g'),
  1549.                     'temp'
  1550.                 ),
  1551.             'SELECT * FROM users AS u RIGHT JOIN (SELECT * FROM groups AS g) AS temp'
  1552.         );
  1553.     }
  1554.  
  1555.     public function testJoinRightSubquery3()
  1556.     {
  1557.         $this->assertEquals(
  1558.             (string)Query::create()->from('users', 'u')
  1559.                 ->joinRightSubquery(
  1560.                     Query::create()
  1561.                         ->from('groups', 'g'),
  1562.                     'temp'
  1563.                 )
  1564.                 ->joinRightSubquery(
  1565.                     Query::create()
  1566.                         ->from('permissions'),
  1567.                     'perms'
  1568.                 ),
  1569.             'SELECT * FROM users AS u RIGHT JOIN (SELECT * FROM groups AS g) AS temp RIGHT JOIN (SELECT * FROM permissions AS g) AS perms'
  1570.         );
  1571.     }
  1572.  
  1573.     /* RIGHT JOIN SUBQUERY ON */
  1574.  
  1575.     public function testJoinRightSubqueryOn1()
  1576.     {
  1577.         $this->assertInstanceOf(
  1578.             self::$queryClassname,
  1579.             Query::create()
  1580.                 ->from('users', 'u')
  1581.                 ->joinRightSubqueryOn(
  1582.                     Query::create()
  1583.                         ->from('groups', 'g'),
  1584.                     'temp',
  1585.                     'u.groupID = temp.groupID'
  1586.                 )
  1587.         );
  1588.     }
  1589.  
  1590.     public function testJoinRightSubqueryOn2()
  1591.     {
  1592.         $this->assertEquals(
  1593.             (string)Query::create()
  1594.                 ->from('users', 'u')
  1595.                 ->joinRightSubqueryOn(
  1596.                     Query::create()
  1597.                         ->from('groups', 'g'),
  1598.                     'temp',
  1599.                     'u.groupID = temp.groupID'
  1600.                 ),
  1601.             'SELECT * FROM users AS u RIGHT JOIN (SELECT * FROM groups AS g) AS temp ON u.groupID = temp.groupID'
  1602.         );
  1603.     }
  1604.  
  1605.     public function testJoinRightSubqueryOn3()
  1606.     {
  1607.         $this->assertEquals(
  1608.             (string)Query::create()->from('users', 'u')
  1609.                 ->joinRightSubqueryOn(
  1610.                     Query::create()
  1611.                         ->from('groups', 'g'),
  1612.                     'temp',
  1613.                     'u.groupID = temp.groupID'
  1614.                 )
  1615.                 ->joinRightSubqueryOn(
  1616.                     Query::create()
  1617.                         ->from('permissions'),
  1618.                     'perms',
  1619.                     'temp.groupID = perms.groupID'
  1620.                 ),
  1621.             'SELECT * FROM users AS u RIGHT JOIN (SELECT * FROM groups AS g) AS temp ON u.groupID = temp.groupID RIGHT JOIN (SELECT * FROM permissions AS g) AS perms ON temp.groupID = perms.groupID'
  1622.         );
  1623.     }
  1624.  
  1625.     /* RIGHT JOIN SUBQUERY USING */
  1626.  
  1627.     public function testJoinRightSubqueryUsing1()
  1628.     {
  1629.         $this->assertInstanceOf(
  1630.             self::$queryClassname,
  1631.             Query::create()
  1632.                 ->from('users', 'u')
  1633.                 ->joinRightSubqueryUsing(
  1634.                     Query::create()
  1635.                         ->from('groups', 'g'),
  1636.                     'temp',
  1637.                     'groupID'
  1638.                 )
  1639.         );
  1640.     }
  1641.  
  1642.     public function testJoinRightSubqueryUsing2()
  1643.     {
  1644.         $this->assertEquals(
  1645.             (string)Query::create()
  1646.                 ->from('users', 'u')
  1647.                 ->joinRightSubqueryUsing(
  1648.                     Query::create()
  1649.                         ->from('groups', 'g'),
  1650.                     'temp',
  1651.                     'groupID'
  1652.                 ),
  1653.             'SELECT * FROM users AS u RIGHT JOIN (SELECT * FROM groups AS g) AS temp USING (groupID)'
  1654.         );
  1655.     }
  1656.  
  1657.     public function testJoinRightSubqueryUsing3()
  1658.     {
  1659.         $this->assertEquals(
  1660.             (string)Query::create()->from('users', 'u')
  1661.                 ->from('users', 'u')
  1662.                 ->joinRightSubqueryUsing(
  1663.                     Query::create()
  1664.                         ->from('groups', 'g'),
  1665.                     'temp',
  1666.                     'groupID'
  1667.                 )
  1668.                 ->joinRightSubqueryOn(
  1669.                     Query::create()
  1670.                         ->from('permissions'),
  1671.                     'perms',
  1672.                     'accessID'
  1673.                 ),
  1674.             'SELECT * FROM users AS u RIGHT JOIN (SELECT * FROM groups AS g) AS temp USING (groupID) RIGHT JOIN (SELECT * FROM permissions AS g) AS perms USING (accessID)'
  1675.         );
  1676.     }
  1677.  
  1678.     /* UNION */
  1679.  
  1680.     public function testUnion1()
  1681.     {
  1682.         $this->assertInstanceOf(
  1683.             self::$queryClassname,
  1684.             Query::combineQueriesUsingUnion(
  1685.                 array(
  1686.                     Query::create()->from('users'),
  1687.                     Query::create()->from('groups')
  1688.                 )
  1689.             )
  1690.         );
  1691.     }
  1692.  
  1693.     public function testUnion2()
  1694.     {
  1695.         $this->assertEquals(
  1696.             (string)Query::combineQueriesUsingUnion(
  1697.                 array(
  1698.                     Query::create()->selectFields(['groupID'])->from('users'),
  1699.                     Query::create()->selectFields(['groupID'])->from('groups')
  1700.                 )
  1701.             ),
  1702.             '(SELECT groupID FROM users) UNION (SELECT groupID FROM groups)'
  1703.         );
  1704.     }
  1705.  
  1706.     public function testUnion3()
  1707.     {
  1708.         $this->assertEquals(
  1709.             (string)Query::combineQueriesUsingUnion(
  1710.                 array(
  1711.                     Query::create()->selectFields(['groupID'])->from('users'),
  1712.                     Query::create()->selectFields(['groupID'])->from('groups'),
  1713.                     Query::create()->selectFields(['groupID'])->from('permissions')
  1714.                 )
  1715.             ),
  1716.             '(SELECT groupID FROM users) UNION (SELECT groupID FROM groups) UNION (SELECT groupID FROM permissions)'
  1717.         );
  1718.     }
  1719.  
  1720.     /* UNION ALL */
  1721.  
  1722.     public function testUnionAll1()
  1723.     {
  1724.         $this->assertInstanceOf(
  1725.             self::$queryClassname,
  1726.             Query::combineQueriesUsingUnionAll(
  1727.                 array(
  1728.                     Query::create()->from('users'),
  1729.                     Query::create()->from('groups')
  1730.                 )
  1731.             )
  1732.         );
  1733.     }
  1734.  
  1735.     public function testUnionAll2()
  1736.     {
  1737.         $this->assertEquals(
  1738.             (string)Query::combineQueriesUsingUnionAll(
  1739.                 array(
  1740.                     Query::create()->selectFields(['groupID'])->from('users'),
  1741.                     Query::create()->selectFields(['groupID'])->from('groups')
  1742.                 )
  1743.             ),
  1744.             '(SELECT groupID FROM users) UNION ALL (SELECT groupID FROM groups)'
  1745.         );
  1746.     }
  1747.  
  1748.     public function testUnionAll3()
  1749.     {
  1750.         $this->assertEquals(
  1751.             (string)Query::combineQueriesUsingUnion(
  1752.                 array(
  1753.                     Query::create()->selectFields(['groupID'])->from('users'),
  1754.                     Query::create()->selectFields(['groupID'])->from('groups'),
  1755.                     Query::create()->selectFields(['groupID'])->from('permissions')
  1756.                 )
  1757.             ),
  1758.             '(SELECT groupID FROM users) UNION ALL (SELECT groupID FROM groups) UNION ALL (SELECT groupID FROM permissions)'
  1759.         );
  1760.     }
  1761.    
  1762.     /* UNION DISTINCT */
  1763.  
  1764.     public function testUnionDistinct1()
  1765.     {
  1766.         $this->assertInstanceOf(
  1767.             self::$queryClassname,
  1768.             Query::combineQueriesUsingUnionDistinct(
  1769.                 array(
  1770.                     Query::create()->from('users'),
  1771.                     Query::create()->from('groups')
  1772.                 )
  1773.             )
  1774.         );
  1775.     }
  1776.  
  1777.     public function testUnionDistinct2()
  1778.     {
  1779.         $this->assertEquals(
  1780.             (string)Query::combineQueriesUsingUnionDistinct(
  1781.                 array(
  1782.                     Query::create()->selectFields(['groupID'])->from('users'),
  1783.                     Query::create()->selectFields(['groupID'])->from('groups')
  1784.                 )
  1785.             ),
  1786.             '(SELECT groupID FROM users) UNION DISTINCT (SELECT groupID FROM groups)'
  1787.         );
  1788.     }
  1789.  
  1790.     public function testUnionDistinct3()
  1791.     {
  1792.         $this->assertEquals(
  1793.             (string)Query::combineQueriesUsingUnion(
  1794.                 array(
  1795.                     Query::create()->selectFields(['groupID'])->from('users'),
  1796.                     Query::create()->selectFields(['groupID'])->from('groups'),
  1797.                     Query::create()->selectFields(['groupID'])->from('permissions')
  1798.                 )
  1799.             ),
  1800.             '(SELECT groupID FROM users) UNION DISTINCT (SELECT groupID FROM groups) UNION DISTINCT (SELECT groupID FROM permissions)'
  1801.         );
  1802.     }
  1803. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement