code: protected function build()/*# : string */
      {
          // settings
          $settings = $this->getSettings();
  
          // before build()
          $this->beforeBuild();
  
          // configs
          $configs  = $this->getConfig();
  
          // start of result array
          $result = [$this->getType()];
  
          // seperator & indent
          $sp = $settings['seperator'];
          $in = $settings['indent'];
          $si = $sp . $in;
  
          foreach ($configs as $pos => $part) {
              // before clause
              if (isset($this->before[$pos])) {
                  $result[] = join($sp, $this->before[$pos]);
              }
  
              $built = call_user_func([$this, $part['func']]);
              if (!empty($built)) {
                  $prefix = $part['prefix'] . (empty($part['prefix']) ?
                      ($part['indent'] ? $in : '') : $si);
                  $result[] = $prefix . join($part['join'] . $si, $built);
              }
  
              // after clause
              if (isset($this->after[$pos])) {
                  $result[] = join($sp, $this->after[$pos]);
              }
          }
  
          return join($sp, $result);
      }
docs: Real building the statement
  
  @return string
  @access protected