/**
  * @param string $class
  * @param ORM    $orm
  * @param Loader $loader
  */
 public function __construct($class, ORM $orm = null, Loader $loader = null)
 {
     $this->class = $class;
     $this->orm = $this->saturate($orm, ORM::class);
     $this->columns = $this->dataColumns = [];
     //We aways need primary loader
     if (empty($this->loader = $loader)) {
         //Selector always need primary data loaded to define data structure and perform query
         //parsing, in most of cases we can easily use RootLoader associated with primary record
         //schema
         $this->loader = new RootLoader($this->orm, null, $this->orm->schema($class));
     }
     //Every ORM loader has ability to declare it's primary database, we are going to use
     //primary loader database to initiate selector
     $database = $this->loader->dbalDatabase();
     //AbstractSelect construction
     parent::__construct($database, $database->driver()->queryCompiler($database->getPrefix()));
 }