protected function scanTableColumns()
	{
		$driver = $this->flupdo->getAttribute(\PDO::ATTR_DRIVER_NAME);

		switch ($driver) {
			case 'sqlite':
				$r = $this->flupdo->query('PRAGMA table_info('.$this->flupdo->quoteIdent($this->table).')');

				// build properties description
				$this->properties = array();
				foreach($r as $cm) {
					$this->properties[$cm['name']] = array(
						'name' => $cm['name'],
						'type' => $cm['type'],
						'is_pk' => (bool) $cm['pk'],
					);
				}
				break;
			default:
				$r = $this->flupdo->select('*')
					->from($this->flupdo->quoteIdent($this->table))
					->where('NULL')->limit(0)
					->query();
				$col_cnt = $r->columnCount();

				// build properties description
				$this->properties = array();
				for ($i = 0; $i < $col_cnt; $i++) {
					$cm = $r->getColumnMeta($i);
					$this->properties[$cm['name']] = array(
						'name' => $cm['name'],
						'type' => $cm['native_type'],
						'is_pk' => in_array('primary_key', $cm['flags']),
					);
				}
				break;
		}
	}