original_string: public function save()
      {
          $di = DI::getDefault();
  
          $database = $di->getService( "database" );
  
          /**
           * Decide if we should update or insert
           * (if we know the record exists in the database...)
           */
          if ( $this->_exists_in_db )
          {
              /**
               * Retrieve a query from the query builder
               */
              $query = $database->buildQuery( $this->_table_name, "update", array("columns" => $this->_columns) );
              
              /**
               * Create an array with the model attributes (binding parameters)
               */
              $attributes = $this->getAttributes();
              
              /**
               * Add "snap_" prefix to the snapshot in order to not get index conflict when we merge attributes and snapshot
               */
              $snapshot = array();
              
              foreach ( $this->_snapshot as $key => $value )
              {
                  $snapshot["snap_" . $key] = $value;
              }
              
              /**
               * Merge our binding parameters.
               * Bind the parameters to the query and return the result.
               */
              return $query->execute( array_merge($attributes, $snapshot) );
          }
          else
          {
              /**
               * Retrieve a query from the query builder
               */
              $query = $database->buildQuery( $this->_table_name, "insert", array("columns" => $this->_columns) );
              
              /**
               * Create an array with the model attributes (binding parameters)
               */
              $attributes = $this->getAttributes();
              
              /**
               * Bind the parameters and return the result
               */
              return $query->execute( $attributes );
          }
      }
code: public function save()
      {
          $di = DI::getDefault();
  
          $database = $di->getService( "database" );
  
          /**
           * Decide if we should update or insert
           * (if we know the record exists in the database...)
           */
          if ( $this->_exists_in_db )
          {
              /**
               * Retrieve a query from the query builder
               */
              $query = $database->buildQuery( $this->_table_name, "update", array("columns" => $this->_columns) );
              
              /**
               * Create an array with the model attributes (binding parameters)
               */
              $attributes = $this->getAttributes();
              
              /**
               * Add "snap_" prefix to the snapshot in order to not get index conflict when we merge attributes and snapshot
               */
              $snapshot = array();
              
              foreach ( $this->_snapshot as $key => $value )
              {
                  $snapshot["snap_" . $key] = $value;
              }
              
              /**
               * Merge our binding parameters.
               * Bind the parameters to the query and return the result.
               */
              return $query->execute( array_merge($attributes, $snapshot) );
          }
          else
          {
              /**
               * Retrieve a query from the query builder
               */
              $query = $database->buildQuery( $this->_table_name, "insert", array("columns" => $this->_columns) );
              
              /**
               * Create an array with the model attributes (binding parameters)
               */
              $attributes = $this->getAttributes();
              
              /**
               * Bind the parameters and return the result
               */
              return $query->execute( $attributes );
          }
      }
code_tokens: public function save ( ) { $ di = DI :: getDefault ( ) ; $ database = $ di -> getService ( "database" ) ; /**
           * Decide if we should update or insert
           * (if we know the record exists in the database...)
           */ if ( $ this -> _exists_in_db ) { /**
               * Retrieve a query from the query builder
               */ $ query = $ database -> buildQuery ( $ this -> _table_name , "update" , array ( "columns" => $ this -> _columns ) ) ; /**
               * Create an array with the model attributes (binding parameters)
               */ $ attributes = $ this -> getAttributes ( ) ; /**
               * Add "snap_" prefix to the snapshot in order to not get index conflict when we merge attributes and snapshot
               */ $ snapshot = array ( ) ; foreach ( $ this -> _snapshot as $ key => $ value ) { $ snapshot [ "snap_" . $ key ] = $ value ; } /**
               * Merge our binding parameters.
               * Bind the parameters to the query and return the result.
               */ return $ query -> execute ( array_merge ( $ attributes , $ snapshot ) ) ; } else { /**
               * Retrieve a query from the query builder
               */ $ query = $ database -> buildQuery ( $ this -> _table_name , "insert" , array ( "columns" => $ this -> _columns ) ) ; /**
               * Create an array with the model attributes (binding parameters)
               */ $ attributes = $ this -> getAttributes ( ) ; /**
               * Bind the parameters and return the result
               */ return $ query -> execute ( $ attributes ) ; } }
docstring: Inserts or updates the database table
docstring_tokens: Inserts or updates the database table