Question: Here are some sql tables:

**table USERS**

```
id
1

```

---

**table PROJECTS**

```
id
1

```

---

**table LOCATIONS**

```
id
1
2

```

---

**table USERS\_x\_PROJECTS**

```
id      id_USER      id_PROJECT
1       1            1

```

---

**table USERS\_x\_LOCATIONS**

```
id      id_USER      id_LOCATION
1       1            1

```

---

**table PROJECTS\_x\_LOCATIONS**

```
id      id_PROJECT      id_LOCATION
1       1               1
2       1               2

```

---

Users are linked to Projects. The links between Users and Projects are stored into USERS\_x\_PROJECTS.  
Users and Projects can be linked to Locations. The links are respectively stored into USERS\_x\_LOCATIONS and PROJECTS\_x\_LOCATIONS.

**Now lets say i'm user #1. What i want to do is fetch all projects with their locations where none of the projects's location is matching one of mine.**

**Expected result:**
With the example above, the expected result is to get an empty array because both the user and the only project in the database are linked to the location #1.

**Actual result:** 
I get the project #1

**What i tried:**

```
SELECT
    p.id id,
    GROUP_CONCAT(DISTINCT l.id SEPARATOR "#") l_ids
FROM
    PROJECTS p
LEFT JOIN
    PROJECTS_x_LOCATIONS pl ON pl.id_PROJECT = p.id
LEFT JOIN
    LOCATIONS l ON l.id = pl.id_LOCATION
WHERE
    l.id != 1
GROUP BY
    p.id 

```

Thanks for the help!

Answer: 
In swift it has to be checked whether photo output supports flash mode at all.

```
 let settings = AVCapturePhotoSettings()
 if photoOutput.supportedFlashModes.contains(.on) {
     settings.flashMode = self.flashMode
 } else {
     settings.flashMode = .off
 }

 self.photoOutput?.capturePhoto(with: settings, delegate: self)

```
So building on Soja's answer, I decided to interrogate the `supportedFlashModes` array provided by the `photoOutput` variable which is an `AVCapturePhotoOutput`.

```
self.inProgressPhotoCaptureDelegates[photoCaptureDelegate.requestedPhotoSettings.uniqueID] = photoCaptureDelegate

if let _ = self.photoOutput.supportedFlashModes.filter({ (mode) -> Bool in
    return mode.intValue == AVCaptureFlashMode.auto.rawValue
}).last {
    let position = self.videoDeviceInput.device.position
    photoSettings.flashMode = position == .front || position == .unspecified ? .off : .auto
} else {
    photoSettings.flashMode = .off
}

self.photoOutput.capturePhoto(with: photoSettings, delegate: photoCaptureDelegate)

```

There are probably some more comprehensive ways to do it, but this ensures that the `.auto` mode is supported before attempting to use it. The difference and issue here seems to relate to the type of device, iPhone vs iPad due to the fact that iPads don't have a flash on the back like iPhones do. In other words, it works fine on my phone.